• Chmod -R 777 / или как я убил систему одной командой?

    @Reversaidx
    Системные права чинятся за пару минут, ставишь виртуалку с такойже ОС, дампишь права(читай getfacl), и расскатываешь права.
    Если есть бекапы сервера то вообще всё замечательно, просто делаешь тоже самое с бекапа
    Ответ написан
    1 комментарий
  • Какой выбрать Python фреймворк для системы парсинга сайтов?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    pyspider нравился интерфейсом очень давно, пока не распробовал все части scrapy
    Ответ написан
    1 комментарий
  • Как правильно управлять парком серверов 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 комментариев
  • Где удобно хранить куски кода?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Ответ написан
    Комментировать
  • Как моделировать дорожный трафик?

    @GreatRash
    Вот тут, можно нажать CTRL+U, промотать в самый низ и почитать скрипты.
    Ответ написан
    1 комментарий
  • Порекомендуйте простую систему мониторинга для серверов?

    @AstonMartin Автор вопроса
    В итоге все таки установил zabbix. Отличная документация, все удобно.
    Ответ написан
    Комментировать
  • Best practies? Две независимые модели для пользователя и админа, Django 1.11.x?

    @immaculate
    Программист-путешественник
    Я не раз видел попытки такого разделения пользователей по классам в проектах на Django. Не знаю, почему все сразу выбирают такое решение, которое в перспективе не приносит ничего, кроме боли.

    Проще всего пойти стандартным путем: унаследовать пользователя от django.contrib.auth.models.AbstractUser, а различие между пользователями определять либо по группе/разрешениям, либо добавить поле в свою модель типа is_moderator. Это будет во много раз (на порядок точно) проще реализовать и поддерживать, будет совместимость со всем стандартным кодом Django и сторонними библиотеками, любому просто войти в проект и внести изменения.

    Разделение на две разных модели никаких абсолютно преимуществ не дает, кроме тонны мусорного кода и головняков с поддержкой данной гидры.

    TLDR:
    1) Из вашего вопроса остается неясным, почему требуется разделение по разным классам. Это самый безумный вариант для разграничения полномочий, и в Django разделение полномочий пользователей уже предусмотрено по умолчанию
    2) Поддерживал пару проектов с разными классами для разных классов пользователей. Поверьте, это просто ужас-ужас в поддержке, а самое главное, что он ничем не оправдан.
    Ответ написан
  • Полезен ли Honest Dollar гражданину РФ?

    @dog_funtom Автор вопроса
    Фрилансер через Upwork
    TL;DR: Нет, не актуально, потому что не дает пройти регистрацию до конца.

    Из-за отсутствия вменяемых объяснений насчет возможных ограничений, пришлось тупо попытаться зарегестрироваться. Оказалось, что на втором этапе нельзя пройти дальше, если не указать гражданство или резиденство в США. Так что, лажа это или нет, она гражданам РФ не актуальна.

    Очередной сайт болеет популярной болезнью: он лезет туда, где сидят люди со всего мира, но не считает нужным сразу предупредить, что актуален лишь некоторым. Так сложно получить расположение по IP и вывесить предупреждалку, или что-нибудь в таком духе?

    Это мне напоминает некоторые русские «интернет-магазины», которые предлагают жителю Волгограда «купить с бесплатной доставкой» их восхитительные товары, и только на самом последнем шаге заказа перед оплатой выясняется, что этот «интернет-магазин» не рассылает в «замкадье» даже платно. Ребята, кто разрабатывает сайты, не делайте так, ок?
    Ответ написан
    Комментировать
  • Какую научно-популярную книгу лучше выбрать для программиста?

    ptitca_zu
    @ptitca_zu
    Programmer. Reader. Introvert
    Можно другие книги Перельмана. Его сравнительно недавно переиздавали в отличнейшем издательстве.
    Из научпопа можно покопаться в сериях, которые фонд Династия издавал.
    Вот еще две замечательные книги по физике - раз, два Маст рид, однозначно.

    Насчет фантастики - тут еще больше нарекомендовать можно :) Поэтому, кроме классики (Лем, Азимов, Хайнлайн, Саймак, Желязны, Шекли и иже с ними) могу порекомендовать вот такую серию. Составитель - Гарднер Дозуа, очень известный товарищ в НФ мире. У нас несколько книг Эксмо, по-моему перевело. У меня одна есть - издана очень хорошо, вполне себе подарочное издание. Есть еще всякие серии "Весь <имя автора>" тоже очень прилично выглядят.
    Вот этот список еще посмотрите.
    Пожалуй все, а то я долго так могу.
    Ответ написан
    5 комментариев
  • И все-таки PHP 7 быстрее Python 3?

    Tark
    @Tark
    Pyramid'альный мир
    Но какая разница? У вас ведь скрипты ещё и с базами данных общаются?
    Предположим, написали вы сервис на чистом РНР без фреймворков, а для теста написали аналогичный сервис на Python/Django. Предположим, что на чистом РНР можно получить 10к запросов/сек, а на Django - жалкие 4к. Печаль.

    Но ваш сервис, например, будет использовать 5 запросов к БД, каждый из которых будет отрабатываться за 1мс. 5мс - чисто на запросы к БД.

    Итого: на РНР запрос будет выполняться за 5.0001мс, на Python/Django - за 5.00025мс... Неужели есть какая-то разница?
    Ответ написан
    6 комментариев
  • Где найти тексты Python-программ для совершенствования навыков понимания чужого кода?

    yamaoto
    @yamaoto
    la programmeur
    Выберите по интересующей тематике проекты на гитхабе/гитлабе, возможно сумеете найти проект, которым пользуетесь сами. Ну и по алгоритму fork - pull request
    Ответ написан
    Комментировать
  • Кто мигрировал с Debian на CentOS 7?

    @Konkase
    Переехал и не капли не жалею, Centos намного удобнее, чем Debian.
    Теперь использую исключительно Centos, Debian только на одном десктопе (Но в приоритете для десктопа - Fedora)
    Самый большой из плюсов - лайф цикл. Ещё в yum по умолчанию многое можно, чего нельзя в apt (search, localinstall, provides). А так же selinux и firewalld и помимо этого всякие мелочи для которых в Debian приходилось костылить (типа if-up/if-down для route/rule/iptables)
    Ответ написан
    1 комментарий
  • Хороший код для тестирования Django?

    Guest007
    @Guest007
    Django, Python, Linux и всё такое...
    Вот тут: https://github.com/taigaio/taiga-back тоже интересно
    Ответ написан
    Комментировать
  • Как вы быстро разворачиваете окружение?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Использую virtualenv + ansible (или fabric в простых случаях). Для разработчика достаточно поднять в докере или kvm пару-тройку виртуалок с базами.
    Ответ написан
    Комментировать
  • Почему заказчики на UpWork требуют использовать Bootstrap?

    bootd
    @bootd
    Гугли и ты откроешь врата знаний!
    Всё просто! Я думаю то, что вы сделаете, при условии, что руки у вас прямые, будет поддерживаться после вас. И разработчикам не придётся изучать ваш css код, что бы вставить еще одну колонку, изменить размер другой колонки сетки и т.д., т.к. с документацией Bootstrap многие уже знакомы, а те, кто нет, смогу её прочитать.

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

    Я лично его не использую. Для себя давно написал каркас, который всегда по мере надобности улучшаю. Но так же я использую некоторые плагины bootstrap. Модальные окна, выпадающий список и табы(вкладки). Все!

    Просто выпилите все не нужное и оставьте то, чего требует проект. И заказчик доволен и вам проще
    Ответ написан
    1 комментарий
  • Курс по программированию на Python. Кто проходил?

    Lancelote
    @Lancelote
    Django developer
    Да нормальный на coursera курс (вот он кстати https://www.coursera.org/course/interactivepython1 ), лучше многих. Там вся специализация отличная - веселые преподаватели, интересные задачки, заставляют писать тесты и соблюдать PEP8. На stepic сильно проще, но на русском, единственно. Курс от codecademy.com элементарный, мб в нагрузку к чем-нибудь более серьезному только взять.

    Лучшие, из тех что я проходил:
    https://www.udacity.com/courses/cs101 - основы
    https://www.udacity.com/courses/cs212 - углубленные вещи
    Ответ написан
    3 комментария
  • Как создать страницу статических настроек для сайта в админке Django?

    @deliro
    from datetime import timedelta
    
    from django.db import models
    from django.utils import timezone
    
    
    class Settings(models.Model):
        """
        Модель настроек с интерфейсом атрибутов
    
        >>> settings.hello = 'world'
        Сохранит модель с key='hello' и value='world'. Если модель с таким ключом до этого
        существовала (т.е. в данный момент мы меняем значение), запись в БД поменяется и кэш
        инвалидируется.
    
        >>> settings.hello
        'world'
        Получение ключа. Сначала ищет в кэше. Если находит - возвращает, если нет,
        ищет в БД запись с таким ключом (hello). Если находит - кладёт в кэш и возвращает.
    
        >>> del settings.hello
        Удаляет запись с ключом hello из БД и кэша.
        
        Также, ключ и значение можно редактировать из админки (кэш в этом случает также
        инвалидируется)
    
        Пример куска вьюхи, которая может редактировать настройки сайта:
        if form.is_valid():
            settings.phone = form.cleaned_data['phone']
            settings.address = form.cleaned_data['address']
        """
        key = models.CharField(max_length=255, primary_key=True)
        value = models.TextField()
    
        __cache_ttl = 60 * 60
        __cache = {}
        __cache_max_size = 300
    
        def save(self, *args, **kwargs):
            super(Settings, self).save(*args, **kwargs)
            self._cache_invalidate(self.key)
    
        def __setattr__(self, key, value):
            cls = type(self)
            try:
                instance = cls.objects.get(key=key)
                instance.value = value
                instance.save()
            except cls.DoesNotExist:
                cls.objects.create(key=key, value=value)
            self._cache_invalidate(key)
    
    
        def __getattr__(self, key):
            value = self._cache_get(key)
            if value is None:
                cls = type(self)
                try:
                    value = cls.objects.get(key=key).value
                    self._cache_set(key, value)
                except cls.DoesNotExist:
                    value = None 
            return value
    
        def __delattr__(self, key):
            type(self).objects.filter(key=key).delete()
            self._cache_invalidate(key)
    
        def _cache_set(self, key, value):
            if len(self.__cache) < self.__cache_max_size:
                self._cache_force_set(key, value)
            else:
                self._cache_remove_old()
                if len(self.__cache) < self.__cache_max_size:
                    self._cache_force_set(key, value)
    
        def _cache_force_set(self, key, value):
            self.__cache[key] = (
                value,
                timezone.now() + timedelta(seconds=self.__cache_ttl)
            )
    
        def _cache_get(self, key):
            result = self.__cache.get(key)
            if result[1] > timezone.now():
                self._cache_invalidate(key)
                return None
            return result[0]
    
        def _cache_invalidate(self, key):
            del self.__cache[key]
    
        def _cache_remove_old(self):
            now = timezone.now()
            for k, v in self.__cache.items():
                if v[1] < now:
                    self._cache_invalidate(k)
    
    settings = Settings()


    И в контекст процессоры добавить:

    def settings(request):
        return {'settings': settings}


    Ну и в любом шаблоне:
    <title>{{ settings.title }}</title>
    Ответ написан
    7 комментариев