Задать вопрос
  • Какую литературу почитать о принципах работы пк, прежде чем изучать C, C++, java?

    GeneMoss
    @GeneMoss
    void
    https://habrahabr.ru/post/259505/ — вот этой книги должно хватить с головой.

    Хотя тему байтов, битов, кодировок и битовых операций любой вузовский учебник раскроет на достаточном уровне, чтобы изучать С, С++.
    Ответ написан
    2 комментария
  • Как правильно управлять парком серверов Unix?

    igortiunov
    @igortiunov
    Приветствую.
    Прежде всего, не стоит представлять себе решение задачи, как "большую кнопку", т.к. наши представления об управлении инфраструкурой несколько извращены опытом работы с продуктами MS. Интерфейс скрывает от нас стек ПО используемого для достижения цели. Например, WSUS. Под его капотом находится набор служб, каждая из которых играет определенную роль - bits для загрузки на сервер и доставки пакетов на клиента, веб-сервер для управляющих команд, база данных для хранения состояния клиентов и исправлений, .net приложение, обьединяющее все это. Для парка nix машин вам предстоит построить подобную архитектуру самому, выбирая каждый раз инструмент, который будет играть ту или иную роль.
    На втором шаге вам нужно посмотреть на задачу. Если у вас десяток инфраструктурных серверов, то Ansible действительно неплохой выбор. Но только не "скрипт". "Скрипт" - это язык, который говорит как достичь результата. Но инструменты управления конфигурацией избавляют вас от этого, с помощью декларативного языка вы описываете сам конечный результат(это ключевой момент) и не задумывайтесь о том, какой дистрибутив (читай менеджер пакетов, расположение конфигурационного файла) установлен на управляемой системе.
    Если вам нужно дать доступ большому количеству пользователей к большому количеству машин, то на первом шаге вам нужно выбрать два инструмента:
    1. управление конфигурацией.
    2. управление sudo.
    Первый инструмент с натяжкой может предоставить вам возможность решить пункт 2, т.к. в этом втором пункте вам нужно управлять теми самыми политиками: группе пользователей дать доступ на группу машин и разрешить выполнять группу команд. Здесь в игру вступает Identity Manager и этот вопрос для меня по крайней мере, открыт. Текущие тенденции ведут к развертыванию двух каталогов (MS AD и каталог для парка NIX), но не берусь сказать насколько это правильно. Обойтись без второго каталога можно и, если отбросить шелуху, то ключевой проблемой, в таком случае, является сопоставление идентификаторов безопасности пользователей в MS AD и в nix системах (просто когда один домен, сложнее когда лес, совсем не просто в случае созданных вручную доверительных отношений). Раньше этот вопрос решал winbind с набором библиотек, реализующих тот или иной алгоритм сопоставления, теперь это SSSD, реализующий два алгоритма. Опять же вопрос с выполнением привилегированных команд в такой конфигурации не решается. RedHat предлагает скомпанованные в единый продукт инструменты, которые, якобы эти задачи решают. Поддержкак от этого самого редахата стоит бешеных для нас денег, но вы посмотрите из чего состоят такие решения как Sattelit и IdM, это открытые продукты (FreeIPA, candlepin, pulp, katello, puppet и, наконец, foreman.) которые, возможно вам и нужны.
    Ответ написан
    8 комментариев
  • Сможете объяснить решение олимпиадной задачи?

    Задача сводится к выяснению того, сколькими кубиками (не способами, а именно кубиками) может быть задана исходная сумма (нижних граней).
    Например, 1 может быть задано только 1-м кубиком, ответ - 1
    2 может быть задано как 1-м, так и 2-мя кубиками, ответ - 2
    3 может быть задано 1-м, 2-мя или 3-мя кубиками, ответ - 3.
    Рассмотрим 4. Может быть задано от 1-го до 4-х кубиками. Т.е. ответ - 4. Рассмотрим случай 2-х кубиков. Это могут быть комбинации 2 + 2 или 1 + 3, но оба они дадут одну и ту же сумму верхних граней: 6 + 6 - (2+2) или 6 + 6 - (1+3), что явно одно и то же.
    У разных же количеств кубиков сумма разная, так как разное кол-во 6-к (самых больших чисел).

    Итак, надо выяснить, сколькими кубиками можно задать сумму s. Понятно, что если s ≤ 6, то любым кол-вом от 1 до s. Но если s > 6, то одним кубиком уже не задать. Если s > 12 (6 * 2), то не задать уже и двумя.
    Т.е. если s > 6, надо вычесть 1, если s > 12, надо вычесть 2, если s > 18, то вычесть 3.
    Или, иначе говоря, если s > 6k, надо вычесть k. k можно посчитать как (s - 1) / 6 (целочисленное деление). Как только s становится больше 6k, то есть становится 6k + 1, получаем (6k + 1 - 1) / 6 = k. Если же s = 6k, то (6k - 1) / 6 = k - 1, что нам и надо.
    Т.о. результат: s - (s - 1) / 6, что эквивалентно вашей формуле, так как
    (s + 5) / 6 = (s - 1) / 6 - 1
    (s + 5) / 6 - 1 = (s - 1) / 6
    Ответ написан
    5 комментариев
  • Как обезопасит системного администратора от ответственности за пиратское ПО?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Для начала, если с проверкой придут на предприятие, то проверять будут факт покупки лицензий по бухгалтерии и соответствие установленного ПО и имеющихся лицензий. До определённой суммы дело идёт как административное и отвечать может организация. Выше этой суммы (250000р., если не ошибаюсь) дело переквалифицируется в уголовное, где подсудимым будет уже конкретный человек или группа лиц. Для того, чтобы подвести под статью достаточно, чтобы нашлись несколько свидетелей, показавших, что именно вы ставили на данный компьютер нелицензионное ПО. Какие либо письменные предупреждения от вас руководителю позволят следствию переквалифицировать дело в "совершённое по предварительному сговору группой лиц", что добавляет тяжести обвинению.
    Предприятие в любом случае будет оштрафовано на стоимость лицензий незаконно установленного ПО, кроме того на время следствия могут быть изъяты системные блоки или жёсткие диски.
    Что касается TrueCrypt'а и прочих шифровальщиков, то если не хотите начинать рабочий день с ввода паролей на всех компьютерах, значит эти пароли будут знать и сотрудники. А поскольку они пойдут по делу как свидетели, а не обвиняемые, то их отказ предоставить пароли будет трактоваться как "ст. 294 УК РФ. Воспрепятствование осуществлению правосудия и производству предварительного расследования".
    Ответ написан
  • Полиморфизм в C++ и как правильно его реализовать с использованием указателя на void?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Не надо корячить из C++ C.
    Компилятор не настолько тупой, чтобы не заменить индексный оператор на работу с указателем. А вот код вы превратите в помои.

    void* в С++ - такая же дрянь. Для этого существуют интерфейсы. Дайте компилятору и оптимизатору поработать.
    Ответ написан
    9 комментариев
  • Что мой провайдер знает обо мне?

    @nirvimel
    Когда я захожу на определенный сайт, провайдер видит URL?

    Да.

    А если я захожу на https?

    Известен IP сервера и имя домена. Больше ничего.

    Откуда провайдер узнает, что я скачиваю определенный фильм/программу через torrent?

    Торрент-клиент общается с трекером по HTTP. Все видно насквозь: конкретные торренты + вся статистика (когда начато скачивание, когда закончено, когда пошла раздача, сколько роздано). Возможно подключение к трекеру и по HTTPS, но rutracker.org такой возможности не дает (мне тоже интересно почему).

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

    Провайдер не хранит у себя весь трафик. Это технически невозможно. Но трафик обрабатывается, классифицируется и ведутся логи о том какой тип трафика когда входил/уходил от абонента.

    Или он отслеживает факт скачивания .torrent файла, а затем делает вывод по идущим пакетам, что это скачивается?

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

    Когда я пользуюсь VPN, что видит провайдер?

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

    Что я зашел на определенный IP и с него идут зашифрованные потоки?

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

    OpenVPN будет работать через VPN IP и в браузере и при обновлении Windows, драйверов, ...?

    В зависимости от настройки. Но в общем случае, да, так.

    Читал, что в Windows есть такая особенность, что если провайдер как-то урезает пакет, то VPN отключается и сайту показывается мой реальный IP?

    Это не связанно с провайдером. Это особенность Windows. Когда VPN отваливается, весь трафик вылетает наружу в открытом виде. Опять же зависит от настроек. Но это еще одна цена "удобства" при использовании Windows.

    При этом провайдер видит на каком я сайте, что скачиваю?

    VPN отвалился - хацкер спалился.

    Таких фишек много?

    Смотря о чем речь. В сфере сетевой безопасности и анонимности различных нюансов вообще много.

    Как от них защитится?

    Учить мат.часть. Разбираться в сетевых протоколах и в устройстве ОС.

    Если пользуюсь каким-то расширением типа ZenMate, dotvpn, провайдер аналогично как и с VPN видит что что-то отправляется и приходит на определенный VPN IP?

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

    При использовании Tor, кто-то пользуется моим IP, пока я пользуюсь чужим?

    Нет. Если у вас не сконфигурирован Exit Node.

    Что при этом видит провайдер, что я получаю потоки данных с определенных IP и каждый раз разный IP?

    У них есть система точного обнаружения использования Tor. Это факт остается в логах с теми же последствиями, что и для VPN.

    Провайдер видит URL?

    Через Tor и VPN - нет.

    Каким образом можно полностью управлять сетью на ПК, видеть что, куда и когда отправляется или приходит на ПК (Windows, Linux)?

    Видеть все: https://www.google.com/search?q=Wireshark
    Блокировать все лишнее: https://www.google.com/search?q=Comodo+Firewall
    Ответ написан
    22 комментария
  • На какой ОС поднять файловый сервер?

    Olej
    @Olej
    инженер, программист, преподаватель
    Как будет разумнее сделать? Поднять на Windows ftp, чтобы вся структура была на одной ОС?

    У англичан есть поговорка: "Дайте собаке дурную кличку, после чего можете её повесить."

    Можете поднять сервера на Windows ... после чего их повесить. ;-)
    Ответ написан
    Комментировать
  • Как и в чем ведете актуальный список серверов компании?

    @DimaJF
    До тех пор, пока не будет процедуры, за неисполнеие которой админов будут... подвергать всяким неприятным процедурам, ничего не поможет. Какая разница, что не заполнять, таблицу или git-репозиторий.
    Ответ написан
    2 комментария
  • Ставить ли фигурные скобочки?

    aminought
    @aminought
    Правилом хорошего тона считается постановка фигурных скобок в любом случае. Для вдохновения можете прочитать вот эту статью: Исключительная красота исходного кода Doom 3
    Ответ написан
    2 комментария
  • Попросили проверить код, на что смотреть нужно?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Смотря зачем)). Я когда делаю Code Review критерии следующие:

    * Безопасность:
    - Каждый аргумент метода простого типа должен проверяться на тип в случае его проксирования и на граничные значения в случае обработки. Чуть что не так - бросается исключение. Если метод с кучкой аргументов на 80% состоит из поверки из аргументов - это вполне норм))
    - Никаких trigger_error, только исключения.
    - Исключения ДОЛЖНЫ быть человеко-понятны, всякие "Something went wrong" можно отдавать пользователю, но в лог должно попасть исключение со стектрейсом и человеко-понятным описанием, что же там пошло не так.
    - Каждый аргумент (объект) метода должен быть с тайпхинтингом на этот его класс, или интерфейс.
    - За eval как правило шлю на **й.
    - @ допускается только в безвыходных ситуациях, например проверка json_last_error.
    - Перед работой с БД - обязательная проверка данных.
    - Никаких == и !=. Со swtich - единственное исключение, по ситуации.
    - Если метод возвращает не только bool, а еще что-то - жесткая проверка с ===, или !== обязательна.
    - Никаких условий с присваиваниями внутри. while($row = ...) - тоже идет лесом.
    - Магические геттеры/сеттеры разрешаются только в безвыходных ситуациях, в остальном - запрещены.
    - Конкатенации в sql - только в безвыходных ситуациях.
    - Параметры в sql - ТОЛЬКО через плейсхолдеры.
    - Никаких глобальных переменных.
    - Даты в виде строки разрешаются только в шаблонах и в БД, в пхп коде сразу преобразуется в \DateTimeImmutable (в безвыходных ситуациях разрешено \DateTime)
    - Конечно зависит от проекта, но как приавло должно быть всего две точки входа: index.php для web и console(или как-то по другому назваться) - для консоли.

    * Кодстайл PSR-2 + PSR-5 как минимум, + еще куча более жестких требований (для начала все то что в PSR помечено как SHOULD - становится MUST)
    - В PhpStorm ни одна строчка не должна подсвечиваться (исключением является typo ошибки, например словарик не знает какой-то из аббревиатур, принятых в вашем проекте). При этом разрешается использовать /** @noinspection *** */ для безвыходных ситуаций.
    - Если кто-то говорит, что пишет в другом редакторе и у него не подсвечивается, на эти отговорки кладется ВОТ ТАКЕЕЕНЫЙ мужской половой **й и отправляется на доработку)).

    * Организация кода:
    - Никаких глобальных функций.
    - Классы без неймспейса разрешаются только в исключительно безвыходных ситуациях.

    * Тестируемость (в смысле простота тестирования) кода должна быть высокая.
    - Покрытие кода обязательно для всех возможных кейсов использования каждого публичного метода с моками зависимостей.

    * Принципы MVC:
    - Никаких обработок пользовательского ввода в моделях, от слова совсем.
    - Никаких ***ть запросов в БД из шаблонов.
    - Никаких верстки/js/css/sql-ин в контроллерах.
    - В моделях НИКАКОЙ МАГИИ, только приватные свойства + геттеры с сеттерами.
    - В моделях разрешено использовать метод save(при наличии такого разумеется) только в исключительных ситуациях. Во всех остальных - либо insert, либо update.

    * Принципы SOLD:
    - Никаких божественных объектов умеющих во все.
    - Если метод для внутреннего пользования - private, никаких public.
    - Статические методы разрешаются только в случае безвыходности.

    * Принцип DRY разрешено нарушать в случаях:
    - Явного разделения обязанностей
    - В тестах (каждый тест должен быть независимым, на сколько это возможно)

    * Работа с БД:
    - Запрос в цикле должен быть РЕАЛЬНО обоснован.
    - За ORDER BY RAND() - шлю на***й.
    - Поиск не по ключам (конечно если таблица НЕ на 5 строк) запрещен.
    - Поиск без LIMIT (опять же если таблица НЕ на 5 строк) запрещен.
    - SELECT * - запрещен.
    - Денормализация БД должна быть обоснована.
    - MyISAM не используется (так уж)) )
    - Множественные операции обязательно в транзакции, с откатом если чо пошло не так.
    - БД не должна содержать бизнес логики, только данные в целостном виде.
    - Не должно быть нецелесообразного дерганья БД там, где без этого можно обойтись.

    * Кэш должен очищаться по двум условиям (не по одному из, а именно по двум):
    - Время.
    - Протухание по бизнес логике.
    Разрешается по только времени в безвыходных ситуациях, но тогда время - короткий период.
    - При расчете ключей кэша должна использоваться переменная из конфигурации приложения (на случай обновлений кэш сбрасывается кодом, а не флашем кэш-сервера). В случае использования множества серверов - это очень удобный и гибкий инструмент при диплое.

    * О людях:
    - "Я привык писать так и буду дальше" - не вопрос, ревью пройдешь только когда поменяешь свое мнение.
    - "Я пишу в vim-е и мне так удобно" - здорово, код консолью я тоже в нем пишу)) но есть требования к коду, если в них не сможешь - не пройдешь ревью.
    - "Я скопировал этот страшный метод и поменял 2 строчки" - это конечно замечательно, но по блейму автор всего этого метода ты, так что давай без говняшек, хорошо?
    - "Оно же работает!" - вот эта фраза переводится примерно так: "да, я понимаю, что пишу полную хрень, но не могу писать нормально потому, что руки из жо", я правильно тебя понял?))
    - "У меня все работает!" - рад за тебя, а как на счет продакшна?
    - "Там все просто" - не используй слово "просто", от слова "совсем". Вот тебе кусок кода (первого попавшегося с сложной бизнес логикой), где там ошибка (не важно есть она, или нет)? Ты смотришь его уже 2 минуты, в чем проблема, там же все "просто"))

    * Всякое:
    ActiveRecord (это я вам как в прошлом фанат Yii говорю) - полное говно, примите за исходную. По факту у вас бесконтрольно по проекту гуляют модельки с подключением к БД. Не раз натыкался на то, что в тех же шаблонах вызывают save, или update (за такое надо сжигать).
    То, что используется Laravel - это печально((. Что бы выполнить требования приведенные выше, приходится "воевать" с фреймворком.

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

    UPD

    Формализировал данные критерии по ссылочке: https://github.com/index0h/php-conventions
    Ответ написан
    55 комментариев
  • Каково реальное программирование на PHP и 1С?

    coderisimo
    @coderisimo
    Начинайте делать реальные проекты. Без амбиций. Просто начните с самого простого. По мере реализации поневоле будете двигаться вперед, получите опыт. Мне кажется один реальный проект стоит ста решенных задачек )
    Ответ написан
    Комментировать
  • Есть ли IDE способная создавать консольные приложения Win32 из по Linux(кроме Visual Studio и Eclipse)?

    gudvinr
    @gudvinr
    Code::Blocks, QtCreator
    В обеих возможно настроить кросс-компиляцию посредством, например, mingw.
    Ответ написан
    1 комментарий
  • Стоит ли создавать интернет-магазин для портфолио на чистом PHP?

    opium
    @opium
    Просто люблю качественно работать
    Всегда есть смысл что то делать для портфолио.
    Ответ написан
    Комментировать
  • Как выполнить скрипт PHP не перезагружая страницу?

    frost18
    @frost18
    Программист PHP
    Вы наверное немного не понимаете технологию. Сервер принимает запрос, обрабатывает его и отдает ответ. В вашем случаи я бы написал js код, который отправляет AJAX запрос с периодичностью скажем раз в 10 секунд, принимает ответ и выводит его на экран.
    Ответ написан
    3 комментария
  • PHP7 и foreach. Коварное изменение?

    @nelson
    Читайте официальную документацию по переезду, там всё написано.
    php.net/manual/en/migration70.incompatible.php

    А именно, по вашему вопросу про foreach:
    foreach by-value operates on a copy of the array
    When used in the default by-value mode, foreach will now operate on a copy of the array being iterated rather than the array itself. This means that changes to the array made during iteration will not affect the values that are iterated.

    Перевод: в режиме foreach($arr as $v) - движок сначала сделает копию массива и будет проводить итерацию по копии. Даже если во время цикла вы сделаете $arr = [], то цикл всё равно пробежит до конца исходного массива, по всем элементам.

    То есть код теперь эквивалентен такому:
    $arr_copy = $arr;
    foreach($arr_copy as $k=>$v) {
    ...
    }
    за тем исключением, что к переменной $arr_copy вы не имеете прямого доступа.

    Это не значит, что переменная $arr внутри цикла начинает ссылаться на копию. Поэтому Ваш код будет работать.
    Вот если бы вы работали в цикле не только с текущим элементом, а например, и со следующими относительно текущего, изменяя или удаляя их, тогда поведение программы изменилось бы. Но я никогда не встречал подобного использования цикла foreach.
    Ответ написан
    2 комментария
  • PHP7 и foreach. Коварное изменение?

    romy4
    @romy4
    Exception handler
    Приведённый код будет нормально работать в php7.
    Ответ написан
    3 комментария
  • Есть бинарные дерево поиска в С++?

    @Mercury13
    Программист на «си с крестами» и не только
    Именно так работает стандартный контейнер std::map.
    Ответ написан
    Комментировать
  • Что значит "опыт верстки под битрикс, вордпресс и т. д."?

    Тут 2 варианта:

    1. Заказывают верстку, подразумевают создание шаблона/темы для CMS. По хитрости, по не знанию, по глупости - не важно. Важно не подписаться пилить это по цене только верстки.

    Верстка - это когда макет превращается в набор html/css/js файлов.

    Да, могут быть вариации. Может быть сразу под движок: Smarty, Twig, Jade, или все шаблоны в Handlebars, или сразу чтобы всё под Angular было. Но это всё частные случаи, требующие более высокой квалификации, или находящиеся уже где-то во front-end разработке.

    2. Просят учесть особенности CMS.

    Маленьких нюансов может быть много.

    Вот Битрикс, например, и его Эрмитаж (тыкнул в блок - тут же его отредактировал если по простому). Где-то лишняя обертка элемента, чтобы в режиме редактирования не разваливалось. Везде - z-index меньше 1000, чтобы Эрмитаж не перекрывало.

    Wordpress вообще генерирует огромное количество своих классов. Взять те же навигационные меню. Использовать их = наплевать на все эти ваши БЭМ и прочее.
    И т.д.

    Если я верстал и без проблем натягивал свои макеты на Wordpress - могу ли сказать что у меня есть опыт верстки под Wordpress?

    Могу.
    Так же как могу сказать что есть опыт верстки под Drupal (не знаю натягивали ли какие-то из моих работ на Drupal, но чё бы нет).

    Правда нет гарантии что человек, который будет натягивать мою верстку, не затупит например с
    .nav
        .nav__list
            .nav__item

    Когда ему движок выдаст меню в виде
    .menu
        ul
            li

    Но я не считаю это своей проблемой.
    Когда понадобилось, оказалось нет ничего сложного 1 раз потратить время и написать свой вывод меню в Wordpress, чтобы можно было любую верстку натянуть. Почему так не может сделать тот кто натягивает? Почему в ТЗ об этом не предупредили?

    Уменьшает ли "опыт верстки под CMS" время верстки?
    Если не были оговорены нюансы (те же меню WP) - то нет.
    Может увеличиться время натягивания верстки на движок, но это уже проблемы заказчика, который не озвучил требования заранее.

    Таким образом, хотя в идеале на движок должно быть возможным натянуть любую верстку, действительно некоторые имеют CMS особенности.
    Об этих особенностях следует договариваться заранее. Должно быть конкретное ТЗ на верстку.
    В остальном как правило речь об "опыте верстки под %CMS%" - просто болтовня.
    Ответ написан
    Комментировать