• Актуален ли ассемблер на сегодняшний день?

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

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

    Области - реверсинженеринг, низкоуровневая оптимизация и низкоуровневая отладка unmanaged кода (т.е. к примеру c,c++). Все это можно встретить и в разработке для микроконтроллеров, и в оптимизации кода для gpu и поиске причины, почему простой цикл кратно работает медленнее из-за вот этой 'безобидной строчки'.

    Но повторюсь, без ассемблера живется неплохо.
    Ответ написан
    9 комментариев
  • Актуален ли ассемблер на сегодняшний день?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Ассемблер полезен при анализе прошивок на безопасность.
    При изучении того как работает софт без исходного кода (обратный инжинеринг)
    и при решении задач интеграции разных слоёв софта.

    Ассемблер также очень близко стоит к разработке компилляторов. И если у вас нет
    соотвествующих знаний то строить свой компиллятор вы не сможете. Или вам нужно
    будет изучать готовые back-ends, virtual-machines.

    Ассемблер помогает при анализе узких мест в коде. В частности например
    векторизация вычислений ставит в первую очередь вопросы на которые ассемблер
    отвечает а ЯВУ - нет.

    Знания ассемблера помогают сделать бинарник компактнее. Это важно при разработке
    встраиваемых систем.
    Ответ написан
    Комментировать
  • Что тут задача фронтенда, а что бэкэнда?

    Newto
    @Newto
    Ваш вопрос похож на вопрос не от технического специалиста, а от клиента, который хочет понять что будет делать технический специалист по его заказу. Если я прав, то бросьте это дело — а именно, не пытайтесь понять что должен сделать верстальщик, а что программист. Вам тут это тысячу раз объяснят, вы поймёте, а потом поймёте, что всё равно не поняли. Если вы сами этим не занимаетесь, то понимание придёт лишь с опытом общения с исполнителями.
    Ответ написан
    Комментировать
  • Какие есть способы хранения вебсокет соединений?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Сокеты невозможно сериализовать. Придумай другую термиологию или другую идею.

    Возможно ты хотел что-то другое?
    Ответ написан
    2 комментария
  • Какие есть способы хранения вебсокет соединений?

    @Everything_is_bad
    Ты не можешь сериализовать "пул вебсокет соединений". Если он сделан в рамках приложения, то он там будет жить весь лайфтайм этого приложения. А "чтобы соединения были в редисе" это значит что ты пул изначально сделал через pub/sub в redis.
    Другое дело, что ты можешь поднять несколько инстансов (как отдельные процессы, так и отдельные сервера), и сделать либо маршрутизацию по ним, либо возможным обмен между ними, вот и всё масштабирование.
    ЗЫ про "pub/sub в redis." чуток не то написал, это не пул в нем сделан, а про коммуникацию для инстансов.
    Ответ написан
    2 комментария
  • Что я сделал не так?

    Vindicar
    @Vindicar
    RTFM!
    В-нулевых, пиши симптомы ошибки.
    Во-первых, simpleDividers(n)[len(simpleDividers(n))+1]
    Тебе что, палец отрезают за каждую использованную локальную переменную?
    Зачем два раза вычислять simpleDividers(n)? Почему не закинуть результат в переменную?
    Во-вторых, ты пытаешься обратиться к элементу списка с номером, превышающим его длину (потому что +1).
    Т.е. если у числа три делителя, ты бы обратился к номеру 4. Как по-твоему, это получится сделать?
    В-третьих, ты не возвращаешь answer через return при возврате из simpleDividers(), а код ниже написна так, словно ты его возвращаешь.
    Ответ написан
    Комментировать
  • Почему функция не видит переменную?

    @0x0f80
    Проблема в том, что переменная i из цикла for не видна внутри page.evaluate(). Чтобы это исправить, передайте i как аргумент в page.evaluate(), например:
    for(let i = 2; i <= 19; i++) {
        let arr = await page.evaluate((index) => {
            let text = document.querySelector(`body > main > div > section > div:nth-child(${index})`).innerText;
            return text;
        }, i); 
        console.log(arr);
    }
    Ответ написан
    1 комментарий
  • Полезность моделей памяти которые отличный от linear?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Во-первых, речь идет об Адресации памяти, а не Модели памяти - это совершенно разные вещи:
    - Адресация памяти - то, как мы к памяти обращаемся
    - Модель памяти - какие ограничения выставляются на рантайм. Например, реордеринг операций

    Не совсем понял, чем представленная модель отличается от обычной линейной. Если только тем, что указанный reference - любое число, а не просто смещение от базы, то:
    - Это только лишние расходы на определение реального адреса
    - Виртуальная память уже реализует такую концепцию, но более сложную - с несколькими уровнями адресации - https://www.kernel.org/doc/html/latest/mm/page_tab...

    Мне кажется что данная модель памяти подойдет для машины заточенной под ООП (привет java)

    Единственное преимущество - локальность (кэш хиты). Но его и самим можно добиться.
    В той же самой джаве это делается через паттерн Off Heap

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


    См. иерархию страниц памяти. Там это уже реализовано

    Собственно полезна ли данная модель памяти


    Полезна, но уже устарела. Сейчас используются более продвинутые стратегии - https://ru.wikipedia.org/wiki/Адресация_памяти

    если для операций над памятью буду использоваться load/store

    А как иначе?

    а алоцирование кусочков будет проводиться чем-то похожем на new

    Любой new под капотом использует системные вызовы, которые этот самый load/store вызывают
    Ответ написан
    Комментировать
  • Получение з/п в крипте. Какие минусы?

    vabka
    @vabka
    Токсичный шарпист
    Минусы:
    1. Вам самим придётся все свои доходы декларировать, чтобы потом не жаловаться, что вам заблокировали счета и начислили пени за неуплаченный налог в лучшем случае
    2. Закон тебя никак не защищает (могут уволить одним днём, например, и вполне законно могут недоплатить, списав на волатильность курса)
    3. Работодатель, который такое предлагает - в 99% случаев занимается чем-то серым, а то и незаконным => тебя ещё могут как соучастника накрыть, если очень сильно не повезёт.
    4. Курс волатильный и могут быть проблемы при попытке перевода в фиат (начиная с комиссий и невыгодного курса, заканчивая обвалом курса и отсутствием покупателей. Про возможность объявления крипты вне закона или блокировки счёта на бирже или в банке я молчу)

    Законно ли это(живу в России)?

    То что ты делаешь уже не законно, даже без привлечения крипты, тк в России запрещено иметь трудовые отношения (регулярные работы на полный рабочий день с фиксированной ежемесячной оплатой) между самозанятым (исполнителем в статусе самозанятого) и заказчиком, ибо это очевидное уклонение от налогов (со стороны исполнителя, ибо так ты уклоняешься от НФДЛ) и нарушение трудового кодекса (со стороны заказчика, тк он уклоняется от уплаты взносов в ФСС и ПФР, и не обеспечивает тебя-работника социальными гарантиями)

    Законно ли это(живу в России)?

    Крипта в России не является законным средством платежей. Так что если не хочется проблем с законом - нужно оформлять две операции:
    1. Оказание услуг (с ценой рублях).
    2. Продажа/покупка крипты на эту сумму.
    Причём по времени сначала ты должен оказать услугу, а уже потом "купить" крипту, после чего её продать, и уже тогда деньги с продажи крипты должны поступить на твой счёт в банке. Иначе рискуешь словить блокировку (в лучшем случае - временную, пока не объяснишь банку, что это вообще произошло)

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

    Много ли уходит на комиссиях?

    Это уже зависит от того, как будешь выводить и как тебе будет твой "работодатель" деньги присылать.
    Ответ написан
    4 комментария
  • Как работает динамическое прямое соединение для торрент-клиентов?

    @SunTechnik
    https://ru.m.wikipedia.org/wiki/BitTorrent
    Есть torent-tracker, (с белым ip) где регистрируются клиенты и сообщают свои параметры.
    Так как протокол udp без установления соединения, то можно открыть порт через Nat, послав пакет на известный белый ip, после чего другой клиент может слать данные на этот открытый udp порт. (читать про Tun/stun)

    Но в любом случае нужен посредник с белым ip, для регистрации и пробития NAT.
    Ответ написан
  • Какое ядро использует Debian?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    В оригинальном ядре linux есть несвободные прошивка и блобы

    Это неверное заявление. Ядро Торвальдса (вы же его называете "оригинальным"?) доступно в виде исходников под набором свободных лицензий. Но часть этих исходников -- это драйвера устройств, для работы которых требуется firmware, возможно проприетарное. Если собрать такое ядро, то оно будет полностью свободным, но ряд устройств для работы потребует проприетарных блобов, не являющихся частью ядра. Несвободные компоненты в принципе не могут стать частью этого ядра из-за конфликта лицензий.

    какое ядро всё-таки использует Debian ?

    Можно тупо взять и посмотреть, например для debian 12: https://packages.debian.org/source/bookworm/linux
    Внизу страницы есть ссылки на архив с исходниками ядра (это копия ядра из ветки stable) и на архив исходников debian-пакета, а также ссылка на git последнего.
    Ответ написан
    Комментировать
  • Как посчитать разницу между двумя датами в секундах, минутах, часах и т.д.?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Почему так происходит, и как такое можно решить?

    Потому что объект Date возвращает дату, а не интервал времени. Попробуйте так:
    function getTimeDiff(startDate, endDate) {
      const diff = endDate - startDate;
    
      const seconds = Math.floor(diff / 1000);
      const minutes = Math.floor(seconds / 60);
      const hours = Math.floor(minutes / 60);
      const days = Math.floor(hours / 24);
      const months = Math.floor(days / 30); // ~30
      const years = Math.floor(days / 365); // ~365
    
      return {
        years,
        months: months % 12,
        days: days % 30,
        hours: hours % 24,
        minutes: minutes % 60,
        seconds: seconds % 60
      };
    }
    
    const today = new Date();
    const targetDate = new Date("2023-12-29 00:00:00");
    const diff = getTimeDiff(targetDate, today);
    
    console.log(`Разница, лет: ${diff.years}, месяцев: ${diff.months}, дней: ${diff.days}, часов: ${diff.hours}, минут: ${diff.minutes}, секунд: ${diff.seconds}`);
    
    // Разница, лет: 0, месяцев: 0, дней: 0, часов: 9, минут: 51, секунд: 22
    Ответ написан
    Комментировать
  • Как клонировать приватный проект с GitHub на свой VPS?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    • На сервере создаете SSH ключ пользователю, под которым необходимо клонировать репозиторий
    • В настройках репозитория в разделе развертывания добавляете этот ключ
    Ответ написан
  • Hdd на всю жизнь?

    @asmelnik
    Считаем, что "жесткий диск" -- некий достаточно жесткий носитель оцифрованных данных.
    Тогда пожалуйста
    evm-2.jpg
    Металлическая перфокарта.
    Изготавливалась из алюминия. Может быть изготовлена из любого металла, например меди или золота.
    Процесс переноса на перфокарту данных известен, устройство считывания довольно простое и может быть изготовлено самостоятельно, срок хранения -- медные изделия в археологических музеях датируются медным веком :), а золотые самородки говорят о гарантии в пару миллионов лет.
    Т.к. любые данные на компьютере - всего лишь 0 или 1 + протокол преобразования, то получаете жесткий диск с временем хранения в более-менее подходящих условиях несколько десятков тысяч лет.
    Ответ написан
    Комментировать
  • Hdd на всю жизнь?

    pindschik
    @pindschik
    ФЫВА ОЛДЖ
    Не может.
    - В том числе не могут сохраниться данные (размагнитятся).
    - Если это SSD - тоже не могут (заряд утечет из ячеек, но появится посторонний от окружающей радиации).
    - В том числе выйдет из строя механика (или от работы, или от лежания - "прикипит").
    - В том числе окислятся и потеряют рабочие свойства электрические элементы (изоляция, пластик, дорожки, токоведущие кабели головки станут хрупкими).

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

    Посмотрите пример на практике - Вояджеры. Почти 40 лет, и уже куча проблем. И они намного проще современной техники и разработаны с запасом надежности, и там нет диска...
    Ответ написан
    Комментировать
  • Hdd на всю жизнь?

    vabka
    @vabka
    Токсичный шарпист
    При условии, что его никогда не будут доставать из коробки.

    В принципе самый первый жесткий диск появился 60 лет назад. Самый первый 3.5" - 40 лет назад.

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

    Если нужно 80+ лет холодного хранения, то используй другие технологии: магнитную ленту, стеклянные диски, бумагу.
    Ответ написан
    Комментировать
  • Почему при создании объединенного типа из нескольких в условии не работает условие или?

    Col | ColWithMain работает взаимоисключающе. Вы определяете тип но полю type. Почитайте https://habr.com/ru/articles/778060/.
    Ответ написан
    Комментировать
  • Почему javascript не хочет читать функции?

    IvanU7n
    @IvanU7n
    потому что querySelectorAll() возвращает не массив, а похожий на него объект (NodeList)
    если нужен массив, нужно преобразовать вручную через Array.from()
    Ответ написан
  • Что стоит учить с или c++ или c#?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    хочу разрабатывать ПО для ПК.

    "ПО для ПК" - это очень широкий набор и каждый из этих языков подходит, но для разных подмножеств.

    Или может лучше начать с C#, а дальше уже выучу C++?

    Если хочешь C++ - учи сразу C++.

    Надо ли учить Си?

    Если будешь писать на си.

    Подумал начать с C++

    Если хочешь потом с C++ перейти на что-то другое, то начинай с этого "чего-то другого".
    Ответ написан
    Комментировать
  • Разработка продающего сайта для начинающих. Как не заплатить деньги зря?

    Sanes
    @Sanes
    Сделать с минимальным набором функционала и не тратиться сильно на дизайн. Бюджет выделить, который не жалко потерять.
    Возможно вам не нужен отдельный продукт, а будет достаточно работы на маркетплейсах.
    Ответ написан
    1 комментарий