• Для чего класть в стек регистр в начале функции?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Конкретно эта последовательность помимо тупо сохранения rbp создаёт разметку кадров стека. Если все функции в цепочке вызовов делают так, то из любой функции можно проследить всю цепочку вызовов до неё зная только текущее значение rbp без какой бы то ни было дополнительной отладочной информации, потому что по адресу в rbp хранится rbp предыдущей функции, а по адресу rbp + 8 -- адрес возврата в предыдущую функцию. Но делать это, конечно же, необязательно. Например gcc вызванный с флагом -fomit-frame-pointer генерирует код без этой последовательности и использует rbp как ещё один регистр общего назначения.

    Почему тогда все регистры не помещаются в стек?

    Потому что есть документ называемый psABI, который определяет, какие регистры должна сохранять вызываемая функция. Например: x86_64 psABI, раздел 3.2.1 "Registers".
    Ответ написан
    Комментировать
  • Как по ВПН соединить две сети с одинаковым поддиапазоном 192.168.0.1/24?

    ValdikSS
    @ValdikSS
    С OpenVPN это сделать сравнительно легко — у него имеется встроенное средство переназначения сетей.

    --client-nat args
            This pushable client option sets up a stateless one-to-one NAT rule on packet addresses (not ports), and is useful in cases where routes or ifconfig settings pushed to the  client  would
            create an IP numbering conflict.
    
            Examples:
    
                client-nat snat 192.168.0.0/255.255.0.0
                client-nat dnat 10.64.0.0/255.255.0.0
    
            network/netmask  (for  example  192.168.0.0/255.255.0.0) defines the local view of a resource from the client perspective, while alias/netmask (for example 10.64.0.0/255.255.0.0) defines
            the remote view from the server perspective.
    
            Use snat (source NAT) for resources owned by the client and dnat (destination NAT) for remote resources.
    
            Set --verb 6 for debugging info showing the transformation of src/dest addresses in packets.


    А с другими типами — использовать ядерное переназначение через iptables/nftables: DNAT/SNAT, NETMAP.
    Ответ написан
    Комментировать
  • Как правильно снять бекап с контроллера домена?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Вот вам ссылка на рекомендации изготовителя (Microsoft). Там - целый раздел, ссылка ведет на первую статью раздела. Если испытываете трудности с английским, то эти рекомедации переведены (как-то) и на русский язык.
    Резюме:
    1. встроенного средства архивирования Windows для резервного копирования и восстановления AD достаточно, но в плане удобства использования коммерческие решения лучше;
    2. одиночные контроллеры домена, не несущие других функций, восстанавливать нецелесообразно: никакой уникальной информации на них нет, и куда лучше просто добавить в AD новый КД с другим именем;
    3. берегитесь средств снятия и восстанвления образов диска, не поддерживающих AD специально, как средства резервного копирования и восстановления, такие средства безопасно использовать только в системе с ровно одним КД в лесу (по крайней мере - для физических КД, с виртуальными полегче - многие гипервизоры поддерживают идентификатор VM, а AD обучена правильно реагировать на его смену - но можно нарваться); однако при нужде использовать их можно - надо только отдельно копировать и восстанавливать до подключения в сеть Состояние системы.
    Ответ написан
    1 комментарий
  • Какие есть альтернативы Macromedia Flash в сфере геймдев?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Мне кажется что флеш был уникален тем что сочетал в себе сразу 3 вещи. И среду разработки. И язык разработки. И плагин рендеринга векторной графики в браузере.

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

    В прошлом были истинно программистиские решения такие как Java Applets но они не взлетели как раз
    именно по причине того что были ориентированы на программиста а не на дизайнера. Дизайнеру
    и в страшном сне не присниться писать java-код.

    Если смотреть в сторону Unity то там вроде-бы можно сделать многое. Но там чорт-пойми какая лицензия
    и создатели Unity закручивают гайки постоянно. А если ты - "вкатыш" в эту технологию то ты как-бы
    интуитивно ищешь нечто свободное и либеральное к использованию. Желательно - opensource.
    Ответ написан
    2 комментария
  • Как отклонить соединение при 10 и более запросов TTL 58?

    karabanov
    @karabanov
    Системный администратор
    Устанавливаешь ipset (возможно уже установлен) и добавляешь список:
    sudo ipset -N BANNED_IP nethash

    Добавляешь правила:
    # Отбрасываем пакет если TTL 58 и IP есть в списке BANNED_IP
    sudo iptables -A INPUT -m ttl --ttl-eq 58 -m set --match-set BANNED_IP src -j DROP
    
    # Надо как-то добавлять IP отвечающие критериям в список BANNED_IP, для этого
    # Добавляем кастомную цепочку RATE-LIMIT
    sudo iptables -N RATE-LIMIT
    
    # Если TTL 58 передаём пакет на обработку в цепочку RATE-LIMIT
    sudo iptables -A INPUT -m ttl --ttl-eq 58 -j RATE-LIMIT
    
    # Если количество пакетов не превышает 2 в секунду, то пропускаем
    sudo iptables -A RATE-LIMIT -m limit --limit 2/second -j ACCEPT
    
    # Когда лимит превышен добавляем в лог запись об этом событии
    sudo iptables -A RATE-LIMIT -j LOG --log-prefix "LIMIT_EXCEEDED: "
    
    # Затем добавляем IP в список BANNED_IP
    sudo iptables -A RATE-LIMIT -m ttl --ttl-eq 58 -j SET --add-set BANNED_IP src
    
    # Не обязательно, но отбрасываем пакет
    sudo iptables -A RATE-LIMIT -j DROP


    Посмотреть, кто попался sudo ipset list BANNED_IP
    Удалить из списка если надо sudo ipset del BANNED_IP <Забаненый IP>

    Проверить, что работает sudo ping -i 0,1 -t 58 <IP сервера>
    Посмотреть лог tail -F /var/log/syslog | grep LIMIT_EXCEEDED
    Или так dmesg | tail | grep LIMIT_EXCEEDED

    PS
    Себя только не забань. Убедись, что при любом раскладе ты сможешь подключиться к серверу по IPMI или физически присутствуя рядом с ним с монитором и клавиатурой.
    Ответ написан
    1 комментарий
  • Можно-ли скачать видео с YouTube используя DevTools?

    Есть такая «секретная» ссылка: www.youtube.com/get_video_info?video_id=XXXXXX
    Вместо XXXXXX подставьте хэш видео, который в ссылке на ролик, типа youtu.be/BWCiWZtrWXU после слеша.

    По этой (первой) ссылке вернутся URL-encoded данные. Распакуйте их и возьмите параметр url_encoded_fmt_stream_map. Его значение опять надо распаковать как URL-параметры. И из результата вытащить параметр url – это ссылка на единый скачивабельный видеофайл.

    Например, в консоли браузера:
    function getUrlParams(search) {
        let hashes = search.slice(search.indexOf('?') + 1).split('&')
        let params = {}
        hashes.map(hash => {
            let [key, val] = hash.split('=')
            params[key] = decodeURIComponent(val)
        })
    
        return params
    }
    var s = '------'; // здесь длиннющая строка из ответа /get_video_info
    var a = getUrlParams(s);
    var b = getUrlParams(a.url_encoded_fmt_stream_map);
    console.log(b.url); // эту ссылку открываем в браузере - это скачиваемый видеофайл


    Очень надеюсь, что вы покопаетесь в этих данных более подробно, разберётесь, как получать прямые ссылки на скачиваемые файлы во всех форматах и размерах, которые предлагает YouTube, и напишете короткий материал на Хабр по результатам, а также опубликуете gist с рабочим кодом для консоли браузера.
    Ответ написан
    3 комментария
  • Выбор cms для заметок сис.админа?

    @apheyhys
    Попробовал все. Пользуюсь https://boostnote.io/.
    Разметка с помощью Markdown. Дистрибутивы есть под все платформы.
    Основное удобство в очень быстром составлении заметки, вставке скриншота. Очень активная поддержка и полная бесплатность.
    Это просто записная книжка, но если вам нужен доступ с любого компьютера, то выложите базу данных на Dropbox, например.
    Ответ написан
    Комментировать
  • Не могу понять кое-что про замыкание. Можете помочь?

    bobrovskyserg
    @bobrovskyserg
    Более разумно вопрос звучит так: почему последнее значение i?
    Потому что это - переменная замыкания, и она хранится в специальном месте, одном на всех:
    print(acts[0].__closure__)
    print(acts[1].__closure__)
    print(acts[0].__closure__[0].cell_contents)


    Изменить ситуацию можно, например, так:
    def makeActions():
        acts = []
        for i in range(5):
            def f(x, a=i):
                return a ** x
            acts.append(f)
        return acts

    или даже так (сам не знал, что с лямбдами работает)
    acts.append(lambda x, a=i: a ** x)
    Ответ написан
    2 комментария
  • Не могу понять кое-что про замыкание. Можете помочь?

    vittly
    @vittly
    Оптимизатор, любитель удалять лишний код
    В массиве acts лежат по-сути одинаковые лямбды - каждая захватила себе в замыкание переменную i и возвращает ее удвоенное значение. Последним значением i было 4. Соответственно любая из лямбд возвращает 16. На переменную надо смотреть как на область памяти, для переменной i - это одна и таже область, из какой бы лямбды вы к ней не обращались
    Ответ написан
    2 комментария
  • Как переквалифицироваться из эникейщика в программиста?

    zolt85
    @zolt85
    Программист
    Всем привет, это снова я.
    Молодой человек! Вам 23! ВСЕГО! А Вы уже как я, по-старчески, ворчите. Я таких как Вы, вижу ежедневно. Сейчас поясню. В моем городе туго с программистами, хотя город молодежный, продвинутый (в Томске я живу). Мы постоянно ищем людей, сейчас в сторону удаленных разработчиков уже смотрим, потому что на собеседования приходят такие как Вы. Не в плане опыта, а в плане запросов. 23 года, опыта никакого нет, но нужно мне минимум 40 тыр. Родной! За что? Пойми, чтобы понять какой-ты как разработчик, с тобой нужно поработать пару месяцев, а в среднем первый "выхлоп" от тебя будет только через полгода. Поэтому такой мой Вам совет, если хотите развиться как разработчик, стисните зубы, объясните все жене, и идите джуниором. Лучше в Java или C#. Набирайтесь опыта. В нашей сфере работодатели в основном адекватные и видят, когда от Вас уже есть толк. И не стесняются повышать ЗП.

    Удачи Вам!
    Ответ написан
    13 комментариев
  • Нужен web сервер, прозрачно читающий статические файлы в zip-архиве как страницы. Нет такого на примете?

    AlexXYZ
    @AlexXYZ Автор вопроса
    O Keep Clear O
    Кое-что нашлось:

    Вспомнилось, что war-архив - это самый, что ни на есть настоящий zip-архив. Один из легковесных серверов для такого типа файлов - tomcat. Получить war можно так:

    b4f5ec51f9a345e5a9bb26dcf408ca0c.png

    Результат выглядит так (слева список страниц-справок):

    6528b843dc3e43b2987bfda3412ea6b1.png

    Несколько настроек для tomcat:

    93f66412ad814acf8c6e66fc2730af21.png

    Такие наборы файлов у меня возникли после работы с "zim wiki desktop" и "adobe captivate". Спасибо за внимание.
    Ответ написан
    Комментировать
  • Совет в изучении ООП JavaScript?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Как быстро врубиться в ООП в JS:

    Все объекты. У объектов есть конструктор и прототип. Создание нового объекта - копирование прототипа в новый экземпляр объекта и вызов конструктора. В качестве контекста вызова конструктора будет использоваться экземпляр объекта. Конструктор - просто функция которая по умолчанию возвращает контекст вызова, но вы можете там сделать return и вывести любую херню.

    Важно понимать что прототип копируется. То есть если вы создали 10 инстансов одного типа, потом поменяли прототип, например добавив метод), то у первых 10-ти инстансов этих методов не будет, а у новых - будет.

    Наследование - просто объявляете тип со своим прототипом. В силу некоторых особенностей от некоторых типов не так то легко отнаследоваться без кастылей (например от массива).

    Для упрощения работы в ES2015 новый синтаксис для объявления объектов своих типов.

    Принципы ООП такие же как и везде, единственное что для инкапсуляции стоит еще про модули почитать так как в JS (как и в некоторых других языках) нет модификаторов доступа.
    Ответ написан
    Комментировать
  • Как вы управляете своей базой знаний? Какие инструменты для этого используете?

    djQuery
    @djQuery
    "Кодируем помаленьку" ("Сказка о Тройке")))
    Для сохранения информации из веба использую плагин для FF ScarpBook. Древовидная структура, тэги.

    Для списка дел - GoogleCalendar.

    Справочник, который всегда под рукой - Evernote ( + соответствующие плагины для браузера).

    Чтобы отложить для "прочтения на потом" - Instapaper.

    При закачке софта/вареза сопутствующую информация сохраняю в mht и полученный файл затем храню вместе с софтом.
    Ответ написан
    Комментировать
  • Дети и интернет: как контролировать?

    saboteur_kiev
    @saboteur_kiev Куратор тега Компьютерные сети
    software engineer
    > p.p.s. Понимаю, что нужно детей воспитывать, а не давать чаду айфон 6+ по принципу "чем бы дитя не тешилось...". Но как это сделать в мире, где вокруг одни гаджеты и интернет со всеми вытекающими последствиями?

    Вы сами все понимаете. Важно не то, что ребенок увидит, а как он оценивает увиденное. Приоритеты и критичность оценки должны в нем воспитать, причем чем раньше тем лучше - к пубертатному возрасту, в идеале, родитель должен из наставника превращаться в старшего друга, а к 20-22 годам, просто в друга.

    P.S. Неплохо подкидывать ребенку правильные ресурсы, в которых он будет чаще находить полезные и для него и с вашей точки зрения ответы. Но при попытке спрятать или скрыть другие источники, вы промотивируете его именно их и искать.
    Просто поясняйте где информация более качественная и ПОЧЕМУ.
    Ответ написан
    Комментировать
  • Как сохранить html-страницу сайта без искажений?

    @romanmd86
    Opera 12.17 -> .mht (web archive)
    Ответ написан
    Комментировать
  • Есть ли разница в размере трафика rsync при соединении через "rsyncd-rsync" или "rsync-ssh" и почему?

    @inkvizitor68sl
    Linux-сисадмин с 8 летним стажем.
    С точки зрения механизма работы rsync разницы нет. На стороне второго сервера запускается процесс rsync'a, который делает всё тоже самое, что и rsyncd.
    ssh в данном случае обеспечивает шифрование всего трафика, авторизацию и прочие плюшки. В том числе и сжатие трафика, если оно включено (ну и если трафик вообще реально пожать).
    Так что трафика будет меньше, нагрузка на проц будет выше. С точки зрения возможностей - всё одинаково.

    Rsyncd удобен тогда, когда не хочется авторизовывать машины по ssh (которые бэкапы сливают, например). Но тогда файлы по дороге украсть могут -=)
    Ответ написан
    4 комментария
  • Какие язык, компилятор, среда подойдут для разработки небольшого приложения под windows?

    @artnazarov
    Lazarus (www.lazarus.freepascal.org/) + Synapse, lNet и т.п. wiki.freepascal.org/Networking/ru

    Плюсы:
    Визуальная RAD IDE,
    компактный бинарник (выставляем необходимые оптимизации. )
    кроссплатформенность,
    очень быстро компилируется
    Ответ написан
    Комментировать
  • Какие язык, компилятор, среда подойдут для разработки небольшого приложения под windows?

    valemak
    @valemak
    Фрилансер
    В сторону AutoIt посмотрите.

    Лёгкий basic-подобный ЯП, как раз для написания небольших утилит под Windows.
    Ответ написан
    Комментировать
  • Что подарить гику, увлекающемуся электроникой?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Осциллограф
    Ответ написан
    Комментировать