• Миграция на Linux?

    @marazmiki
    Укротитель питонов
    Отзывы от тех, кто только-толко мигрировали, нужны? :)

    1. В чём для конечного пользователя главные отличия Gnome от KDE?
    Внешний вид и начальный набор софта, наверное. И вроде бы кеды более требовательны к ресурсам, бо слишком наворочены.

    2. Существуют какие-то примочки, позволяющие привести вид папок в Линуксе к стандартному C:/Program Files?
    Вряд ли, потому что незачем. В Линуксе вообще особо незачем лазить по структуре. Разве что в /etc править кое-где конфиги да в /var читать логи.

    — простенький аудио-плеер (на винде используется AIMP, вполне устраивает).

    Я на винде использовал в основном winamp, поэтому для себя выбрал audacious (нашёл описание на том же хабре). Позиционируется как бесплатный аналог winamp. Основан на gtk, но можно выбрать не только гткшный интерфейс, но и винамповский (вроде бы даже скины старых винампов подходят). Не знаю, зачем я про винамп написал, но вдруг кому полезно будет.
    — очень понадобится аналог Notepad++

    Обычно в таких случаях рекомендуют gedit, что под gtk. По функционалу на мой непритязательный взгляд похож на notepad++. Насчёт KDE не знаю, говорят, что есть какое-то Kate, но я его не видел. Зато мой коллега, испольщующий KDE, работал в специально поставленном гткшном gedit; Ещё иногда упоминают medit, но я ничего про него сказать не могу — не ставил.
    — для работы со слоями PSD подходит только Gimp? Аналог Иллюстратора существует?

    Gimp со слоями работает очень посредственно. Зато под wine 1.2 замечательно работает Photoshop CS2 (портабельный). CS5 (тоже портабельный) запускается, но иногда вылетает. Так что если Вы не дизайнер, а фотошоп нужен на поверстать, то лучше CS2 использовать.
    Ответ написан
    4 комментария
  • Python, проблема?

    @marazmiki
    Укротитель питонов
    Винда, да? Попробуйте

    print link_text.encode('UTF-8')
    Ответ написан
    2 комментария
  • Расширение модели User в Django - AUTH_PROFILE_MODULE

    @marazmiki
    Укротитель питонов
    И я, пожалуй, оставлю тут ссылку на топик смежной тематики
    Ответ написан
    Комментировать
  • Расширение модели User в Django - AUTH_PROFILE_MODULE

    @marazmiki
    Укротитель питонов
    Не советую нормально запускать то что написали: слишком уж много идеологических ошибок.

    Во-первых, Вы не проверяете пользовательский ввод. Два примера: у Вас в модели Team уникальный индекс на поле name. Если пользователь введёт в POST-форме имя команды, которое уже существует, вывалится ошибка базы данных. Аналогичная ситуация с User.

    Во-вторых, Вы Вы создаёте User, но не создаёте UserProfile. Сам он создаваться не будет, следовательно, вызов user.get_profile() (у Вас, кстати, скобочек не было, отсюда и AttributeError).

    В-третьих, Вы пытались в поле внешнего ключа, которое должно принимать объект модели, пытаетесь передать целочисленное значение. Надо было так:
    user.get_profile().team = team


    Как правильно? Используйте ModelForm. Они возьмут на себя рутинную работу по грамотной валидации данных и будут возвращать сконструированные инстансы моделей.

    Хотя конкретно в этом случае ModelForm не очень подойдёт, потому что данные сохраняются в несколько разных моделей. В таких случаях приходится использовать Form и чуть-чуть програмировать, а именно описывать нестандартную логику валидациитам, где это требуется (метод clean_something описывает пользовательскую валидацию поля something, подробности в разделе Form and field validation документации).

    Код формы (forms.py) будет примерно таким (писалось экспромтом и не тестировалось, не надо бездумно копипастить):
    # -*- coding: utf-8 -*-
    from django import forms
    from django.contrib.auth.models import User
    
    class RegisterForm(forms.Form):
        username = forms.CharField()
        email    = forms.EmailField()
        password = forms.CharField()
        teamname = forms.CharField()
    
        def clean_username(self):
            """
            Проверим уникальность юзернейма
            """
            username = self.cleaned_data.get('username')
    
            if User.objects.filter(username=username).count() > 0:
                raise forms.ValidationError, 'User %s is already exists' % username
            return username
    
        def clean_team(self):
            """
            Проверим уникальность имени команды
            """
            name = self.cleaned_data.get('teamname')
    
            if Team.objects.filter(name=name).count() > 0:
                raise forms.ValidationError, 'Team %s is already exists' % name
            return name
        
        def clean(self):
            """
            Подготовка чистых данных для вставки в модель
            """
            data = super(RegisterForm, self).clean()
    
            data['user'] = User.objects.create_user(
                username = data['username'],
                password = data['password'],
                email    = data['email'],
            )
            data['team'] = Team.objects.create(
                name = data['teamname'],
            )
    
            return data


    А кусок с самой регистрацией в views.py будет выглядеть примерно так:
    form = RegisterForm(request.POST or None)
    if form.is_valid():
        data = form.cleaned_data
        profile, created = UserProfile.objects.get_or_create(
            user = data['user'], # user - модель, а не строка
            team = data['team'], # team тоже модель
        )
    


    При желании можно инкапсулировать создание UserProfile в классе формы. Это даже правильнее, но в данном случае непринципиально :)

    Если я где-то ошибся или непонятно — спрашивайте и добро пожаловать в клуб :)
    Ответ написан
    1 комментарий
  • Как монетизировать входящий bandwidth?

    @marazmiki
    Укротитель питонов
    Ещё одна идея на правах шутки: генератор раскадровки для видео. То есть на входе имеем большущий видеофайл, на выходе — набор снэпшотов (ну знаете, как на торрентах принято).

    Можно развить идею ещё дальше: не хранить этот файл у себя, а сделать автоматическую публикацию его на хостингах изображений. Тогда исходящего трафика практически не будет :)
    Ответ написан
    Комментировать
  • Как монетизировать входящий bandwidth?

    @marazmiki
    Укротитель питонов
    На правах шутки: мини-сервис, вычисляющий хеши (sha, md5 и прочие) для исошек :)
    Ответ написан
    1 комментарий