• 26Jun

    pc_and_boyИтак, случилось. То что мы так давно ждали. Войну между Дебианом унстабле и мной выграл я. Причем довольно хитро. Открыл словарик английского языка, перелеснул пару страничек, и задумался. Так вот почему unstable, так вот почему меня все так отговаривали. Скажу прямо. Глючит! Особенно, когда вы перепрыгиваете со стейбла на стейбл мега хитрым способом. С начало пол ночи safe-upgrade, а потом пол дня full-upgrade, а остальные пол дня: «А куда делся КДЕ?? а нет больше КДЕ, а кто это сделал..». И бог с ним с КДЕ, гном на самом деле не так уж и плох ( вобщем то с него то я вам и пишу).

    И тут начинается самая интересная часть любого рассказа. Кто во всем виноват? Я нашел. Гугу. Да… и не надо АндрюшенькО так удивляться. Ты! ДА…

    Короче, у чувака с голодухи ( т.к. я ему торчу кучу бобла за сервак) что-то там переклинило, однажды ночью, и решил обновить наш совместный убунту сервер. Обновил все без разбору. Я честно говоря боюсь себе представить, в какой момент и при каких обстоятельствах в этой маленькой голове промелькнула эта мысль. Но факт на лицо. Зашел на сервер и обновил. Причем очень фишечно, как ответственный чел, он обновил, проверил, что его долбаный, никому не нужный ФТИПИШНИК поднялся, и… (тут щас будет моя любимая часть) И ЛЕГ СПАТЬ!!! Красавец!!! Лучший!!! А нет, забыл, в этот приветственном сообщении консоли, когда как только логинишся оно выскакивает ( незнаю, как точно и професионально оно называется, но думаю вы меня поняли) написал, мол обновился, я крутой. Не знаю, почему наш герой из всего спектра мессенджеров, в которых я находился, в этот момент он выбрал именно этот.

    Утро. Саша просыпается. Чистит зубы. В перспективе намечает планы закончить одну фишку, исправить баги в другой. Легкий завтрак. Цем жену в лобик. Буду скоро. Загружается мой (ныне покойный ) Дебиан стейбл ( кстате в том же словарике посмотрел, что это реально лучше чем анстейбл ). Браузер. Лябах. Ком. Х..Й! Хм… странно… Сервак работает, захожу. Вижу бодренькое сообщение Гугу. Причина выяснилась сразу. Теперь у нас на серваке не python2.5, а 2.6. А значит что?? Правильно мальчики и девочки. Все лежит НА! Разве что дедуля постгрис еще стоял на свои двух. Лежал блог, лежал девелоп, даже долбаный трек и тот лежал. И я сразуже гугу написал ( перевод почти дословный ). «Андрей, друг мой, мне кажется, что ты поступил не совсем хорошо. Нельзя так поступать с товарищами». Ну, думаю где-то что-то такое я ему написал.

    Ну не буду томить вас подробностями о том, как же все-таки мы поднимали обратно все мое борохлишко. Надо заметить не без помощи Гугу. Выручил братан, спасибо!

    Когда осадочек злобы то осел малех. Жаба то и задавила. На девелопе то уже 2.6, а у меня 2.5. Хотя по сути то, от 2.5 до 2.6 реально 2 остановки на метро. Ан нет в репозитариях дебиана оно с пометкой красными букфками Експерементал. Еще больше апетиты разгорелись после прочтения ватзнью. Причем не то чтоб я сразу брошусь все это юзать у себя. Нет. Прото какоето внутреннее жлобское чуство, что у Ваньки из соседнего двора есть новые спици на велосипеде, а на моем хамере диски еще с прошлого сезона.

    Я в джабер, давай пилить пацанов на тему что мне для этого надо. Очень хочу, ну пожалуйсто!! Забегая вперед скажу, что потом у этих я спрашивал: «Ну и что мне теперь с этим делать, и как и что .. оно же… а как». Причем так весело иногда. Говорят: «А попробуй вот этот пакет установи». ПБЫШ, иксы вылетели не поднимаются, ребут, с пол пинка. Сети в КДЕ нет, и гнома захожу в хистори общения, видать увидели, что я вывалился через 2 мин после сообщения: «Добро пожаловать в unstable». До 4х ночи я мучался со всем этим, сам мучался, ноут свой мучал, и людей с чата. И знаете что в такие моменты думаешь? На кой Х тебе нужны были эти спици.

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

    На след день в принципе уже можно было работать. Разве что не было звука. Разве что виртуальная тачка с виндой больше не стартовала. Разве что половина иконок было с вопросиками, видять что то еще и со стилями приключилось. А так все работало. Единственное, что убивало, что python2.5. Нет, 2.6 стоял, но сим линка была на 2.5.

    Чем все закончилось. Да в общем то, еще не закончилось. Это пост я пишу из свежо установленной убунты. Я даже уже думаю написать серию статей, описывающие мое издевательства над линуксами ( а их уже было не мало ) , и какое нить звучное назвение. «Незнайка на луне»

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

    И на последок, перед тем как я начну накатывать на убунту все свое борохло скажу, перефразировав классика Павла Волю: «Пофиг, что текст получился не связный, пофиг, что не о программировании или окло того, пофиг, что как всегда куча громотических ошибок. Главное, что этот блог читает мой Папа».

    Удачного всем для и выходных!

    Rating 3.00 out of 5
    [?]

    Tags: , ,

  • 24Jun

    с утра воевал с проприетарными атишными драйверами.. точнее пытался их обновить… Так что щас вроде уже нормально работаю…

    Да… и моя винда по VirtualBox… вобщем она отслужила уже свое…

    Теперь сегодня ночью будем опять поднимать хозяйство… Все… надо работать…

    PS: Кто то из умных дядей сказал, что мы не можем жить без трудностей, и когда их недостает, что начинаем смами их выдумывать. Видел бы меня сейчас этот дядька, он бы меня сфоткал и в учебник. Нах мне нужен был этот унсейбл ))

    Всем удачного дня…

    Rating 3.00 out of 5
    [?]

    Tags: , ,

  • 24Jun

    Пока мой ноут еще жив, а читатели делают ставки, я решил перед сном еще расковырять django-debug-tolbar.

    По сути все панели построены на хаках. Т.е. В архитектуре самого движка не закладывалась такая фишка. Т.е. К примеру берут класс BaseCache для из модуля django.core.cache.backends.base делают на его основе наследника, который делает тоже самое, только еще и считает. И заменяют полученный класс в модуле. Т.е. теперь там лежит «тулбарный» класс, и джанго для своей кухни будет брать его, а он уже будет делать свои «темные делишки».

    Я для своего csvlog выкавырял оттуда только sql. Теперь я могу еще и вести лог всех запросов, проходящих в вашем апе, и говорить, сколько времени они съели. Сделал сразу компонентную структуру, почти как у этого самого тулбара, так что если что можете отключать.

    А хак этот выглядит совсем не сложно:

    1. from django.db.backends import util
    2. import time
    3. from csvlog.middleware import glog
    4. class DatabaseStatTracker(util.CursorDebugWrapper):
    5.     def execute(self, sql, params=()):
    6.         start = time.time()
    7.         try:
    8.             return self.cursor.execute(sql, params)
    9.         finally:
    10.             stop = time.time()
    11.             glog.dbg(['__SQL__',stop-start,sql,unicode(params)])
    12. util.CursorDebugWrapper = DatabaseStatTracker

    Да, и я не тестил, но очень сильно подозреваю, что теперь кто-то из них двоих не сможет считать сюелины, и скорее всего тот, чей ап идет позже в INSTALLED_APPS.

    PS: Забыл предварительно проверить свободное место на винте. Бедняга должен умереть свободным.

    Rating 3.00 out of 5
    [?]

    Tags: , , , ,

  • 23Jun

    Захотелось, жадному Саше, поставить себе python2.6 на Debian lenny (stable). Но 2.6 у нас в разделе experimental так что… Перезжаем на unstable пообщался с красноглазыми админами, и парочку таки нашлось, которые так и живут, так что перекрестился, добавил в сорслис

    deb http://debian.org.ua/debian unstable main contrib non-free
    deb-src http://debian.org.ua/debian unstable main contrib non-free
    
    deb http://debian.org.ua/debian experimental main contrib non-free
    deb-src http://debian.org.ua/debian experimental main contrib non-free
    

    И вот что в ответ на апгрейд.

    1010 packages upgraded, 124 newly installed, 51 to remove and 264 not upgraded.
    Need to get 1077MB of archives. After unpacking 359MB will be used.
    Do you want to continue? [Y/n/?] Y
    

    Вобщем если я напишу следующий пост, значит у меня все ок. Так что держите пальци за меня!

    PS: как оказалось – по времени это займет часов 6. Так что уже утром узнаем, какого размера яйка у моего ноута.

    Rating 3.00 out of 5
    [?]

    Tags: , , , ,

  • 23Jun

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

    Rating 3.00 out of 5
    [?]

    Tags:

  • 22Jun

    Исправил много мелких багов, но надо уже написать нормальную доку. Есть еще идея, взять кусочки из джанго тулбара и к примеру дать возможность выводить все СЮЛ запросы.

    Кроме того, сейчас пишу еще одно приложения – простое для принятия платежей. Хотя, получилась довольно универсальная фишка. Так вот в нем я использую эти логи, но есть вероятность, хотя и маленькая, но есть, что комуто логи эти будут не подуше, поетому я еще и заглушку сделал. Такие заглушки можно писать для взаимодейстивя между джанго приложений.

    В папку с аппом добовляем файлик extapp.py

    1. __all__ = ['glog']
    2. from django.conf import settings
    3. if 'csvlog' in  settings.INSTALLED_APPS:
    4.     from csvlog import glog
    5. else:
    6.     class glog():
    7.         @staticmethod
    8.         def get_log_func(self,*args):
    9.             return lambda *args:None
    10.     for n in ['err','imp','inf','log','trc','dbg']:
    11.         setattr(glog,n,staticmethod(lambda *args:None))

    проверяет есть ли апп, если нет, то пишем для него заглушку. А везде в коде просто юзаем

    1. from extapp import glog

    I love Python!

    Rating 3.00 out of 5
    [?]

    Tags: , , ,

  • 18Jun

    ipodsНаконец-то добрался до уже давно откладываемой задачи подружить iPod и Debian. А дружба должна была состоять в возможности синхронизировать мой iPod nano 4GB с Debian Lenny.

    Итак, юзать будет YamiPod. Выкачиваем бинарники под линукс, распаковываем, сошник отправляем в /usr/lib/, YamiPod запускаем. Увидели окно? Нет? Тогда что то пошло не так, и я не шарю что… обращайтесь в службу поддержки… чью?? iPod а конечно… и сразу с матами…

    Далее выбираем модель вашего айподца. Мой оказался в самом низу списка, и у же сразу с этого места я почувствовал какую то лажу… Так вот, если вы НЕ являетесь счастливым обладателем iPod nano 4GB, то вам очень повезло, и на этом все закончилось. А у нас неудачничков спросило FWID. Как оказалось, ответ у тех же ямиподов.

    1. sudo lsusb -v | grep -i Serial

    В получинном списке находим какую нить 16 значную строку — это и есть ваш айдишник. Вбиваем его в окошечко, после вас приблудина предупредит, что мол, если вы там ошиблись, то все пойдет по п…. Но мы и не на таких окошках Окей нажимали, так что давим…

    Все… мы внутри…. я давно привык, что Линукс и Юзабилити вместе никогда не ходят, но в этой проге разработчики, по моему, еще и стебались над пользователями, в хелпе им надо было написать: «Как пользоваться не знаем, прошаритесь, отпишитесь нам, нам тоже хочется поюзать».

    В общем через 3Ж(копирайт пиплнет) я как то свой многострадальный айподец синхронизировал, глючно, ну а что вы хотели. Да… и любителей русских букафок на вам музыкальном друге обломаю сразу.

    Всем спасибо.

    ЗЫ: Родилась теория, почему разрабочики под линух кладут на юзабилити — так меньше баг репортов разработчикам! По трем причинам. Первая — вы как миниму до половины фич не доберетесь, вторая — если вы добрались до второй половины фич и случился глюк, то после такого пути вы будите полностью уверены, что наверно оно гдето так и должно работать. И третья — после того, как вы пробрались через супер замысловатывые интерфейсы, после того как вы наткнулись на баг, и поняли, что что это не что иное, а именно баг — формочкой для баг репорта вы вообще побоитесь пользоваться.

    ЗЫЫ: но все равно, он же такой КЛЕВЫЙ!!!

    Rating 3.00 out of 5
    [?]

    Tags: , , , ,

  • 17Jun

    Когда делая выборку из объекта родителя и хочется получать объекты наследники, то я использую такой финт

    1. from django.db import models
    2.  
    3. class MBase(models.Model):
    4.     field1 = models.CharField(max_length=10)
    5.     field2 = models.CharField(max_length=10)
    6.     classname = models.CharField(max_length=10)
    7.     def save(self,*args,**kwargs):
    8.         self.classname = self.__class__.__name__.lower()
    9.         super(MBase,self).save(*args,**kwargs)
    10.     @property
    11.     def rel_obj(self):
    12.         return getattr(self, self.classname)
    13.    
    14. class MFirst(MBase):
    15.     myf1 = models.CharField(max_length=10)
    16.    
    17. class MSecond(MBase):
    18.     myf2 = models.CharField(max_length=10)

    А в коде выходит примерно следующее

    1. In [11]: M.MBase.objects.get(id=3)
    2. Out[11]: <MBase: MBase object>
    3.  
    4. In [12]: M.MBase.objects.get(id=3).rel_obj
    5. Out[12]: <MFirst: MFirst object>
    6.  
    7. In [13]: M.MBase.objects.get(id=3).rel_obj.myf1
    8. Out[13]: u'Hi1'

    PS: Чтоб не мучаться, можно вынести функционал в абстрактную модель.

    1. class RelatedBase(models.Model):
    2.     childclassname = models.CharField(max_length=20,editable=False)
    3.     def save(self,*args,**kwargs):
    4.         if not self.childclassname:
    5.             self.childclassname = self.__class__.__name__.lower()
    6.         super(RelatedBase,self).save(*args,**kwargs)
    7.     @property
    8.     def rel_obj(self):
    9.         return getattr(self, self.childclassname)
    10.     class Meta:
    11.         abstract=True

    а все базовые классы уже будут от нее наследоваться

    Rating 3.00 out of 5
    [?]

    Tags: , ,

  • 08Jun

    И сегодня тоже… поэтому кроме этого… ничего вам сказать не могу..
    windowsvistamarketing

    Rating 3.00 out of 5
    [?]

    Tags: , ,

  • 07Jun

    django
    Хоть выкраить лишнюю минутку было более чем сложно. Последние две недели у меня Django-NonStop.

    Все основаное на идее, которую я описывал ранее.

    Вот, вчера ночью таки закончил. На самом деле я это штуку реализовал уже давно, просто захотелось упаковать в более продажный вид, ну и по случаю добавил там рюшечек всяких прикольных

    В репозитарии лежит пример использования этого приложения вместе с апом. Так что можете просто открыть settings.py и глянуть, какие поля в настройках необходимо добавить. Не стандартные поля помечены ##ADD

    Что под капотом?

    Возможность логить. (В шоке?)

    1. from django.http import HttpResponse
    2. from csvlog import glog
    3. def somelog(request):
    4.     glog('executin log by default name')
    5.     glog.err('ERR, some error hapend')
    6.     glog.imp('IMP, some important information')
    7.     glog.inf('INF, some information')
    8.     glog.log('LOG, some log')
    9.     glog.trc('TRC, some trace')
    10.     glog.dbg('DBG, debug information')
    11.     return HttpResponse('OK')

    И вы можете сами указывать какие данные из стека вы хотели бы сторить. Настройка представляет собой набор ссылок на функции.
    Автоматом сторятся данные реквеста и респонса. Точна также вы можете задавать какие куски этих объектов идут к вам в лог.

    Также под ваш лог, автомат создаётся объект в моделях csvlog.models.LogDump. И вы можете импортировать в него данные из логов и работать с ними через вашу ORM. Пожалуй это основной плюс.

    1. python manage.py log_to_base log.csv

    Ну и маленькая рюшечка в нагрузку. Баг репортинг.

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

    Проект очень, очень нуждается в жесткой критике.

    Rating 3.00 out of 5
    [?]

    Tags: , , , ,

   

Recent Posts

Recent Comments

  • Я просто оставлю это тут: ...
  • спасибо...
  • Если вдуматься в каждое слово, то время беСконечно в русском...
  • Спасибо, Евгений, исправленно.P.S.: перехал на диску...
  • за опечатку - спасибо...