• Как работает этот код? Почему у функции появляется метод?

    @LJ322
    const cancelable = fn => { // Создаётся функция cancelable, которая принимает функцию и сохраняет в переменную fn
      const wrapper = (...args) =>{ // Создаётся функция-обёртка, которая принимает любой набор аргументов
        if(fn) return fn(...args) // Если в cancelable была передана функция, то вызывает её с необходимыми аргументами
      }
    
      wrapper.cancel = () => fn = null // Добавляет свойство во wrapper для очистки переменной fn 
    
      return wrapper // Возвращает обёртку
    }
    
    const fn = par =>{ // Функция, которая оборачивается в декоратор со своим аргументом
      console.log('Function called, par:',par)
    }
    
    const f = cancelable(fn) // Создаёт обёртку вокруг fn
    
    f('first') // Function called, par: first
    f.cancel() // fn является переменной внутри cancelable, здесь мы её обнуляем
    f('second') // Ничего не выводит, потому что условие у wrapper отрабатывает, только если функция есть
    Ответ написан
    Комментировать
  • Какой процессор выбрать под виртуальные машины?

    @Drno
    ну логично что 11 поколение мощнее))) так что бери его

    если жестко собрался к ядрам привязываться - тогда 10е...

    и зачем на linux VB, когда там есть офигенный Qemu-KVM?)
    Ответ написан
    1 комментарий
  • Как практиковаться в программировании?

    Adamos
    @Adamos
    от выбора библиотек

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    что значит код

    ubfx r0, r0, #1, #1 -- извлечь битовое поле шириной 1 бит (правая единица) начиная с бита №1 (левая единица) из регистра r0 (правый r0) и поместить результат в r0 (левый r0).
    bx lr -- перейти по адресу в регистре lr, обычно это возврат из подпрограммы.
    Семантика опкодов легко гуглится по названию опкода и названию архитектуры процессора.

    какая между ними разница

    ubfx r0, r0, #1, #1
    ubfx r0, r0, #2, #1
    теперь, когда ты знаешь, что это за опкод, ты можешь понять сам, что они извлекают битовое поле начиная с разных битовых позиций.

    что я делаю не так

    ты не написал, что конкретно ты делаешь: что и где меняешь и как проверяешь результат.
    Ответ написан
    3 комментария
  • Существуют ли сервисы анализа кода сайтов?

    DevMan
    @DevMan
    не существует. иначе обфускация (минимизация - частный вид обфускации, хоть и с другими целями) не имела бы место быть.

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

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

    Но если не получится это применить (например на целевой машине не стоит студия/райдер) или это просто слишком неуловимая ошибка, то Тогда остаётся только обмазаться телеметрией (логами, метриками) и смотреть, что происходит.
    Ответ написан
    6 комментариев
  • Какие основные понятия в ООП?

    Агрегация/Ассоциация/Композиция - это всё виды взаимоотношений между разными типами. Это не принципы
    Абстракция - это просто сама возможность вводить какие-то новые абстракции, поверх уже существующих. Ради этого ООП и придумано.

    ИМХО, вот эти все попытки выделить основные принципы ООП в современном мире не имеют смысла, тк языки сейчас мультипарадигменные и постоянно добавляют и убирают какие-то части.

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

    Так что из всех принципов, которые объединяют все более-менее ООП-языки остаётся только:

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

    В общем-то первый такой принцип можно назвать этой самой абстракцией и, отчасти, инкапсуляцией.
    Ответ написан
    Комментировать
  • Можно ли обойтись без базовой станции?

    @Drno
    Роутер то какой стоит??
    Скорее всего он просто перегревается. И стоит 700р))

    У Кинетика есть хорошие модели

    Можно микротик поставить, Hap AC - ему 15 клиентов вообще лафа)))
    Ответ написан
    1 комментарий
  • Как работает свитч-кейс?

    https://developer.mozilla.org/ru/docs/Web/JavaScri...
    switch-case в js не умеет сопоставлять одновременно несколько значений.
    Так что никак твой код рабочим не сделать.
    Тем более, что не понятно, что он должен делать.

    В общем случае switch разворачивается примерно вот так:

    switch (expression) { // expression - это какое-то выражение. Тоесть значение одно.
      case variant1: // variant1 и variant2 - это тоже какое-то выражение. Тоесть тоже ровно одно значение.
        // ...
      break;
      case variant2:
        // ...
      break;
      default:
        // ...
      break;
    }
    
    // Вот в такое
    const value = expression;
    if(value === variant1) {
      //...
    } else if (value === variant2) {
      //...
    } else {
      // ...
    }
    Ответ написан
    Комментировать
  • Как работает свитч-кейс?

    examix
    @examix
    Gutta cavat lapidem
    switch - case

    Принимает аргумент и выполняет строгое сравнение с требуемыми блоками условий, если условие сравнения в блоке истинно выполняется код в данном блоке до ближайшей директивы break. Если ни один блок сравнений не сработал, выполняется блок кода default.
    let etalonCity1 = ['Самара',  'Архангельск'];
    switch (arg) {
    	case etalonCity1[1]:  // if (arg === etalonCity1[0])
    		//to-do
    		break;
    	case etalonCity1[0]:  // if (arg === etalonCity1[1])
    		//to-do
    		break;
    	default:
    		//to-do
    		console.log('Условия сравнения не совпали');
    		break;
    }


    Вариант сравнения используя ' тернарный оператор '
    a === b ? console.log('true') : console.log('false');

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как происходит доступ к эл. массива на уровне ядра?

    Так же как и на уровне приложения -- через трансляцию виртуального адреса в физический.

    Например массив Int* arr = new int[1024*1024*1024] он как храниться?

    Если мы для определённости возьмём linux, то у ядра есть несколько разных способов выделения памяти, в зависимости от того, для чего эта память выделяется. Есть наиболее простой и стандартный kmalloc который выделяет память непрерывную как виртуально так и физически. Обычно этим механизмом нельзя выделить большой непрерывный кусок. Есть vmalloc, который выделяет непрерывную виртуально, но возможно прерывную физически память. Есть get_free_pages который выделяет непрерывные страницы физической памяти, возможно, не отображаемые ни в какие виртуальные адреса. Есть Contiguous Memory Allocator который при старте системы резервирует кусок непрерывной физической памяти и может аллоцировать оттуда куски по запросу.
    Важный момент состоит в том, что аллокации делаемые ядром linux через упомянутые интерфейсы всегда обеспечиваются физической памятью, у памяти ядра нет пейджинга.

    А физическая, для массива то же? Ведь, так будет доступ намного быстрее?

    Почему быстрее? С точки зрения процессора всё равно будет трансляция виртуального адреса в физический, если повезёт -- попадание в TLB, если не повезёт -- ходить по каталогам и таблицам страниц в памяти.

    получается эмулятор каждый адрес вычислять что ли?

    Простой эмулятор -- да, наверно. Умный эмулятор может кешировать эту информацию, например именно это свойство даёт QEMU большую часть его Q.
    Ответ написан
    Комментировать
  • «Семантические» HTML5 элементы — это аттавизм?

    MrDecoy
    @MrDecoy Куратор тега HTML
    Верставший фронтендер
    Не всё так радужно, как задумывалось, но смысл в их использовании есть.
    От каких то тэгов больше - от каких то меньше.
    Но если что-то можно сделать не прилагая почти никаких усилий и получить от этого пользу, то почему этого делать не стоит?

    https://habr.com/ru/company/htmlacademy/blog/546500/

    Основных поинтов использования семантики 3.
    1) Использование подходящих элементов делает их использование удобнее. Несколько раз встречал когда ссылки делали дивами с js поверх. Нет возможности нажать на них колёсиком чтобы открылаьс в новой вкладке или правой кнопкой с соответствующем ссылке контекстным меню. Это отвратительно неудобно.
    2) это помощь людям с ограниченными возможностями для понимания контекста происходящего на экране. Наглядный пример это ссылки внутри тэга nav. Можно побаловаться со скрин ридером и будет понятно о чём речь.
    Если коротко: ссылки в div будут озвучены как: *ссылка*.
    Ссылки в nav: "ссылка, навигация"
    https://vc.ru/promo/132280-kak-zvuchat-sayty-nezry...
    https://www.youtube.com/watch?v=RQiN1Hhrxu0
    3) Помощь поисковым ботам понимать контекст и формировать снипеты в поисковой выдаче. Пример есть в статье выше.
    https://siteclinic.ru/blog/technical-aspects/html5...

    с какой-либо из «сторон дела»: пользователя, верстки, программирования, поисковых систем?

    1) Про пользователей выше
    2) Про вёрстку - удобнее читать
    3) Про программирование - использование верных тэгов соответствующим образом влияет на работу с этими элементами в JS либо избавляет от необходимости в JS в принципе.
    4) Про поисковые системы выше.
    Ответ написан
    11 комментариев
  • Выбрать Rust или C++?

    vabka
    @vabka Куратор тега Rust
    Rust достаточно стабильный и популярный, чтобы начать с ним работать.
    По геймдеву - в принципе все нужные низкоуровневые библиотеки для работы с графикой там уже есть. Да и движки свои понемногу да появляются.
    Пример из тех, что сейчас активно развиваются - bevy, на нём уже можно делать не очень сложные игры, да и просто как образец он тоже интересный: во главе угла стоит модульность и ECS.
    Ответ написан
    Комментировать
  • Выбрать Rust или C++?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Rust создавался при разработке браузера Mozilla чтобы закрыть конкретные дефекты С++. Системообразующие дефекты такие как NPE, Buffer Overflow e.t.c. Сегодня доля Rust файлов в сорцах мозиллы составляет 40% от общего количества файлов. Это - достаточно чтобы считать успехом мероприятие.

    Нужно ли брать Rust при разработке игровых движков? ХЗ. Я-бы сказал что Rust важнее для тех приложений где важна инфо-безопасность. Я не спец в Rust, но я чисто из любопытва смотрел например как в Rust открыть файл (мне надо было парсить логи). Так вот открыв файл ты не просто не получаешь файловую переменную. Ты получаешь монаду Either (там кажется она называется Result<>) и вот пока ты ее паттерн матчингом не проверишь - никакого файла не получишь. Тоесть протокол работы с файлами строгий настолько, насколько это возможно. Срезать поворот - не получается. Это в сях можно взять fopen(..) и результат проe..ать.

    Вобщем rust по уровню строгости напоминает... ну не знаю Haskell наверное. Хотя в Rust тоже можно творить безпредел - но по крайней мере ты будешь явно декларировать операции как usafe. Это слишком очевидно вобщем-то. Дело техники на code-review просто отделить опасное и принять решение стоит ли так кодить или нет.

    Да и один финский парень обещал что в Rust скоро зайдет как второй язык разработки ядра Linux. Ждем пока.
    Ответ написан
    Комментировать
  • Почему переменную не видно внутри iife?

    @historydev Куратор тега JavaScript
    Редактирую файлы с непонятными расширениями
    Потому-что точки с запятой ставить нужно.
    const url = 'https://jsonplaceholder.typicode.com/todos/1';
    
    (async () => {
    	
    	console.log(url)
    })()
    Ответ написан
    Комментировать
  • Скрипт проверки работает ли служба в Linux, есть ли заготовки?

    ky0
    @ky0 Куратор тега Системное администрирование
    Миллиардер, филантроп, патологический лгун
    Всё это умеет systemd, не нужно велосипедить.
    Ответ написан
    2 комментария
  • Какой пакетный менеджер использовать в WordPress-теме: npm, bower, yarn?

    Bower давно мёртв. NPM точно есть у всех и мало нынче отличается от Yarn. Но при этом многие используют Yarn. Если речь про свой собственный сайт, то возьмите монетку, загадайте для каждой стороны NPM и Yarn, подкиньте её и получите ответ. Если встанет на ребро - берите Bower, Вселенная пытается вам что-то сказать.
    Ответ написан
    4 комментария
  • Для чего нужен Promise.resolve, если он не срабатывает в Promise?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Promise.resolve(value) - это статический метод, возвращающий промис в состоянии fulfilled с указанным значением.
    Эквивалент new Promise((resolve) => resolve(value))
    И можно как-то выполнить промис без аргументов?
    Что значит "выполнить"? Создать можно, сменить статус с pending на fulfilled нельзя, на rejected можно по исключению.
    P.S. Если вас смущает то, что и там и там используется resolve, то в new Promise это всего лишь название переменной для каллбэка в функции. Оно может быть любым.
    new Promise((แก้ไข) => แก้ไข('Решено'));
    //Promise { <state>: "fulfilled", <value>: "Решено" }
    Ответ написан
    Комментировать
  • Почему для счётчиков не используют беззнаковые (unsigned) числа?

    В целом - так исторически сложилось, что в C# используется знаковый тип для индексации массивов.
    В Java вообще, например, нет беззнаковых типов. (думаю, из-за этого и в C# для индексации используется int)
    В новых языках, например в Rust от этого сразу уходят - в нём для индексации массивов используется usize (беззнаковый, размером с указатель на целевой машине)
    Ответ написан
    Комментировать
  • Как создать объект с регистронезависимыми ключами?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Если завернуть объект в Proxy, можно будет изменять ключи при обращениях к объекту:

    const obj = new Proxy({}, {
      get(target, key) {
        const lowerKey = key.toLowerCase();
        return target[Object.hasOwn(target, lowerKey) ? lowerKey : key];
      },
      set(target, key, val) {
        target[key.toLowerCase()] = val;
        return true;
      },
      has(target, key) {
        return key in target || key.toLowerCase() in target;
      },
      defineProperty(target, key, descriptor) {
        return Object.defineProperty(target, key.toLowerCase(), descriptor);
      },
      deleteProperty(target, key) {
        return delete target[key.toLowerCase()];
      },
      getOwnPropertyDescriptor(target, key) {
        return Object.getOwnPropertyDescriptor(target, key.toLowerCase());
      },
    });
    Ответ написан
    1 комментарий