[00:03:06] slav0nic: на тектонике
[00:03:16] slav0nic: терь 13гб и 295Мб за 15уе
[00:03:25] slav0nic: +анлим траф
[00:28:36] red-agent: hi, bicthez
[00:28:51] red-agent: *a
[00:35:14] pitman: red-agent, привет :-)
[00:35:47] pitman: red-agent, ты помнишь как ты делал мне code review?
[00:43:05] pitman: red-agent, ау :-)
[00:50:19] slav0nic: pitman, это ты там собирался переписывать транспорт для аси?
[00:50:42] pitman: slav0nic, нет
[00:51:02] pitman: slav0nic, у меня была другая задача :-)
[00:51:23] pitman: slav0nic, phileo.sourceforge.nte
[00:51:32] pitman: slav0nic, phileo.sourceforge.net
[00:55:07] slav0nic: шапку модно нарисовали)
[00:55:07] piranha: http://www.cartoonbank.com/assets/1/65979_n.gif
[00:56:56] pitman: slav0nic, да, дизайнер просто молодец :-)
[01:01:32] piranha: мне тож понравилось, кайфовая
[01:02:50] pitman: piranha, там в репазитарии в trunk/src/phileo/images лежит splash.png. Его надо конечно еще дорабатывать...
[01:03:11] piranha: ща зоценим
[01:06:08] piranha: гыгы
[01:06:20] piranha: слегка ржачно :)
[01:06:54] pitman: piranha, ну да :-)
[01:07:05] slav0nic: а у дизайнера хоумпага есть?
[01:07:56] pitman: slav0nic, нет
[01:11:24] red-agent: pitman: доо
[01:11:24] pitman: red-agent, :-)
[01:11:37] pitman: red-agent, так вот! предлагаю тебе бегло ознакомиться с кодом. Я специально ничего не добавлял, а занимался только рефакторингом. Можешь заценить phileo.sourceforge.net
[01:13:53] red-agent: давай завтра
[01:14:00] red-agent: я фильм смотрю
[01:14:09] red-agent: про бермудский треугольник
[01:14:15] red-agent: 4х часовой
[01:14:25] red-agent: вот за хавчиком сходил
[01:14:37] red-agent: все, свалил дальше смотреть
[06:27:16] red-agent: говнецо фильмег
[08:38:46] Mr.Floppy: Всем привет! Как проверить наличие элемента во вложенном списке?
Пример:
a = [0, 2, 5, 4, 6, 3, 1, 7] # "раскрытый" список, можно просто 5 in a
b = [[0], [2, 5], [4, 6, 3], [1], [7]] # а здесь как лучше поступить?
[08:41:29] red-agent: напиши отдельную функцию
[08:44:47] Хрюндель (джангист): for i in a:
if "element" in i:
print "hello world"
[08:45:26] red-agent: ну, если бы ему были известные индексы вложенных сиквенсов - думаю он бы не спрашивал =)
[08:45:59] Хрюндель (джангист): red-agent, а я что индексы использую? я ведь for на все элементы делаю
[08:46:30] red-agent: я в плане того, что глубина вложенности может быть не определена
[08:46:34] Хрюндель (джангист): а..
[08:46:58] Mr.Floppy: Хрюндель (джангист):
lst = [[0], [2, 5], [4, 6, 3], [1], [7]]
print 4 in lst # False
[08:47:22] Хрюндель (джангист): Mr.Floppy, и что?
[08:47:40] Mr.Floppy: Что-то у мне ничего умнее
def flat(lst):
a = []
for item in lst:
for item2 in item:
a.append(item2)
return a
в голову не приходит
[08:47:51] Mr.Floppy: и потом print 4 in flat(lst)
[08:48:28] Хрюндель (джангист): эмм.. а тебе надо элемент достать в котором есть твоя цифра или только проверить есть ли он там вообще?
[08:48:56] Mr.Floppy: мне надо проверить, есть ли элемент во вложенном списке
[08:49:11] Хрюндель (джангист): Mr.Floppy, ну тогда мой способ вроде лучше..
[08:49:15] red-agent: глубина вложенности известная?
[08:49:31] Mr.Floppy: я сейчас вообще генерирую 2 списка - вложенный и обычный
да, известна
[08:49:56] Хрюндель (джангист): a = [ i for i in lst if element in i]
[08:50:00] Хрюндель (джангист): может так?
[08:50:06] Хрюндель (джангист): хотя не
[08:50:44] Хрюндель (джангист): z = [z for i in lst for z in i if element in z]
[08:50:48] Хрюндель (джангист): вот так думаю
[08:51:12] Хрюндель (джангист): red-agent, правильно?
[08:51:37] red-agent: не очень
[08:52:54] Хрюндель (джангист): ну он вернёт не тру конечно или фэлс, но ведь обычной проверкой после if z: можно решить проблему..
[08:53:21] red-agent: он вобще ничего не вернет
[08:53:22] red-agent: =)
[08:53:41] red-agent: семантически - выражение не верно
[08:54:25] Хрюндель (джангист): а что не так? Я вроде книжку даже умную читал про лист компрехеншионс ))
[08:57:13] Хрюндель (джангист): а точно
[08:57:22] red-agent: хреново читал
[08:57:33] Хрюндель (джангист): не ну просто такого не встречалось
[08:57:37] Хрюндель (джангист): в книжке ))
[08:57:54] red-agent: def contains(obj,seq):
for subseq in seq:
if hasattr(subseq,'__iter__'):
if contains(obj,subseq):
return True
else:
if obj is subseq:
return True
return False

lst=[[0], [2, 5], [4, 6, 3], [1], [7,[[[[[[19]]]]]]]]
assert contains(19,lst)
[08:58:06] red-agent: работает с ЛЮБОЙ глубиной вложенности
[08:59:44] red-agent: roughly набросанно правда, но принцип понятен
[09:01:37] Хрюндель (джангист): red-agent, мозг!
[09:04:38] red-agent: def contains(obj,seq):
for subseq in seq:
if hasattr(subseq,'__iter__'):
if contains(obj,subseq):
return True
elif obj is subseq:
return True
return False
[09:04:43] red-agent: вот так лучше
[09:08:24] red-agent: def contains(obj,seq):
for subseq in seq:
if (hasattr(subseq,'__iter__') and contains(obj,subseq)) or obj is subseq:
return True
return False
[09:08:27] red-agent: вот так еще лучше
[09:09:00] red-agent: блять, вот ебучий ворк-стоппер, не тревожте меня больше такой хуйней =)
[09:09:12] Хрюндель (джангист): бугага
[09:09:33] Mr.Floppy: red-agent: хаха, я написал
def inlist(item, lst):
for lev1 in lst:
for object in lev1:
if object == item:
return True;
return False
и успокоился :)
[09:09:52] Mr.Floppy: red-agent: но все равно спасибо, вдруг пригодится
[09:10:32] red-agent: ну, твой вариант - полное говно =)
[09:10:38] red-agent: воппервых из-за ==
[09:10:52] Mr.Floppy: а как надо? :)
[09:11:12] red-agent: вовторых - если елемент будет не вложенным - оно вывалится нахер
[09:11:13] red-agent: я уже показал, как
[09:11:23] red-agent:
def contains(obj,seq):
for subseq in seq:
if (hasattr(subseq,'__iter__') and contains(obj,subseq)) or obj is subseq:
return True
return False
[09:11:34] Mr.Floppy: а мне не нужен произвольный уровень вложенности
[09:12:17] red-agent: ну, это из рода "на тебе автомобиль! нет, я лучше на велосипеде"
[09:13:38] Mr.Floppy: я ничерта не понимаю, что у тебя написано :) ну, типа рекурсивно сама себя вызывает, это я понял, да :)
[09:14:23] red-agent: что там непонятного?
[09:15:05] Mr.Floppy: hasattr(subseq,'__iter__' ?
[09:15:26] red-agent: проверка возвращает ли обьект итератор
[09:15:36] red-agent: т.е. является ли sequenceом
[09:16:19] red-agent: если да - запускается contains на нем (рекурся) и если возвращается True - то во внешней тоже возвращается True
[09:16:35] red-agent: если же нет - проверка является ли обьект тем, что мы ищем
[09:16:50] red-agent: если нет - поехали к следующему элементу
[09:17:21] red-agent: *и
[09:19:37] Mr.Floppy: ладно, но для меня это пока слишком круто :)
а как записать
def inlist(item, lst):
for lev1 in lst:
if item in lev1:
return True;
return False
в "одну строку"?
[09:20:28] piranha: red-agent: а почему не obj in subseq?
[09:20:40] red-agent: piranha: потому, что гладиолусы
[09:20:41] red-agent: =)
[09:20:43] piranha: Mr.Floppy: а мож не надо в одну строку? )
[09:20:51] piranha: red-agent: выёбываешься? )
[09:20:52] xa4a: any( lambda lev1: item in lev1, lst)
[09:20:54] red-agent: список вложенный
[09:20:55] red-agent: =)
[09:21:05] piranha: xa4a: у тебя какие пары? В плане, када можно забирать?
[09:21:19] xa4a: piranha: ну сейчас уже сижу, и до 2-х часов тут
[09:21:23] xa4a: в 14-м корпусе
[09:21:26] piranha: any(item in lev for lev in lst)
[09:21:36] piranha: имхо так лучше ;) без лябды
[09:21:55] piranha: xa4a: гы. Полупары ж есть?
[09:22:09] xa4a: да
[09:22:27] piranha: ок
[09:23:37] xa4a: штатив на 2-й обещает уже быть
[09:24:20] piranha: клёво
[09:24:25] piranha: ну до 2 я просто не успею
[09:30:02] red-agent: piranha: будет работать только при 2 уровне вложенности
[09:30:04] red-agent: xa4a: твой вариант работать не будет вобще =)
[09:30:46] piranha: red-agent: ну да, он же сказал, что его устраивает
[09:30:56] piranha: а твой вариант будет работать заметно дольше - можешь попробовать
[09:31:01] piranha: а он map забыл просто
[09:31:02] red-agent: piranha: overkill - наше фсиё =)
[09:31:10] piranha: overhead
[09:31:35] red-agent: overkill
[09:32:01] red-agent: жаргон - тоже наше фсиё :D
[09:33:24] red-agent: piranha: хотя тут можна еще поспорить, overkill это или bulletproofность, зависит от ситуации
[09:44:56] piranha: NOWAI
[09:44:57] piranha: :)
[09:48:13] Mr.Floppy: а можно ли выводить оператором print без подстановки переноса строки или пробела?
[09:48:28] Mr.Floppy: или sys.stdout только?
[09:48:58] red-agent: print 'no newline',
[09:49:29] Mr.Floppy: ага и выведет 'no newline '
[09:49:36] Mr.Floppy: (с пробелом)
[09:49:52] red-agent: а что тебе не нравится?
[09:50:05] Mr.Floppy: а мне не нужен пробел
[09:50:08] Хрюндель (джангист): print "hello world",
[09:50:21] red-agent: ну, не пиши, если не нужен
[09:50:35] red-agent: /me не доганяет в чем проблема
[09:50:42] Хрюндель (джангист): перенос строке
[09:50:46] Хрюндель (джангист): строки*
[09:50:52] Хрюндель (джангист): вроде это
[09:51:17] red-agent: ну, я уже сказал, про перенос
[09:51:39] Mr.Floppy: print 'a',
print 'b'
дает
'a b'
а не
'ab'
[09:51:53] Хрюндель (джангист): дык а зачем два раза принт?
[09:52:09] red-agent: да, зафиг два раза принт-то?
[09:52:09] Хрюндель (джангист): print a, b
[09:52:29] Mr.Floppy: можно ли так выводить с помощью print или только sys.stdout.write() ?
[09:52:35] Mr.Floppy: red-agent: для примера
[09:52:43] Хрюндель (джангист): print == sys.stdout.write()
[09:52:49] Хрюндель (джангист): это алиас
[09:53:15] Mr.Floppy: скорее print == sys.stdout.write('%s ' % string)
[09:53:27] red-agent: Mr.Floppy: это костыль, а не пример
[09:54:08] Хрюндель (джангист): Mr.Floppy, string.rstrip()
[09:54:10] Хрюндель (джангист): так может?
[09:55:01] Хрюндель (джангист): может у тебя стринги просто с пробелами.. тогда тут только strip'ом обрезать..
[09:55:39] Mr.Floppy: ну хорошо, как тогда записать
ws = [[0], [3, 4, 6], [5, 7, 8], [1, 2], [9]]
for i, line in enumerate(ws):
sys.stdout.write('Fw%d = ' % i)
sys.stdout.write('{V%d' % (line[0] + num))
for item in line[1:]:
sys.stdout.write(', V%d' % (item + num))
print '}'
через принты, чтобы получилось
Fw0 = {V1}
Fw1 = {V4, V5, V7}
Fw2 = {V6, V8, V9}
Fw3 = {V2, V3}
Fw4 = {V10}
?
[09:55:50] Mr.Floppy: ой
[09:56:10] Mr.Floppy: а, не , все нормально
[09:56:25] Mr.Floppy: num = 1, да
[10:01:19] Mr.Floppy: http://dumpz.org/1208/ разница видна
[10:10:28] Хрюндель (джангист): а что такое {V1} это словарь или сэт в питоне 2.6?
[10:11:46] Хрюндель (джангист): после sys.stdout.write('Fw%d = ' % i) запятую поставь
[10:11:56] Хрюндель (джангист): хотя не
[10:13:10] Mr.Floppy: Хрюндель (джангист): это мне нужно в таком виде выводить список
[10:13:47] Mr.Floppy: сверху - код, внизу - вывод
[10:14:03] gigimon: привет
[10:14:41] piranha: вообще конечно писать принты проще
[10:14:50] piranha: и я сам в скриптах тупо ими везде пользуюсь
[10:15:06] piranha: но когда ты пишешь что-то на долгое время, то лучше сначала конструировать строку, а потом полностью выводить
[10:15:18] piranha: тогда меньше вероятность каких-то непоняток
[10:15:37] _Nirdosh_: хм чет опенфайр у меня не очень дружит с конфами
[10:15:38] Mr.Floppy: ну можно сделать алиас какой-нибудь, типа def print_(str): sys.stdout.write(str)
[10:16:03] Mr.Floppy: а можно делать свои операторы?
[10:16:03] piranha: зачем?
[10:16:07] piranha: нет
[10:16:23] Mr.Floppy: кстати, в Python 3 не будет оператора print
[10:16:24] piranha: это получается изменение синтаксиса языка
[10:16:30] piranha: и ура :)
[10:16:37] piranha: _Nirdosh_: а как он вообще? Много рамы жрёт?
[10:16:37] Mr.Floppy: print() будет :)
[10:22:26] _Nirdosh_: piranha: я незнаю как определить много или мало)) а так вродь нормально. я его поставил просто потому что icq-шный транспорт в ejabberd прикрутить не смог, а тут кнопку нажал и работает)
[10:22:35] piranha: ясно :)
[10:35:14] piranha: Droves of developers don't know lots of good tools and techniques. I don't give a rats ass about them. They're not mainstream, they're failstream.
[11:44:03] slav0nic: бля, кто-та меня на баш фигакнул)
[11:52:10] tilarids: кто-нибудь может мне объяснить, где все-таки этот эксепшн проходит?
[11:52:29] tilarids: в мвц какой-то автосалон...
[11:53:23] tilarids: с какой стороны заходить-непонятно...
[12:03:27] Муркт: slav0nic: где?
[12:03:34] Муркт: tilarids: карту же давали
[12:03:56] tilarids: тю, так до мвц я дошел:)
[12:03:56] Муркт: tilarids: павильон номер три, конференц-зал номер 14
[12:04:06] Муркт: это угол, противоположный от метро
[12:04:45] Муркт: я выхожу :)
[12:04:47] tilarids: так написано ж, что тот, кто ближе к метро вход
[12:05:00] Муркт: я вот сейчас смотрю на карту
[12:05:18] Муркт: и там отмечен красным кружком угол, противоположный станции Левобережная
[12:05:28] tilarids: то бишь, покупаешь билет на автосалон и идешь на эксепшн?
[12:05:31] Муркт: нед.
[12:05:57] tilarids: отдельный вход?
[12:06:03] Муркт: наверное
[12:06:10] Муркт: я ж там не был ещё
[12:06:13] Муркт: сейчас только поеду
[12:06:21] tilarids: а
[12:06:45] tilarids: ладно. спасибо!
[12:06:53] Муркт: ок
[12:06:56] Муркт: увидимся там
[12:13:59] tilarids: действительно, по карте совсем другой вход
[12:14:05] tilarids: дальний от метро
[12:17:17] tilarids: и туда вполне пускают
[12:33:23] Хрюндель (джангист): Как будет что то типа "заведение" на английском
[12:33:59] Хрюндель (джангист): Общественное или учебное
[12:35:45] Хрюндель (джангист): Institution походу
[12:36:18] mimmuror: establishment


[15:03:41] slav0nic: аюсь на эксепшине сейчас кто-то снимает видео)
[15:05:33] _lorien: аюсь?
[15:05:43] slav0nic: *надеюсь
[15:06:23] _lorien: silent_bot, тоже не пошёл на exception, что ли?
[15:10:20] Большой Лис: :)
[15:11:23] Большой Лис: http://www.djangosnippets.org/snippets/772/
[15:11:25] Большой Лис: хехе
[15:11:28] Большой Лис: прикоольно
[15:11:59] Большой Лис: вообще идея сама граватара очень прикольная
[15:31:15] Хрюндель (джангист): Большой Лис, прочитал вроде что такой Граватар, но так и не понял чем он от аватара отличается..
[15:36:19] _lorien: !google what is gravatar
[15:37:24] _lorien: Хрюндель (джангист), это сервис аваторов, ты регистрируешься, привязываешь в аккаунте аватар к email'у. Затем, сторонний сайт может обратиться к граватару и попросить аватара для email
[15:38:04] Хрюндель (джангист): _lorien, а.. хитро
[15:39:21] Большой Лис: даже не для email-а а для md5-хэша, email-f
[15:39:23] Большой Лис: а
[15:54:45] Большой Лис: http://www.gravatar.com/avatar.php?size=80&;gravatar_id=48491f8c7ff8dd92e4efa461842c8119
[15:54:50] Большой Лис: типо вот такого :)
[16:00:44] Хрюндель (джангист): Большой Лис, а нету сайта граватаров не на пхп? ))
[16:55:00] _lorien: /me хочет доклад про newforms делать, есть идеи чего рассказать?
[17:07:58] Хрюндель (джангист): _lorien, ога, кастом фейлд это раз, ну и все варианты форм с моделями.. form_from_model, form_from_instance или как там
[17:38:33] slav0nic: http://www.csh.rit.edu/~jon/projects/pip/index.php
писец
[17:45:26] Typhon: в ру_Похапе :-)
[18:00:01] Большой Лис: slav0nic, ужос
[18:00:31] Большой Лис: в худьшем кошмаре не могло превидится, интерпретатор питона, написанный на пхп
[18:00:32] Большой Лис: :D
[18:03:11] slav0nic: xapia юзал кто?
[18:03:36] slav0nic: xapian
[18:04:35] Большой Лис: я
[18:04:43] Большой Лис: в паре с djapian
[18:04:46] Большой Лис: охуенная штука
[18:09:25] slav0nic: под какой субд?
[18:09:48] Большой Лис: под любой
[18:10:00] Большой Лис: оно создаёт собственный индекс в виде файлов
[18:10:05] slav0nic: просто в постгресе фултекст поиск быстрее или нет?
[18:10:12] slav0nic: я в курсе
[18:10:25] Большой Лис: tsearch2 я не юзал
[18:10:26] slav0nic: в джаге тикет на фуллтекст в далёкой жопе
[18:35:41] Большой Лис: у кого есть фонт "Agenda Black" ?
[18:42:11] maniac: Exception был тупоиохуенным
[18:42:32] _lorien: тупой хуйнёй?
[18:42:40] Svoloch: а шо там было? ато я не попал
[18:42:44] maniac: наоборот
[18:42:59] _lorien: хуёвой тупотой? ^_^
[18:43:02] maniac: twisted, django
[18:43:18] _lorien: чо про джангу грили7 )
[18:43:20] maniac: а потом япошел гулять по киеву
[18:44:07] maniac: Иван Сагалаев раздал мастерклассом по встраиванию джанги в пайлонс
[18:44:08] Svoloch: а бухаловка где?
[18:44:12] maniac: хз
[18:44:28] maniac: я сижу в ""антресоли в киеве
[18:44:29] Svoloch: хоть с нараодом пообщался бы
[18:45:00] maniac: КТО-ТО ХОЧЕТ МЕНЯ ПОТРОГАТЬ?
[18:45:20] Большой Лис: хача хочет
[18:45:29] Большой Лис: он обычно всех трогает, палочкой
[18:45:29] _lorien: !google хача
[18:45:31] Большой Лис: :)
[18:45:32] maniac: 50% чуваков тупо задроты
[18:45:51] maniac: там не о чем особо общаться
[18:45:57] Большой Лис: maniac, прекрати нас зомбировать словом "тупо", это тупо :D
[18:46:02] maniac: хачу я видел
[18:46:05] Svoloch: maniac: остальная половина куда направилась?
[18:46:08] maniac: он смищной
[18:46:15] maniac: хз
[18:46:41] maniac: сидят наверное слушаю доклад про утечки памяти
[18:47:10] Svoloch: а чё есчё не кончилось? o_O
[18:47:26] maniac: хз
[18:47:35] maniac: я раньше ушел
[18:51:28] Svoloch: я тупо припёрся, а точные координаты куда ити забыл записать, да есчё и мобилу забыл.... долго ходил вокруг в поисках ориентировочной вывески "exeption08", так и не увидел... поехал домой
[18:51:55] _lorien: мде :-/
[18:52:07] maniac: зря
[18:52:17] Svoloch: сам знаю что зря
[18:52:21] maniac: там за автовыставкой
[18:52:57] maniac: у меня есть беглый конспект доклада про джанго
[18:53:14] Svoloch: вход был вроде 25 грн
[18:53:24] Svoloch: так я тудой не заходил
[18:53:27] maniac: бесплатно
[18:54:46] Svoloch: рядом был служебный вход, так там я тоже не увидел ориентировочной надписи и тоже не заходил
[18:56:29] Svoloch: это уже дома по карте посмотрел
[19:03:36] Svoloch: а вообще, мне интересен только третий мастеркласс
[19:09:43] Svoloch: блин, а на карте которая пригла по мылу совсем другом месте вход показан
[19:46:28] _lorien: А подскажите, у меня в etch при установке python2.5 ставится также 2.4 и он доступен по умолчанию командой python. Как бы дефолтным py2.5 сделать?
[19:55:27] pit: _lorien: симлинк перебей
[19:55:44] _lorien: это не тру решение какое-то
[19:55:58] _lorien: ручками, понятное дело, можно что угодно сделать
[19:55:58] pit: у тя ОС какая
[19:56:11] _lorien: debian etch
[19:57:28] pit: если ты посмотриш .. то система и ссылается через симлинк на 2,4
[19:58:13] _lorien: и?
[19:58:29] _lorien: почему система сделал python2.4 дефолтным? Я хочу 2.5
[19:58:30] pit: удали старый симлинк и задай новый
[19:58:43] _lorien: гм, я же выше писал
[19:58:43] pit: ln -s
[19:58:49] _lorien: _lorien: это не тру решение какое-то
_lorien: ручками, понятное дело, можно что угодно сделать
[19:59:06] pit: да я читал это
[19:59:20] pit: в дебиане много зависимостей на 2.4
[19:59:54] _lorien: Я так понимаю, что etch - это stable сейчас? Возможно, в testing python2.5 дефолтный?
[20:00:32] pit: e vtyz ahzirf vyt ghjot
[20:00:39] pit: у меня фряшка мне проще
[20:00:40] pit: :)
[20:01:30] _lorien: я решил на сервере debian юзать, после того как не смог собрать одну python либу, которая на linux нормально работала )
[20:01:52] pit: порты не пробывал обнавлять :)
[20:02:03] _lorien: в портах этой утилиты не было
[20:02:29] pit: хм а она в ручную собиралась ?
[20:02:34] _lorien: да
[20:02:53] _lorien: ну как в ручную... через Makefile идущий в комплекте )
[20:03:04] _lorien: а, не через setup.py :-)
[20:03:13] pit: тарбол линуховый ?
[20:03:17] _lorien: в обчем, она собиралась криво через этот setup.py
[20:03:24] _lorien: что такое линуховый тарболл?
[20:03:35] pit: исходный код
[20:03:54] _lorien: не, там были упоминания фри в нём
[20:04:00] pit: .tar.tgz
[20:04:10] _lorien: .tar.gz
[20:04:29] pit: опечатолся
[20:05:23] pit: странно .. зависимости какие просил ?
[20:05:31] _lorien: бля
[20:05:43] _lorien: мне этот пакет уже неважен )
[20:05:57] _lorien: я не просил помогать мне собирать пакет )
[20:06:14] pit: :)
[20:06:36] pit: мне просто интересно .. тк у меня проблем на сборке обычно нет
[20:07:52] _lorien: http://pypi.python.org/pypi/processing
Вот это у меня на фре криво работало. Я уже даже не помню, что именно, какие-то функции были недоступны после сборки. Хочешь - собирай, запускай, только не спрашивай у меня больше ничего про этот пакет ))
[20:08:52] pit: /me чувствует что раздражает чуваков
[20:08:58] pit: :)
[20:10:22] Хрюндель (джангист): pit, он просто выёбывается.. ему даже нечего рассказать про ньюформс ))
[20:11:01] pit: :) прикалол
[20:59:18] pit: !google SMS smtp gate
[20:59:57] pit: !google SMS free smtp
[21:02:16] pit: !google irc to sms
[21:02:16] _lorien: !google порно секс шлюхи
[21:02:52] _lorien: silent_bot, порно секс шлюхи
[21:02:59] _lorien: тьфу, не то, ладно..
[21:03:06] Большой Лис: !google шлюхи и блэк джек
[21:03:14] _lorien: !google порно секс шлюхи
[21:03:28] _lorien: !google python секс
[21:03:35] Большой Лис: :D
[21:04:13] _lorien: !google порно python
[21:04:17] _lorien: =)
[21:07:06] _lorien: http://www.rambler.ru/news/events/fire/12796394.html
[22:58:23] _lorien: не пойму, делаю authenticate кастомным бэкендом, потом login, делаю редирект и оказываю неавторизованным :-(
[22:58:56] _lorien: authenticate возвращает юзверя, которого я потом логиню через auth.login...
[23:05:49] Хрюндель (джангист): а login сам редирект должен делать вроде
[23:06:22] Хрюндель (джангист): а не
[23:20:49] (ZioN,): подскажите, как проверить есть ли ключь в request.META :)
[23:22:54] Большой Лис: (ZioN,), if 'SOME_COOL_KEY' in request.META
[23:23:26] (ZioN,): спс
[23:35:48] Mr.Floppy: Всем привет! А нет ли в питоне, какой-нибудь функции или типа того, чтобы в цикле while не писать i+=1 ? Мне кажется, эта запись какая-то "непитоновская" :) Или как лучше организовать цикл с неизвестным количеством итераций, в котором приходится обращатся к i и i-1 элементам списка? У меня так:
i = 1
while True:
...lst[i-1]...
...lst[i]...
if... break
i += 1
[23:38:16] _lorien: офигеть, ошибка была в том, что я в авторизационном бэкенде у метода get_user забыл прописать аргумент self...
[23:39:15] _lorien: Mr.Floppy, itertools тебя спасут
import itertools
counter = itertools.count(0)
while True:
print counter.next()
[23:39:33] pitman: _lorien: только хотел сказать :-)
[23:39:50] Mr.Floppy: _lorien: Во, спасибо, чувствовал что существует менее корявое решение :)
[23:40:08] pitman: _lorien: можно написать простейший классик, с __iter__ и пихнуть в for
[23:40:36] pitman: _lorien: for понимает iter протокол и работает быстрее while
[23:40:38] _lorien: ну или менее многословное, но костылявое:
for x in xrange(99999999999):
print x
[23:41:08] pitman: _lorien: не то, можно остановить for по эксепшену StopIteration
[23:41:14] Mr.Floppy: А если программа потребует более 99999999999 циклов? :)
[23:41:34] _lorien: бля... при чём тут я, я не спрашивал, как итерировать по циклам )
[23:41:48] pitman: Mr.Floppy: попробуй реализовать простой __iter__()
[23:41:49] _lorien: Mr.Floppy, ну я ж говорю, костылявое
[23:42:02] pitman: Mr.Floppy: и можешь использовать for
[23:43:03] pitman: Mr.Floppy: __iter__ должен возвращать итератор. У которого есть метод next(). Когда сработает твой if то он скажет raise StopIteration().
[23:43:20] Svoloch: можно сделать итератор, который возвращает самого себя
[23:43:26] _lorien: Ха, чо-то я протупил
[23:43:40] _lorien: for x in itertools.count(0):
# do what you want
и всё )
[23:43:51] pitman: Svoloch: можно, но тогда будет one-shot класс
[23:44:17] pitman: Svoloch: т.е. два раза instance через for не пропустишь
[23:44:28] Svoloch: можно и без классов, через поля переменной
[23:44:43] Svoloch: или я с javascript путаю?
[23:45:12] Mr.Floppy: с другой стороны, был элементарный счетчик, а мы тут для него классы пишем и модули подключаем :) а стоит ли?
[23:45:24] pitman: Mr.Floppy: класс очень простой
[23:45:37] _lorien: эээммм, зачем что-то писать, чем itertools не устраивает?
[23:46:05] pitman: _lorien: Ну к тому, что можно без while обойтись если он не нравится
[23:46:14] _lorien: pitman, не надо while никакого
[23:46:23] _lorien: for x in itertools.count(0):
[23:46:26] _lorien: вот всё, что надо
[23:46:46] pitman: _lorien: выход по break?
[23:47:01] _lorien: не понял вопроса
[23:47:39] Mr.Floppy: _lorien: да, выходить-то из цикла как?
[23:48:02] _lorien: sys.exit(), break ну или сегфолт замутить как-нить
[23:48:05] pitman: _lorien: можно ноль явно не задавать
[23:48:32] pitman: _lorien: а можно по StopIteration :-)
[23:48:47] pitman: Mr.Floppy: вобщем, много способов отрефакторить
[23:49:00] pitman: Mr.Floppy: главное -- это читабельность
[23:49:35] Mr.Floppy: запись-то так красии, а в чем преимущества данного метода (с itertools) над while True: i+=1?
[23:50:36] _lorien: pitman: _lorien: а можно по StopIteration :-)
оно убьёт программу
[23:50:47] pitman: _lorien: ????
[23:50:51] _lorien: т.е. аналогично sys.exit() =)
[23:51:01] pitman: _lorien: по StopIteration мы выйдем из for
[23:51:15] pitman: _lorien: for понимает iter протокол
[23:51:18] _lorien: import itertools

for x in itertools.count():
print x
raise StopIteration()

print 'asdf'

[23:51:25] _lorien: у меня это не печатает 'asdf'
[23:51:33] pitman: _lorien: не так
[23:52:00] _lorien: pitman, у меня просьба, не пиши мой ник 10 раз подряд, когда пишешь в конфу, у меня гажим на это звуки издаёт и меня это бесит )
[23:52:11] pitman: :-)))
[23:52:17] Mr.Floppy: Кстати, а можно ли как-нибудь из внутреннего цикла прекращать внешний? Сходу так не вспомню, зачем нужно было, но было как-то так:
for ...:
for ...:
break # а тут надо выйти из первого for
[23:52:40] _lorien: это вроде б тока в php так можно =)
[23:52:49] _lorien: там был аргумент у оператора break
[23:53:04] _lorien: или не оператора... а как break правильно называется, хз
[23:53:10] _lorien: управляющая конструкция
[23:53:11] pitman: лориен, надо реализовать простейший итератор и внего пихнуть в него логику с индексами
[23:53:34] _lorien: pitman, а ну, конечно... можно... только нахуйа o_O
[23:53:41] _lorien: itertools.count + break, что ещё надо )
[23:54:50] pitman: удобство iter протокола в том, что его понимают многие statements в питоне и остановка происходит по эксепшену
[23:55:11] pitman: этот протокол как замена индексирования
[23:55:32] Mr.Floppy: Думаю можно for'ы обернуть в функцию и вместо break делать return <объект>..
[23:55:37] pitman: поэтому когда есть удобный итератор, то кол-во кода уменьшается
[23:56:20] pitman: Mr.Floppy: не играет смысла.
[23:56:55] Mr.Floppy: а как тогда? [p.s не имеет смысла, не играет роли]
[23:57:09] pitman: Mr.Floppy: ну да
[23:57:31] pitman: попробуй ради интереса написать простой итератор
[23:57:47] pitman: и пихни туда логику управления индексами
[23:58:27] pitman: очистишь основной код цикла от лишнего мусора счетчиков
[23:59:19] Mr.Floppy: помню, на паскале я как-то извращался (синтаксис Python)
for ...: # 1
for ...: # 2
if ..:
stop = True
break # выходим из 2
if stop:
break # из 1
Вот так %)