• Как закрыть доступ ко всему кроме одной программы?

    saboteur_kiev
    @saboteur_kiev Куратор тега Системное администрирование
    software engineer
    1. Напишите приказ и подпишите у директора, что на данном компьютере разрешено исключительно просмотр системы видеонаблюдения.
    2. Зарежьте юзеру права по максимуму.
    3. Поменяйте ему шелл на вашу программу, чтобы рабочий стол вообще не запускался
    4. Запретите вызов диспетчера задач этому пользователю через политики.
    Ответ написан
    Комментировать
  • Можно ли возвращать лямбды?

    Nipheris
    @Nipheris Куратор тега C++
    Добавлю пару примеров к сказанному MiiNiPaa:
    Вот такой код:
    auto GetLambda() {
        return []( const int &x ) { return x*x ; } ;
    }

    это синтаксический сахар для такого (все это можно было писать еще и до появления лямбд):
    struct Lambda {
    	int operator()(const int &x) { return x * x; }
    };
    Lambda GetLambda() {
    	return Lambda();
    }

    Отличие в том, что явно класс не создается, но принцип тот же. Возможно, на этом примере вам непонятно, зачем вся эта заморочка с классом. Поэтому рассмотрим другой пример. Этот код
    auto GetLambda(int y) {
    	return [y](const int &x) { return x*y; };
    }

    можно переписать так:
    struct Lambda {
    	int y;
    	Lambda(int y) : y(y) { }
    	int operator()(const int &x) { return x*y; }
    };
    Lambda GetLambda(int y) {
    	return Lambda(y);
    }

    Как видите, захват значения локальной переменной и "сопровождение" им кода лямбды осуществляется с помощью оборачивания в класс. Если еще не знакомились с замыканиями, самое время это сделать.
    Ответ написан
    Комментировать
  • Можно ли возвращать лямбды?

    @MiiNiPaa
    Вот так делать - это нормально?
    Вполне

    И что в таком случае возвращается, указатель на функцию или сама функция?
    Функциональный объект. Лямбда — не функция, она может быть приведена к указателю на функцию в некоторых случаях.

    Если возвращается указатель, то где хранится сама функция, в куче или стеке?
    «Функция» лямбды хранится там же, где и остальной код. На лету ничего не собирается и не компилируется. Лямбда это синтаксический сахар для объявления класса с перегруженым оператором вызова функции.

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

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Настроить в nginx апстрим на адресные пары виртуалок.
    Ответ написан
    1 комментарий
  • Вопрос реструкторизации базы или правильно написанного запроса?

    @ynblpb_spb
    дятел php
    Какая жесть у вас написана.
    Для начала то, что вы селектите подряд таблицы - это внутри mysql является inner join. Вам же нужен left join. Тогда, если записи в таблице нету товар все равно будет выбираться.

    Дальше общий вид запроса будет таким:
    SELECT t.* FROM tovar
    LEFT JOIN svyazka1 as s1 ON (s1.id_from_tovar = t.id)
    LEFT JOIN svyazka2 as s2 ON (s2.id_from_tovar = t.id)
    /* .. еще join при необходимости.. */
    WHERE 
    s1.category_id = 1 /* ID искомой категории внутри связки */
    AND 
    s2.category_id = 2 /* ID искомой категории внутри связки */


    но в этом запросе есть одно НО. Сюда не приджойнить названия категорий, по которым идет поиск (а нужно ли?). Тут два варианта.
    • Отдельными мелкими запросами выбирать названия категорий для товара (не оч хорошо, но некритично, таблицы обычно маленькие со списком категорий).
    • Создать дополнительное поле в таблице с товарами, в которой хранить "кеш" (json/serialized) списка категорий и их ID, чтобы быстро их вывести, не обращаясь в БД. В этом случае дополнительная сложность - при изменении таблицы категорий придется пересобирать кеш в таблице товаров. и вообще следить за его актуальностью
    Ответ написан
    2 комментария
  • Консольный калькулятор на C++. Как лучше сделать?

    @dmitryKovalskiy
    программист средней руки
    Совсем стандартными - нет. Какими либо математическими библиотеками - возможно. А на деле - это неплохая задачка для студента, изучающего программирование.
    Ответ написан
    Комментировать
  • Хобби, проекты для системного администратора?

    POS_troi
    @POS_troi
    СадоМазо Админ, флудер, троль.
    Заведи девушку/жену/любовницу/ребёнка/рыбку/хомяка/кошку/собаку/бабочку/друга/алкоголь :)

    А вообще время когда нечем занятся, очень хорошо подходит для того что-бы вспомнить старое и выучить что-то новое :)
    Ответ написан
    2 комментария
  • На что следует обратить внимание при подборе коммутатора?

    sizaik
    @sizaik
    сисадмин, Витебск
    Обратить внимание нужно на функционал.
    Но если вы ставите задачу таким образом - у вас расплывчатое представление о том, что могут и как используются свитчи. В этом случае для защиты инвестиций я бы посоветовал купить что-нибудь из цисковской серии для малого бизнеса. Функционал у них широкий, а понимание, как его использовать, придет позже.
    Например Cisco SG500X-24 и SG500X-48. Они удовлетворяют всем вашим требованиям, но вылезут за рамки бюджета тысяч на 50.
    Я бы хорошенько подумал вот над чем:
    - реально ли всем пользователям нужен гигабит? и офис-менеджеру? и бухгалтеру? зачем? Не лучше ли взять один свитч Fast Ethernet для большинства пользователей и один Gigabit Ethernet для тех, кому действительно нужен гигабитный канал?
    - так ли вам нужен 10Гбит канал до сервера? Я с трудом представляю приложения для малого бизнеса, где это нужно. Если одного гигабита однозначно мало - есть сетевые карты с несколькими портами и статическая агрегация каналов. Прикиньте, это может выйти значительно дешевле.
    Ответ написан
    1 комментарий
  • Организация базы данных футбольных матчей, с учетом составов и ведением статистики по игрокам. Правильно ли делать на JSON + noSQL?

    sim3x
    @sim3x
    Если ты готов сам отвечать за консистентность данных, вручную считать всю статистику, следить за исправлениями во всех местах, готов писать сотни велосипедов на простейшие задачи и делать другие не очень интересные вещи, то твой выбор noSQL
    Ответ написан
    4 комментария
  • Одинаковые куски кода в разных классах допустимо или нубство?

    @dude2012
    Дело даже не нубстве. А в практической составляющей. Лучше один код исправить, чем два. Но на самом деле это не так страшно, как забыть исправить второй код, если исправил первый.. Поэтому, чем меньше исправлений, тем лучше - меньше головной боли, меньше потенциальных ошибок. Грабли могут сильно ударить по голове, не в этот раз, так в следующий. Лучше иметь хорошие привычки.
    Рекомендую "Рефакторинг" Мартина Фаулера почитать, там много примеров на эту тему.
    Как раз убрать дубли - это рефакторинг.
    Ответ написан
    1 комментарий
  • Возможно ли применить такое условие?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    if (arr[0] == arr[1] == arr[2])

    Результат выполнения операции == в С++ -- это bool, а bool конвертируется в int.
    Запись в скобках эквивалентна (a[0] == a[1]) == a[2] и сравнивает a[2] с результатом сравнения a[0] и a[1] (0 если они не равны, 1 если равны). Т.е. 1 == 1 == 1 -- это истина, поскольку (1 == 1) -- истина, истина сконвертированная в int -- это 1, а 1 == 1 -- это истина.

    почему сравнение значений массива по индексу работает не так, как с обычными переменными

    Точно так же оно работает.

    как мне добиться нужного результата?

    if (arr[0] == arr[1] && arr[1] == arr[2])
    Ответ написан
    Комментировать
  • Как узнать что точка попадает на диагональную линию?

    @gleb-mihalkov
    Если у вас есть две точки линии, то можно сделать так:

    function getLineFn(x1, y1, x2, y2) {
      
      var k = (y2 - y1) / (x2 - x1);
      var b = y1 - k * x1;
    
      return function(x, y) {
        var f = x * k + b;
        var d = Math.abs(y - f);
        return d < 0.00001;
      }
    }
    
    var x1 = 10
    var y1 = 10
    var x2 = 500
    var y2 = 400
    
    var isOnLine = getLineFn(x1, y1, x2, y2);
    var test = isOnLine(100, 200);
    console.log(test);
    Ответ написан
    3 комментария
  • Как сделать выборку из БД делая объединение с разными таблицами в зависимости от значения поля?

    k1lex
    @k1lex
    Программист торг. сети. C# (WPF, WinForms), T-SQL
    Я думаю суть будет понятна - соединяем таблицы left join-ом и если значение в первом случае NULL то берем другое значение. Если типов сообщений будет больше чем 2, используйте оператор coalesce

    select 
    [ id пользователя]
     ISNULL(U.ID, system.id] as [ID сообщения]
     from tbl_notice  N
    left join user  U ON  U.ID=N.[id сообщения] and type="user"
    left join Systems  S ON  S.ID=N.[id сообщения] and type="System"


    P.S. Поздно увидел что вопрос для MYSQL, но для MS SQL работать будет точно.
    Ответ написан
    Комментировать
  • Теория алгоритмов. С чего начать и какой язык выбрать?

    gbg
    @gbg Куратор тега Программирование
    Любые ответы на любые вопросы
    Теория алгоритмов работает и вовсе с абстрактными машинами Поста и Тьюринга, ЯП для нее не нужен.

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

    Языки, близкие к железу, вроде C и С++ наоборот, позволяют реализовывать алгоритмы, максимально задействуя аппаратные возможности платформы. Такой программист менее эффективен (выдает меньше реализованных задач в единицу времени), зато его код эффективен, и может задействовать все возможности железа.

    Написание кода на C и C++ предъявляет больше требований к программисту и качеству его работы, заставляет учитывать больше мелочей и больше дисциплинирует. В этом смысле, такие языки лучше подходят в качестве учебных.
    Ответ написан
    Комментировать
  • Как сделать скриншот окна ввода пароля в Windows 7?

    RusTech
    @RusTech
    Скриньте фуллскрин виртуальной машины или приглашение RDP
    Ответ написан
    Комментировать
  • Цикл с таймаутом ровно в 1 секунду?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Ваш вопрос можно приводить в качестве наглядного пособия на тему "Как именно вылазит боком кривая архитектура системы" :) Основная проблема в том, что интеграция компонент через storage есть зло, рано или поздно (чаще - рано) заставляющее разработчика выполнять стойку на ушах. Так что, если есть такая возможность, постарайтесь устранить зло в корне, т.е. найти способ узнавать об изменениях, ну, или хотя бы о самом факте, до того, а не после. Тогда не придется ничего опрашивать в цикле, а только реагировать на изменения. А это уже - половина проблемы!

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

    "Примерно 0.03с" само по себе еще не о чем не говорит. Это всегда или в случае, если изменений нет, или если они небольшого объема? А если 90% данных обновились? Это - раз. Два: если изменения обнаружены, сколько может занять их обработка (в худшем случае)?.. И, наконец, три: если уже наступила "следующая секунда", а мы все еще не закончили обработку прошлых изменений, возникает целый ряд вопросов. Имеет ли в этом случае вообще смысл проверять новые изменения (сможем ли мы их осмысленно обработать, если найдем)? Если да, понадобится как минимум 2 потока. Если нет, насколько критично пропустить эту секунду? А сколько еще можно пропустить без ущерба для функционала? Предположим, это не критично, и мы уже пропустили секунду (или несколько), что нам важнее: чтоб следующая проверка выполнилась как можно ближе к границе "следующей секунды", или как можно быстрее? И т.д. и т.п.

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

    BuriK666
    @BuriK666
    Компьютерный псих
    Может у вас что-то идет в stderr?
    > file 2>&1
    Ответ написан
    2 комментария
  • Не стартует cron на FreeBSD 10.1. Что делать?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    А если запустить с отладочной информацией но без отладчика -- падает?
    В этой вашей BSD есть core-дампы? Если есть -- пусть сгенерирует, загрузите его в gdb и посмотрите.
    Ответ написан
    6 комментариев
  • Указатели на память в стеке?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Итак. В присваивании у нас участвует "string" - это константа. Она отправляется компилятором в область данных программы - это зависит от платформы, куда конкретно. Так что на стеке оказывается сам указатель cStr, который указывает куда-то, куда компилятор засунул ваши буковки.

    По второму вопросу (какого черта вы засунули два вопроса в один?) - компилятор - не дурак, он взял два одинаковых набора символов "str", понял, что они одинаковые, и не стал плодить дубляки - в a и b попадает один указатель, потому как компилятор не стал сохранять в программе две идентичные строки.
    Ответ написан
    7 комментариев