gentoo.ru
python
python@conference.gentoo.ru
Воскресенье, 13 марта 2011< ^ >
maksbotan установил(а) тему: Пей тон @ Жуй картон || https://gist.github.com/289467 || Логи: http://tinyurl.com/gentoo-py-logs || "Python's a drop-in replacement for BASIC in the sense that Optimus Prime is a drop-in replacement for a truck."
Конфигурация комнаты
Участники комнаты

GMT+3
[00:19:13] maksbotan вошёл(а) в комнату
[00:24:00] <maksbotan> ТБВ это что?
[00:24:18] <krigstask> Теория Большого Взрыва
[00:24:46] <maksbotan> аа
[00:25:03] <maksbotan> аббревиатуру TBBT я уже запомнил, теперь ещё эта )
[00:35:58] <maksbotan> qnikst: у тебя sphinx стоит?
[00:37:09] <qnikst> это хрень для бд?
[00:37:21] <maksbotan> нет
[00:37:24] <maksbotan> это для доков
[00:37:28] <maksbotan> няшка вполне
[00:37:39] <maksbotan> [I] dev-python/sphinx (1.0.7@04.03.2011): Python documentation generator
[00:37:52] <qnikst> app-misc/sphinx <- этот интереснее
[00:37:54] <qnikst> не стоит
[00:38:03] <qnikst> оба не стоит
[00:38:23] <maksbotan> поставь дев-питон, я там доки почти уже накропал
[00:38:26] <maksbotan> думаю тебе понятней станет
[00:38:55] <qnikst> ну я щас понимаю, как это работает
[00:39:02] <qnikst> я не понимаю зачем так
[00:39:31] <maksbotan> это и я не понимаю )
[00:39:33] <qnikst> хотя этот подход имеет место быть
[00:39:39] <qnikst> но имхо оверхед
[00:39:45] <maksbotan> я просто лучше не придумал
[00:40:04] <qnikst> ммм в питоне функцию с параметрами можно передавать в кач-ве параметра
[00:40:14] <qnikst> хотя можно проще
[00:41:26] <qnikst> ты можешь переделать твой while так, чтобы это была одна итерация возвращающая  ui.ask или ui.error или ui.notify
[00:41:31] <qnikst> кстати можно и проще
[00:41:43] <qnikst> у тебя в ui событие (например ответ)
[00:42:22] <qnikst> посылаешь в db сообщение оно, что-то делает и возвращает результат, который или ошибка или получена инфа или вопрос
[00:42:28] <qnikst> делаем что-то в ui
[00:42:39] <qnikst> при событии опять вызываем db
[00:42:42] <maksbotan> хм, вот так
[00:43:07] <maksbotan> откуда у меня взялась любовь к идиотским архитектурным решениям?
[00:43:17] <qnikst> ну оно не идиотское
[00:43:22] <krigstask> От кое-кого на букву 0
[00:43:30] <maksbotan> krigstask: я только хотел это сказать
[00:43:45] <qnikst> например если бы решатель сам по себе бы что-нить анализировал (параллельно с ответами)
[00:43:52] <qnikst> тогда это был бы отличный вариант
[00:43:59] <maksbotan> хм
[00:44:12] <qnikst> только события типа ui.ask должны бы были быть неблокирующими
[00:44:25] <qnikst> типа запросил инфу и давай себе дальше думать
[00:44:26] <qnikst> =)
[00:44:37] <qnikst> типа такой сервер-решатель
[00:44:39] <maksbotan> =)
[00:45:27] <qnikst> в 239 кстати классная информатика
[00:45:41] <qnikst> там забавный "проект" в 10 классе народу дали
[00:46:19] <maksbotan> какой?
[00:46:31] <qnikst> типа задачка (простенькая), но её надо просто решить, написать всякие удобные варианты ввода данных, примеры данных, потом описать структуры и обосновать почему они там есть, и потом сделать презентацию и доклан
[00:46:34] <qnikst> доклад
[00:46:47] <qnikst> + всякие мелочи, что код должен быть полностью документирован
[00:46:48] <maksbotan> хаха
[00:46:50] <qnikst> а и отчёт ещё
[00:47:00] <qnikst> это всё на порядка 7 оценок
[00:47:08] <qnikst> там такой длинный список требований
[00:47:22] <qnikst> и завершиться всё должно докладом с презентацией
[00:47:34] <qnikst> "проект" на 1 человека
[00:47:57] <maksbotan> о_О
[00:48:00] <maksbotan> вот это уже круто
[00:48:28] <qnikst> задачка то тупая: дан набор точек и одна отдельная (A) выписать все наборы точек, {N1,N2,N3,A} которые образуют параллелогамм
[00:48:49] maksbotan сходу не придумает как решать)
[00:49:02] <qnikst> тупо перебирать и проверять углы
[00:49:15] <qnikst> т.е. перебираешь все A,N1; A,N2
[00:49:21] <qnikst> находишь угол
[00:49:33] <qnikst> потом по все N3 пробегаешь и смотришь совпадают ли
[00:49:50] <qnikst> есть куча проблем с погрешностями вычислений с плавающей точкой)
[00:49:54] <qnikst> но это мелочи
[00:50:03] <maksbotan> =)
[00:50:21] <qnikst> просто подход классный
[00:51:10] <maksbotan> ну да
[00:51:11] <qnikst> там как бы части 1). придумать корректную структуру данных, обосновать её верность, сделать подачу данных интерактивную, сделать загрузку из файла
[00:51:45] <qnikst> 2). написать алгоритм перебора, объяснить корректность, написать эффективный алгоритм,
[00:51:54] <qnikst> 3). сделать отчёт с кучей требований
[00:52:10] <qnikst> за каждый подпункт баллы по которому оценка за пункт
[00:52:17] <qnikst> т.е. "взрослый" подход
[00:52:44] <qnikst> мол подумай что делаешь - обоснуй, улучши если можешь, напиши тестовые файлы, чтобы проверить можно было
[00:52:50] <qnikst> потом сделай отчёт
[00:52:57] qnikst что-то наспамил
[00:53:30] <maksbotan> да ничего
[00:53:31] <maksbotan> )
[00:54:59] <qnikst> надо бы ещё разок проиграть компу в го
[00:56:22] <maksbotan>             variant, c, old_c = self.analysys_state[i] for i in ['variant', 'c', 'old_c']
[00:56:25] <maksbotan> krigstask: вот это ок?
[00:56:44] <qnikst> мой мозг:/
[00:56:47] <maksbotan> хаха
[00:57:26] <qnikst> ща найду весёлый код
[00:57:31] <krigstask> Ну так себе
[00:57:37] <maksbotan> а как бы ты сделал?
[00:58:43] <krigstask> Эту строчку лучше не переписать, нужно в контекст смотреть
[00:59:16] <maksbotan> контекста и нет никакого
[00:59:30] <maksbotan> просто я достаю переменные из словаря, что-то с ними делаю
[00:59:33] <maksbotan> а потом кладу назад
[00:59:45] <maksbotan> типа чтобы это self.analysys_state каждый раз не писать
[01:00:07] <qnikst> tmpByte[i]=(byte)(((value) << (i*8)) >>> 24);
[01:00:11] <qnikst> во
[01:00:13] <maksbotan> штооо?
[01:00:26] <qnikst> это код на яве т.к. я задание не так понял
[01:00:41] <qnikst> получение байта считанного из текстового файла
[01:00:45] <maksbotan> >>> это что?
[01:00:55] <qnikst> безнаковый сдвиг
[01:00:56] <krigstask> Ваще больше-больше
[01:01:10] <qnikst> кстати в jdk почти так же было
[01:01:17] <qnikst> я потом посмотрел
[01:01:32] <qnikst> просто для меня код выше - почти тоже самое
[01:01:56] qnikst осилил код сверху
[01:14:03] <maksbotan> да, архитектор из меня фиговый
[01:14:06] <maksbotan> http://paste.pocoo.org/show/352631
[01:15:23] <krigstask> if you need more than 3 levels of indentation, you're screwed anyway
[01:15:37] <maksbotan> :(
[01:16:25] <maksbotan> настолько плохо?
[01:16:53] <krigstask> Это цитата из Kernel Style Guide
[01:16:57] <krigstask> Подумай над ней
[01:17:10] <krigstask> А я тем временем посплю
[01:17:31] <qnikst> ага и решается выносом очередного уровня в функицю
[01:18:06] <maksbotan> хаха
[01:18:11] <maksbotan> qnikst: а ты что скажешь?
[01:18:49] <qnikst> я ничего плохого пока не заметил
[01:18:55] <krigstask> В такой лапше из if/then/else разбираться сложновато, мягко говоря
[01:20:07] <maksbotan> реально чтоли в функцию вынести
[01:20:36] <qnikst> стоп во флагах лучше смотрелось
[01:21:20] <maksbotan> в смысле?
[01:21:21] <qnikst> т.е. while not stop : ...
[01:21:36] <qnikst> хотя не
[01:23:20] <qnikst> кстати
[01:24:55] <qnikst> actions = {'variant':do_variant, 'stop': do_stop} ;.. try actions[message.variant](message); catch: ...
[01:24:59] <qnikst> не?
[01:26:00] <maksbotan> хм, а логично
[01:26:07] <maksbotan> но надо сначала проверить как это работает )
[01:36:46] <maksbotan> надо же, оно умудрилось повесить отладчик
[01:36:51] <maksbotan> я уже боюсь своего кода
[01:39:57] qnikst спать
[01:40:03] <maksbotan> спокойной
[01:40:21] qnikst вышел(а) из комнаты
[02:32:49] <maksbotan> в общем, приняв упорину я соорудил следующее → http://paste.pocoo.org/show/352666
[02:32:56] <maksbotan> qnikst, krigstask: заценивайте
[03:13:25] maksbotan вышел(а) из комнаты
[10:11:43] maksbotan вошёл(а) в комнату
[11:43:11] maksbotan вышел(а) из комнаты
[12:10:41] qnikst вошёл(а) в комнату
[13:11:11] maksbotan вошёл(а) в комнату
[13:23:25] maksbotan вышел(а) из комнаты: Replaced by new connection
[13:23:35] maksbotan вошёл(а) в комнату
[13:30:32] maksbotan вышел(а) из комнаты: Replaced by new connection
[13:30:42] maksbotan вошёл(а) в комнату
[13:46:26] maksbotan вышел(а) из комнаты
[14:30:45] maksbotan вошёл(а) в комнату
[14:31:11] <maksbotan> qnikst: пинг ^^
[14:58:32] maksbotan вышел(а) из комнаты: Replaced by new connection
[14:58:42] maksbotan вошёл(а) в комнату
[15:08:49] maksbotan вышел(а) из комнаты
[15:09:07] maksbotan вошёл(а) в комнату
[16:09:05] <qnikst> maksbotan: pong
[16:14:55] <maksbotan> ссылочку глянь
[16:15:09] <qnikst> про факториалы?
[16:15:21] <maksbotan> какие факториалы?
[16:15:26] <qnikst> других не вижу
[16:15:46] <qnikst> повтори ссылку плз
[16:16:31] <maksbotan> [02:32:49] <maksbotan> в общем, приняв упорину я соорудил следующее → http://paste.pocoo.org/show/352666
[16:20:32] <qnikst> странно у меня его видно не было
[16:20:33] <qnikst> ща
[16:21:41] <qnikst> что будет если у тебя придёт кривой message type?
[16:21:46] <qnikst> это так, к слову
[16:22:12] <qnikst> а понял
[16:22:14] <maksbotan> это пока не обрабатывается )
[16:22:38] <maksbotan> а нет, обрабатывается
[16:22:40] <qnikst> обрабатывается у тебя exeption
[16:23:04] <qnikst> далее сделай self._running =trueпо дефолту
[16:23:10] <qnikst> while self._running
[16:23:19] <qnikst> и в _do_stop self._running = false
[16:23:26] <qnikst> тогда от ифа избавишся
[16:23:39] <qnikst> который имхо уже не смотрится при текущем подходе
[16:24:04] <maksbotan> логично
[16:24:09] <qnikst> правда в этом случае при stop task_done выполнится
[16:24:18] <qnikst> но тут тебе виднее должно ли это быть
[16:24:31] <maksbotan> ну у меня все-равно .join() нигде не
[16:24:32] <maksbotan> т
[16:25:54] <qnikst> ок
[16:26:07] <qnikst> я правда не понимаю чего тут как
[16:26:10] <qnikst> ща дальше погляжу
[16:27:37] <qnikst> слушай
[16:27:47] <qnikst> у тебя идёт:
[16:27:52] <maksbotan> хаха
[16:27:59] <maksbotan> я думаю я сам скоро перестану понимать
[16:29:16] <qnikst> как ui.ask рабботает?
[16:29:30] <qnikst> общую логику
[16:30:01] <maksbotan> задает вопрос
[16:30:07] <maksbotan> и сразу return
[16:30:27] <maksbotan> когда юзер отвечает, ui модуль делает pend_message(type=answer
[16:30:33] <qnikst> никаких записей в message_queue?
[16:30:42] <maksbotan> а?
[16:31:25] <qnikst> ui.ask задаст вопрос, пользователь отвечает - происходит return и ничего не добавляется в  message_queue, так?
[16:32:04] <qnikst> а не
[16:32:06] <qnikst> туплю
[16:32:24] <maksbotan> ui.ask задает вопрос и ничего не пишет в очередь
[16:32:27] <qnikst> ясно
[16:32:31] <qnikst> норм
[16:32:41] <maksbotan> в очередь пишет колбек в главном треде, его гытыка дергает
[16:33:15] <qnikst> ясно
[16:33:52] <qnikst> плохо конечно
[16:33:56] <qnikst> но ничего
[16:34:02] <qnikst> знаешь что плохо?
[16:34:23] <maksbotan> нет
[16:34:53] <qnikst> то, что у тебя решатель завязан на гуй
[16:35:13] <qnikst> т.е. поидее на каждом шаге он возвращает событие которое должно отразиться в гуе
[16:35:23] <qnikst> (ну и меняет своё состояние)
[16:35:33] <qnikst> в принципе self.ui вобще не нужно
[16:35:45] <qnikst> просто каждый шаг должен возвращать ui.state
[16:35:52] <qnikst> UiState
[16:36:09] <qnikst> а уже гуй должен видеть, что вернулось и творить события, которые хочет
[16:36:10] <qnikst> =)
[16:37:27] <maksbotan> что-то я не въехал )
[16:48:05] <qnikst> смоти
[16:48:11] <qnikst> что у тебя делают методы
[16:48:29] <qnikst> 1). меняют состояние
[16:48:39] <qnikst> 2). вызывают какой-либо self.ui.method
[16:49:21] <maksbotan> да
[16:50:36] <qnikst> если вместо 2го пункта возвращать объект с информацией о том, что хочет решатель
[16:51:03] <qnikst> то ты сможешь: а). отказаться от self.ui б). от вызова методов в). от loop
[16:51:24] <maksbotan> куда возвращать?
[16:53:19] <qnikst> а делать следующее: (в gtkmain)
solverState = solver.doMessage(message);
if ( solverState instanceof AskQuestion):
elif (solverState instanceof ShowResult):
elif (solverState instanceof ShowInfo):
elif (solverState instanceof AAAAAAAAAAAAAAAA):
[16:53:24] <qnikst> это не python way
[16:53:34] <qnikst> но переписать соотвествующе можно :)
[16:54:06] <maksbotan> упорье какое-то
[16:54:23] <maksbotan> я подумаю ещё как это все в один поток запихнуть, идеи кое-какие есть
[16:54:24] <maksbotan> =)
[16:54:30] <qnikst> да тут решение:)
[16:54:37] <qnikst> только аккуратнее записать
[16:54:54] <qnikst> можно и проще если честно )
[16:55:38] <qnikst> но мне лень
[16:55:43] <qnikst> смысл будет тот же
[16:58:32] maksbotan вышел(а) из комнаты: Replaced by new connection
[16:58:42] maksbotan вошёл(а) в комнату
[17:19:55] maksbotan вышел(а) из комнаты: Replaced by new connection
[17:20:05] maksbotan вошёл(а) в комнату
[18:57:26] maksbotan вышел(а) из комнаты: Replaced by new connection
[18:57:36] maksbotan вошёл(а) в комнату
[23:19:04] maksbotan вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!