• Как сделать правильную сегментацию сети?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Нормальное решение. Серваки, роутеры, свитчи, интерфейсы управления - выносить в отдельную подсеть, чтобы "чужие здесь не ходят". wifi, при причине его трудноконтролируемости - отдельно, гостевые входа - вообще отдельно ото всего.
    Сетку правда это не факт что разгрузит, наоборот может сильнее подгрузить, но заметно усилит защищенность. Юзеру - юзерово, гостю - гостевое...
    Ответ написан
    Комментировать
  • Какие задачи можете посоветовать руби программисту по уровням сложности?

    Freika
    @Freika
    Senior Ruby on Rails developer
    Ответ написан
    Комментировать
  • Что эффективнее в шахматах: нейросети или алгоритмы?

    @Elizavetta
    Matroid: gamedev/js-разработка
    Т.к. Deep Blue пошел по пути брутфорса, с нейросетями в шахматах не заморачивались, до недавнего времени. Концентрация усилий была на тюнинге оценочных алгоритмов. В 2015 появилась работа. Но интерес в этом направлении может быть утрачен, т.к. алгоритмы и так очень компактны, даже процессора мобильного устройства хватит для того, чтобы обыграть белкового гроссмейстера.
    Ответ написан
    1 комментарий
  • PHP7 в ubuntu. Уже есть в оф. репозиториях?

    Defman21
    @Defman21
    php7 в репозиториях 16.04.
    Ответ написан
    Комментировать
  • Какие вы знаете виртуальные операционные системы?

    @nfire
    Параноик и облако это как атеист и крещение. Либо одно либо другое.
    Ответ написан
    Комментировать
  • Как синхронизировать атрибуты учетных записей Active Directory с таблицей в MySQL?

    tiv
    @tiv
    Сисадмин с опытом
    Добрый день, писал когда то такое для выгрузки e-mail адресов с AD, возможно поможет.

    Скрипт:
    #!/usr/bin/python
    __author__ = 'tiv'
    
    import os
    import ldap
    import MySQLdb
    from ConfigParser import ConfigParser
    from subprocess import call
    
    mysql = ['localhost',  # host
             'postfix',  # user
             'postfix',  # password
             'postfix']  # schema
    
    
    def main():
        try:
            emails = []
            domains = []
            connection = []
            cp = ConfigParser()
            cp.read('/etc/postfix/postfix-mysql.cf')
            for i in cp._sections:
                connection = [cp.get(i, 'dc'), cp.get(i, 'user'), cp.get(i, 'pass'), cp.get(i, 'dn'), cp.get(i, 'host')]
                print('Processing LDAP server ' + connection[0] + ':')
                basedn = connection[3]
                nexthop = connection[4]
                lc = ldapconnection(connection)
                ls = ldapsearch(lc, basedn)
                rl = resultlist(ls)
                emails.extend(rl[0])
                for domain in rl[1]:
                    domains.append([domain, nexthop])
                print('Processing of LDAP server ' + connection[0] + ' completed.')
            createdb(emails, domains, mysql)
        except:
            print('Error processing of LDAP server ' + connection[0] + '!')
            pass
        try:
            print(' Running postmap and reload Postfix...')
            postfixreload()
            print(' Running postmap and reload Postfix successfully!')
            print('Operation completed successfully!')
        except:
            print('Error running postmap and reload Postfix!')
            pass
    
    
    def postfixreload():
            # The top argument for walk
            topdir = '/etc/postfix'
            # The extension to search for
            exten = '_hash'
            for dirpath, dirnames, files in os.walk(topdir):
                for name in files:
                    if name.lower().endswith(exten):
                        call(['postmap', 'hash:' + os.path.join(dirpath, name)])
            call(['postfix', 'reload'])
    
    
    
    def ldapconnection(ldapserver):
        try:
            print(' Trying to connect to LDAP server ' + ldapserver[0] + '...')
            ldapconnection = ldap.initialize('ldap://' + ldapserver[0])
            ldapconnection.simple_bind_s(ldapserver[1], ldapserver[2])
            ldapconnection.protocol_version = ldap.VERSION3
            ldapconnection.set_option(ldap.OPT_REFERRALS, 0)
            print(' Connection to LDAP server ' + ldapserver[0] + ' succesfull.')
        except:
            print('Error connecting to LDAP server ' + ldapserver[0] + '!')
            pass
        return ldapconnection
    
    
    def ldapsearch(ldapconnection, basedn):
        try:
            print(' Sending LDAP query request...')
            scope = ldap.SCOPE_SUBTREE
            filter = '(&(proxyAddresses=smtp:*)(!(objectClass=contact)))'
            attributes = ['proxyAddresses']
            searchresults = ldapconnection.search_s(basedn, scope, filter, attributes)
            print(' LDAP query request results received.')
        except:
            print('Error sending LDAP query request!')
            pass
        return searchresults
    
    
    def resultlist(searchresults):
        try:
            print(' Processing LDAP query results...')
            emails = []
            domains = []
            for i in range(len(searchresults)):
                try:
                    for j in range(len(searchresults[i][1]['proxyAddresses'])):
                        r = searchresults[i][1]['proxyAddresses'][j].lower()
                        if 'smtp:' in r:
                            email = r[5:]
                            emails.append(email)
                            domain = email.split("@")[1]
                            domains.append(domain)
                except:
                    pass
            print(' LDAP query results processed.')
        except:
            print('Error processing LDAP query results!')
            pass
        return removedublicates(emails), removedublicates(domains)
    
    
    def createdb(emails, domains, mysql):
        try:
            print('Connecting to DB ' + mysql[3] + '...')
            try:
                db = MySQLdb.connect(host=mysql[0], user=mysql[1], passwd=mysql[2])
                cursor = db.cursor()
                sql = 'CREATE SCHEMA IF NOT EXISTS ' + mysql[3]
                cursor.execute(sql)
                db.commit()
            except:
                pass
            try:
                db = MySQLdb.connect(host=mysql[0], user=mysql[1], passwd=mysql[2], db=mysql[3])
                cursor = db.cursor()
            except:
                print('Error connecting to DB ' + mysql[3] + '!')
            print(' Check schemas and tables...')
            sql = ['CREATE TABLE IF NOT EXISTS ' + mysql[3] + '.relay_users (id INT NOT NULL, email LONGTEXT NULL, PRIMARY KEY (id))',
                   'CREATE TABLE IF NOT EXISTS ' + mysql[3] + '.relay_domains (id INT NOT NULL, name LONGTEXT NULL, nexthop LONGTEXT NULL, PRIMARY KEY (id))',
                   'TRUNCATE ' + mysql[3] + '.relay_users',
                   'TRUNCATE ' + mysql[3] + '.relay_domains']
            for i in range(len(sql)):
                cursor.execute(sql[i])
                db.commit()
            print(' Inserting domains...')
            for i in range(len(domains)):
                sql = 'INSERT INTO postfix.relay_domains (id, name, nexthop)' \
                      'VALUES ("' + str(i) + '", "' + domains[i][0] + '", "smtp:[' + domains[i][1] + ']")'
                cursor.execute(sql)
                db.commit()
            print(' Inserting emails...')
            for i in range(len(emails)):
                sql = 'INSERT INTO postfix.relay_users (id, email)' \
                      'VALUES ("' + str(i) + '", "' + emails[i] + '")'
                cursor.execute(sql)
                db.commit()
            db.close()
            print('Connection to DB ' + mysql[3] + ' closed.')
        except:
            print('Error while operating with DB ' + mysql[3] + '!')
            pass
    
    
    def removedublicates(input):
        seen = set()
        seen_add = seen.add
        return [x for x in input if not (x in seen or seen_add(x))]
    
    
    if __name__ == '__main__':
        main()


    Файл конфига к нему ('/etc/postfix/postfix-mysql.cf' в скрипте):
    [Example Company]
    dc = dc.example.com
    dn = dc=example,dc=local
    user = EXAMPLE\user
    pass = password
    host = smtp.example.com
    Ответ написан
    1 комментарий
  • Как научить чатбота учитывать контекст конкретного диалога?

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

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

    Такому боту достаточно будет осознать текст через один языковой бекенд и пересказать его через второй. Увы - таких нет.
    Ответ написан
    2 комментария
  • Как соединить желание заниматься несколькими направлениями в ИТ?

    BookaLtd
    @BookaLtd
    Компания FirstSSL
    Научитесь делегировать и управлять.
    Не обязательно лично вам делать ВСЕ своими руками.
    Во-первых, вы можете убить всю жизнь на это, бесконечно работать, учиться, повышать профессионализм и т.д. Не думаю, что вы именно этого хотите. Вы хотели бы не быть привязанным к рабочему месту, заниматься любимым делом, при этом получая доход и обеспечивая свою жизнь. Если я правильно вас понимаю?
    Один из вариантов - открыть компанию, предоставляющую услуги в данных направлениях.
    Нанять сотрудников, пусть не сразу профессионалов, но, перспективных, целеустремленных. И дать им возможность развития в рамках вашей компании. Так сказать - нематериальная мотивация. Вкладывайте в своих сотрудников, обучайте их (курсы/вебинары/обмен опытом и др.). Создайте им высокоэффективное рабочее место и дойстойную зп.
    Развивайтесь сами, не только в профессиональном плане. Но и как личность.
    Развивайте корпоративную культуру. Развивайте клиентоориентированность не только внешнюю, но и внутреннюю. Ваш внутренний клиент - это ваши сотрудники. Если ваши сотрудники не будут замотивированы работать у вас и работать хорошо - рано или поздно все развалится.
    Начинать не обязательно сразу со штата в 100 человек. Пусть даже это будет 2-3 человека. Если дело пойдет, компания будет развиваться и расти дальше.
    И по мере развития у вас появится возможность принимать участие, быть генератором новых направлений или наблюдателем по каждому из направлений.
    К чему я это все...научившись делегировать и мотивировать людей, слушать и слышать их (не путать с потаканием) вы сможете сделать свой бизнес самостоятельным. Уделяя пару часов работе в день сможете больше времени уделять себе, своей жизни, семье. Вы станете свободным.
    Ответ написан
  • Как соединить желание заниматься несколькими направлениями в ИТ?

    @Maa-Kut
    системное администрирование, информационная безопасность и создание-поддержка-продвижение сайта

    Запросто: наняться в какую-нибудь небольшую конторку, которая недавно решила, что без собственного сайта ну никак вообще, однако выделить бюджеты на целую команду (сисадмин, безопасник, верстак, разработчик, СЕОшник и т.п.) не хочет или не может. Таким конторам как раз ко двору придется "человек-оркестр", который и сервак подымет, и сайтик на него выложит, и продвигать его потом станет. Англосаксы про таких говорят "Jack of all trades, master of none".

    Далее "оркестр", скорее всего, определит для себя одну-две по-настоящему интересные области и будет развиваться уже в этих направлениях, задвинув остальное. Ну или сопьется от неспособности объять необъятное :)
    Ответ написан
    Комментировать
  • Как соединить желание заниматься несколькими направлениями в ИТ?

    vvpoloskin
    @vvpoloskin Куратор тега Компьютерные сети
    Инженер связи
    Повзрослеть?
    Ответ написан
    2 комментария
  • Существуют ли операционные системы сделанные в России?

    Что бы создать ОС с нуля (не игрушечную), отвечающую современным реалиям, необходимо миллионы человеко-часов. Но это не означает, что можно посадить миллион программистов, и за час они напишут ОС.
    А если совсем параноить, то и интрументарий должен быть написан с нуля.

    Из реальных проектов можно отметить AltLinux, он вроде проходил какую-то сертификацию.
    Ответ написан
    5 комментариев
  • Как сделать плавное возвращение меню?

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    Чуть по сложнее нужно: https://jsfiddle.net/IonDen/s33v2roh/
    var show = false;
    var $nav = $("nav");
    
    function showFixed() {
        if (show) {
            return;
        }
    
        show = true;
    
        $nav.hide().addClass("nav-fixed").slideDown();
    }
    
    function hideFixed() {
        if (!show) {
            return;
        }
    
        show = false;
    
        $nav.slideUp(function() {
            $nav.removeClass("nav-fixed").slideDown();
        });
    }
    
    $(window).scroll(function() {
        var scroll = $(window).scrollTop();
    
        if (scroll >= 350) {
            showFixed();
        } else {
            hideFixed();
        }
    });
    Ответ написан
    Комментировать
  • Как вам такой способ оптимизации игры?

    GavriKos
    @GavriKos Куратор тега Разработка игр
    Это называется LoD - https://ru.wikipedia.org/wiki/Level_of_Detail
    Реально используется давно и часто.
    Про редактор - непонятно, зачем он нужен.
    Ответ написан
    Комментировать
  • Как вам такой способ оптимизации игры?

    swanrnd
    @swanrnd
    Издатель HTML5 игр
    Так во многих играх делают.
    Ответ написан
    2 комментария
  • Как вывести аудиозаписи вк?

    xDireX
    @xDireX
    Через vk api получить прямую ссылку на файл. Данный файл воспроизвести уже у себя на сайте любым выбранным Вами проигрывателем.
    Ответ написан
    3 комментария
  • Как зашифровать файл на сервре с помощью PHP?

    Denormalization
    @Denormalization
    Можно использовать php.net/manual/ru/function.openssl-encrypt.php
    Шифровать каким-нибудь aes-256-cbc. Ключ + вектор генерировать для каждого файла, и отдавать их юзеру, чтобы только он мог забрать файл :)
    Ответ написан
    3 комментария
  • Debian 8.4. Какие программы входят в состав установочных дисков?

    sfi0zy
    @sfi0zy
    Creative frontend developer
    Сомневаюсь, что где-то есть такой список - проще всего запустить debian в virtualbox и посмотреть что там есть. Но тут есть еще один момент: вы говорите, что у вас не будет интернета, но вы ведь можете вставлять носители информации в ваш компьютер, на который будет происходить установка, а значит можете отдельно скачать интересующие вас пакеты с их зависимостями в debian с интернетом
    sudo apt-get clean
    sudo apt-get --download-only install <package_name>

    ваши пакеты будут в /var/cache/apt/archives/
    и потом их установить на другом компьютере "в оффлайне" с помощью
    sudo dpkg -i --force-depends *.deb
    Ответ написан
    Комментировать
  • Какой недорогой планшет для кодинга на виндовз выбрать?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    планшет для кодинга на виндовз

    Никакой.
    Все равно, что искать подводную лодку для полетов в космос.
    Ответ написан
    Комментировать
  • Установка lxml в CentOS. Как победить ошибку?

    gadzhi15
    @gadzhi15 Автор вопроса
    Решил вопрос. Сначала сделал так:

    sudo yum install libxml2-devel libxslt-devel python-devel


    Потом так:
    pip install lxml
    Ответ написан
    Комментировать
  • Взломали сервер?

    fox_12
    @fox_12
    Расставляю биты, управляю заряженными частицами
    openssl x509 -in /tmp/какой-нибудь-файл -noout -subject

    Быстрее всего dropbox-client
    Ответ написан
    1 комментарий