• Что происходит когда сетевая карта получает последний кусок HTML?

    @pfg21
    ex-турист
    Аппаратный модуль сетевой карты принимает пакет во внтуренний буфер и сигнализирует програмному драйверу что есть новый пакет данных.
    Драйвер считает CRC пакета и сравнивает его с числом в MAC-заголовке пакета, если не правильно пакет запрашивается заново.
    Также сравнивается МАС-адрес получателя из заголовков с МАС-адресом данного сетевого порта, при не совпадении пакет удаляется (это можно отключить).
    Далее у пакета "срезается" МАС-заголовок и драйверам TCP/IP сети сигнализируется, что есть новый пакет.
    драйвер сети пропускает пакет через "жернова" фаервола - допустим все ок.
    по номеру порта получателя в IP-заголовке выбирается куда данные дальше передавать.
    заголовки IP-пакета срезаются и данные заливаются в кеш TCP-сокета.
    Оттуда его забирает браузер и дальше издевается.

    Объяснение дано корявым языком на немытых пальцах, прошу сильно не плюваться :)
    более умно смотреть к примеру здесь
    Ответ написан
    Комментировать
  • Какую литературу почитать по проектированию?

    Очень основательная книжка
    1000104253.jpg
    Ответ написан
    Комментировать
  • Какую литературу почитать по проектированию?

    artemgapchenko
    @artemgapchenko
    "Agile Software Development: Principles, Patterns, and Practices" Роберта Мартина. И "Чистый Код" за его же авторством.
    Ответ написан
    Комментировать
  • Как сделать дешёвые прокси?

    TrueBers
    @TrueBers
    Гуглю за еду
    Что значит, в одни руки?
    Вам этот адрес лично никто не отдаёт, этим же адресом может пользоваться ещё несколько тысяч человек одновременно с вами.

    И это совсем не дёшево. Можно ВПСку купить за 200р в месяц, она потянет, пусть 100 клиентов, по мегабиту каждому. Каждый клиент платит 100 рублей в месяц, получаем 100*100=10 000 рублей при затратах в 200р (очень грубо).

    Другое дело, что вам нужно держать ваши адреса более-менее белыми, чтобы не попадать в банлисты за рассылку спама, и т. д. В этом основная трудность, а поднять прокси — дело двух минут.
    Ответ написан
    3 комментария
  • Есть ли примеры пополярных систем грамотных по архитектуре на php?

    Stalker_RED
    @Stalker_RED
    Грамотная архитектура, это не то-же самое, что затолкать в проект все модные аббревиатуры не глядя на то, нужны ли они.
    В symfony еще с первых версий есть модульность, и, местами di. Они обсуждают SOLID на конференциях и постепенно движутся в этом направлении, хотя еще не полностью "пришли".
    А хайп по микросервисам разве еще не поутих? На практике, далеко не всё подряд стоит выносить в сервисы.

    В целом да, стоит покопаться внутри symfony или laravel, потому что они одни из лучших опенсорцных фреймворков. Но не стоит ожидать, что они будут использовать все подряд баззворды раскрученные за последние надцать лет.
    Ответ написан
    Комментировать
  • Как работают библиотеки и как работает компилятор?

    jamakasi666
    @jamakasi666
    Просто IT'шник.
    Если в кратце:
    Динамическая библиотека - все зависимости(библиотеки - dll\so\dylib) не входят в состав библиотеки\исполняемого файла. Т.е. для работы будет необходимо чтобы они были в системе или лежали рядом. Плюс в том что библиотеки можно обновлять(как правило, часто это невозможно), скомпилированная библиотека\исполняемый файл имеет малый размер.
    Статическая библиотека - все зависимости (библиотеки - lib\a), во время компиляции "вклеиваются" в твою библиотеку\исполняемый файл. Плюс в том что все зависимости(библиотеки) внедрены внутрь и какбы конечному пользователю нужно меньше телодвижений что бы все заработало. Размер библиотеки\исполняемого файла становится огромным.
    Исполняемый файл - это уже бинарная (двоичная) программа которую сможет выполнить твой CPU.
    Транслятор - сильно грубо говоря это переводчик. Переводит 1 язык в другой. К примеру он переводит человекочитаемый исходный код на "С++" в "С" или асемблер или машинный код.
    Линковщик(он же компановщик) - опять же сильно грубо это утилита которая смотрит весь исходный код и связи с библиотеками после составляет так называемую таблицу символов в которой обозначает где находится и как называется функция из другой библиотеки. Так же он обозначает и экспортируемые функции которые смогут увидеть другие библиотеки.
    Компилятор - в кратце это савокупность утилит запускаемых в определенном порядке чтобы из исходного кода получить машинный код который сможет выполниться на CPU. Этапов в нем много в т.ч. в него входит линковка и трансляция.

    Если хочется разобраться в этом нормально и понимать все абсолютно верно а не так как описал я то смотри рекомендации которые выше уже дали по "книге дракона". Я тебе описал все это сильно грубо чтобы просто представлять что это.
    PS внес поправочку копипасты =) Даниил Демидко
    Ответ написан
    2 комментария
  • Какой выбрать современный хороший учебник по C++?

    saboteur_kiev
    @saboteur_kiev Куратор тега Книги
    software engineer
    "Содержит огромное количество воды и лирических отступлений, а это лишнее время."

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

    Если вам нужен сухой современный материал - читайте официальную документацию по функциям, типа msdn.
    Ответ написан
    1 комментарий
  • Как пробивать НАТ?

    jamakasi666
    @jamakasi666
    Просто IT'шник.
    Универсального способа нет. Гуглить по фразам UPnP, stun, turn.
    Для универсальности надо делать реализации всех способов разом, со стороны клиента перебирать каждый способ до достижения результата, если не один способ не помог то подключаться через промежуточный сервер.
    Ответ написан
    Комментировать
  • Как пробивать НАТ?

    15432
    @15432
    Системный программист ^_^
    TCP / UDP hole punching, статей куча
    Ответ написан
    Комментировать
  • Разработка сайта с использованием git. Как работать правильно?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Чтобы решить проблемы, которые у вас существуют, нужно сделать 3 вещи, но планомерно и плавно.
    1. Обучите программистов такой вещи, как git. Подождите с недельку. Затем просто прогоните их по циклу - откати эти изменения. Верните изменения. Ну раз 5, с дедлайном вчера. Все, кто не будет пользоваться git, будут мучаться часами и днями. Напомните им, как легко это делается с помощью git. Повторите испытание через некоторое время. Поставьте ультиматум: git или идите искать новую работу. Кстати, у каждого человека должен быть свой отдельный аккаунт.
    2. Держите репозитарий для проекта целиком. Сделайте отдельные папки для исходников верстки, для собранной верстки и самого сайта. Верстальщики работают со своими папками. Собирают верстку и коммятят собранную верстку в отдельную папку. Программисты через историю коммитов смогут отследить изменения и внести их назад в разработанные компоненты.
    3. Реализуйте автоматизированное развертывание проекта и запретите редактирование файлов через FTP/минуя git.

    Ну а в целом ваша проблема - низкая квалификация кадров. Решается просмотром ютуба и обучением разработчиков. Если кто-то не хочет учиться, немного снижается ставка, а деньги отдаются тем, кто учится. Даже 500 рублей будут отличным мотиватором.
    Ответ написан
    9 комментариев
  • Удаленная работа фултайм для джуниора, правда или вымысел?

    webirus
    @webirus
    Тыжверстальщик! Наверстай мне упущенное...
    Удаленная работа для джуна - не вымысел, вполне себе реальность.
    Но учтите сразу, что у вас не будет (или будет небольшой) профессионального роста.
    Работая в команде, вы моглши бы решать сложные задачи быстро.
    Удаленно, вы будете тратить время, больше работать.
    Это обычная практика. Исключение если вы вундеркинд.
    Поэтому серьезные работодатели не сильно доверяют джуниорам на удаленке.
    Да и просто совет - работайте в офисе, набирайтесь ума.
    Если компания не дает вам профессионального роста, смените на более топовую.
    Ответ написан
    5 комментариев
  • Как определять ответственность функций?

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

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

    Рецепт прост: пробовать, делать, строить, ломать, перестраивать, ошибаться, снова перестраивать. Тупо взять и прочитать, как кто-то там сделал и у него получилось, не прокатит. У него звёзды сошлись, а у вас, у меня, или у неё не сойдутся точно в такой же последовательности. Используйте разные языки программирования, разные парадигмы, фреймворки. Это даёт прекрасное понимание о существовании различных архитектурных решений, которое не даст ни однин теоретический паттерн.

    Я не хочу сказать, что все эти гофы и солиды не имеют смысла, они созданы для того, чтобы для начала просто с ними ознакомиться, отложить в подсознание и... благополучно забыть! Но потом, когда вдруг что-то писал и внезапно осенило: Да это же паттерн медиатор/обсервер/репозиторий/anyPattern! Вот тут и пригодится та самая книга трёх танкистов и собаки, которая просто направит в нужное русло, объяснит остальное, что не успел понять сам, и т. п.

    Всё это моё понимание, работает для меня, может не работать для кого-то другого, кто, например, запоминает 95% прочитанной книги и может уже сразу же адекватно оценить где какой подход использовать, где нужно будет масштабироваться и т.д.

    Но, я пока что таких людей не видел...
    Ответ написан
    3 комментария
  • Как определять ответственность функций?

    Stalker_RED
    @Stalker_RED
    В том-то и дело, что есть разные философии/парадигмы/принципы/паттерны/антипаттерны и т.д., а универсальной кнопки "сделать зашибись" пока нет.
    И выбор конкретного подхода зависит от предметной области, от стандартов индустрии и личных предпочтений главного архитектора, или как его там.

    Если уж у вас в тегах стоит ООП, то стоит упомянуть про SOLID. Эти принципы специально придуманы для больших и сложных проектов с долгим жизненным циклом.

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

    TrueBers
    @TrueBers
    Гуглю за еду
    Хватит плодить вопросы. Ответ на них не поместится на десяток страниц. Почитай лучше про адресацию памяти, что такое абсолютный адрес, относительный, что такое базовый адрес процесса, что такое рандомизация базового адреса. Просто так взять и прочитать память не получится.

    1. Этот адрес работает только для текущего процесса.
    2. Во-вторых, он будет другим при каждом запуске и выделении памяти из кучи.
    3. Он так же может меняться из-за ASLR

    Чтобы докопаться до реальной структуры данных с информацией о персонаже, нужно найти то место в коде, где эта структура выделяется на куче. Т. е. там должно быть что-то типа
    CharInfo info = new CharInfo();
    (_thiscall) CharInfo::CharInfo(info)

    Вот этот кусок кода тебе нужно найти, только так ты сможешь определить статическое место, откуда потом уже будешь плясать. Для поиска кода нужно знать хотя бы основы Ассемблера. Поможет в этом декомпилятор IDA Pro с плагином Hex-Rays.
    Но и этих мест может быть не одно, а десятки и сотни в случае с шаблонными классами и функциями. Тут уже нужен отладчик, чтобы поставить точки останова на чтение или запись памяти, и от них уже отталкиваться.

    Обычным чтением из памяти ты ничего не добьёшься, чтобы пойти по цепочке вызовов с необходимым адресом, тебе нужно самому внедрять свой код в клиент игры, либо пользоваться фреймворками для динамической инструментации, например, DynamoRIO, Intel PIN, Frida.

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

    Начать можно, кстати, с курса Рикардо Нарвахи "Введение в крекинг с нуля, используя OllyDbg". Это огромный курс статей, в которых разбирается всё, что нужно для понимания основ. Там 50 с чем-то глав различной сложности, погугли. Есть ещё на ютубе целый плейлист с видео-разборами этого курса.
    Ответ написан
    Комментировать
  • Как найти ошибку заголовков header?

    DevMan
    @DevMan
    блжад, научитесь уже в буферизацию вывода или хотя бы гуглить.
    если тупо в гугл вставить "Cannot modify header information - headers already sent" то получишь 100500 результатов что это за сообщение и как с ним бороться.
    но нахера? проще же сразу на тостер писать.
    Ответ написан
    4 комментария
  • Бесплатная мини crm для работы с лендингами?

    webinar
    @webinar Куратор тега PHP
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Подобное делается на yii2 или другом php framework за 2 часа. Можно и на чистом php написать.
    Ответ написан
    8 комментариев