[00:00:09] gigimon: круто писать бота для того, что даже не видел
[00:00:27] Большой Лис: гыыы
[00:00:44] Большой Лис: так это казлы которые дают вручную заполнять чужие каптчи
[00:00:51] Большой Лис: а помто срут фкаменты
[00:00:58] Большой Лис: (в лучшем случае)
[00:01:05] xa4a: хм..
[00:01:15] Большой Лис: и ебут моск типо ща дадут 0.02 wmr
[00:01:17] Большой Лис: гыгы
[00:01:50] Большой Лис: бля
[00:02:01] Большой Лис: ща я запущю в цикле постить какуюнибудь хуйню :D
[00:02:08] Большой Лис: насру им в базу хорошеничко
[00:02:10] Большой Лис: хыхы
[00:02:55] vip666vip: Если зайти по такой ссылке в опере http://www.rublik.com/index.php?page=prize&prizePurse=R256361161837 она загружается как надо а если загрузить страницу питоном то совсем другая грузится
[00:03:11] xa4a: user-agent
[00:03:41] xa4a: https://xa4a.org.ua/hg/hgwebdir.cgi/collecting/file/628293615875/main.py может это тебе чем-то поможет
[00:04:37] vip666vip: xa4a> user-agent я менял тоже самое
[00:04:55] xa4a: других заголовков ещё, можд
[00:05:09] xa4a: + реферер для картинки
[00:05:23] xa4a: если заголовки расставишь правильно - отличить невозможно
[00:26:04] Typhon: http://vpleer.ru/index.php?q=%CA%EE%EC%E1%E0+%C1%E0%EA%F5
[00:26:16] Typhon: "православие въ северной корееъ"
[01:35:50] Typhon: !google python ТОЭ
[01:46:21] !tmp~: други, человеки, питонеры, товагищи, студенты, рабочие, программеры, как вас еще
[01:46:24] !tmp~: всем привет
[01:46:41] !tmp~: никто мне не напомнит в двух словах че такое yield, не посылая в гугл?)
[01:47:27] !tmp~: в гугле я уже был
[01:47:30] !tmp~: он мне даже ответил
[01:47:36] slav0nic: для генераторов штука
[01:48:03] !tmp~: slav0nic, я не могу описать охватившие меня при виде этого ответа эмоции
[01:48:18] !tmp~: волна благодарности и еще большего непонимания %))
[01:48:47] !tmp~: ф принципе это я понимал и раньше, но конкретно не догнал, чо именно делает
[01:48:58] slav0nic: In [1]: def foo():
...: for i in xrange(10):
...: yield i
...:
...:
In [3]: print foo()
<generator object at 0xb789bb6c>
In [4]: for i in foo(): print i
...:
0
1
2
3
4
5
6
7
8
9
[01:49:02] slav0nic: лан я спать
[01:49:26] slav0nic: http://www.dabeaz.com/generators/ вчерашнее чтиво
[01:49:38] !tmp~: о_О
[01:49:43] !tmp~: кажеца понял
[01:49:49] !tmp~: slav0nic, спасибо, снов))
[09:14:05] _lorien: red-agent, а можно настроить eclipse, чтобы при инкрементальном поиске не надо было нажимать два раза ctrl+j в конце файла, чтобы поиск продолжился с начала файла?
[09:17:43] red-agent: хз
[09:17:52] red-agent: там есть помоему в диалоге поиска
[09:17:58] red-agent: я жрать свалил
[09:19:21] _lorien: дык, инкрементальный поиск - это бездиалоговый поиск
[09:32:15] red-agent: пиздец, странный день. проснулся с не хуевом настроении, первый раз в год, вкусно пожрал
[09:32:32] red-agent: поубирал срач на столе
[09:32:41] red-agent: чтобы это значило, пиздец уже близок?
[09:33:20] Jekel: ога
[09:33:27] Jekel: хоккей, евровидение
[09:33:29] Jekel: пиздец скоро
[09:47:24] tek: Кто из вас сейчас сидит на wsgi ?
[09:47:41] tek: покажите пожалуйста содержимое файла django.wsgi
[09:48:40] Большой Лис:
import sys, os
import os.path
sys.path.append('/path/to/proj)
os.environ['DJANGO_SETTINGS_MODULE'] = 'proj.settings'
from django.core.handlers.wsgi import WSGIHandler
application = WSGIHandler()
[09:48:56] tek: thx
[09:49:05] Большой Лис: http://hg.piranha.org.ua/byteflow/file/459e0048b9cd/django.wsgi
[09:50:37] red-agent: ' пропущена
[09:50:48] red-agent: sys.path.append('/path/to/proj')
[09:51:36] _lorien: import sys, os тоже не тру
[09:51:46] red-agent: нормально
[09:51:50] _lorien: и нафиг import os, а затем import os.path
[09:52:02] _lorien: PEP8 говорит, что ненормально
[09:52:06] red-agent: для os.environ
[09:52:14] _lorien: ну я и говорю
[09:52:18] red-agent: _lorien: pep8 говорит - не рекомендуется
[09:52:22] _lorien: зачем делать import os.path если уже был import os
[09:52:27] tek: =\
[09:52:35] red-agent: а дзен говорит - DRY
[09:52:57] red-agent: поэтому я лучше напишу import a,b,c чем
import a
import b
import c
[09:53:14] _lorien: а я скажу, потом, что это не тру
[09:53:34] red-agent: и будешь послан =)
[09:53:56] red-agent: не нравится - пишы пицоттыщь импртов
[09:54:06] _lorien: дык я и пшу
[09:54:10] Большой Лис: _lorien, ты! бухтелка блин :)
[09:54:11] _lorien: в чём проблема то? )
[09:54:15] red-agent: лучше посрать pep, чем dry
[09:55:03] tek: что-то не катит, выбивает - Internal Server Error, почти завелся пример от пираньи, там уже джанго кричал что-то..
[09:55:14] _lorien: tek, потому что у тебя не тру код
[09:55:20] _lorien: ты против pep8 пошёл
[09:55:30] _lorien: Гвидо тебя накажет, когда на небеса попадёт
[09:55:44] tek: http://uzhgorod.in/
[09:55:47] _lorien: и red-agent само само собой )
[09:55:53] red-agent: мда
[09:55:55] _lorien: * red-agent'a
[09:55:55] tek: =)
[09:56:13] tek: ой блин
[09:56:21] tek: хотя
[09:56:22] red-agent: pep8 - лишь конвенционное соглашение
[09:56:31] red-agent: и никто не обязан ему следовать
[09:56:35] _lorien: я драчу на pep8, pep8 мой кумир
[09:56:49] _lorien: о... pep8... я тебя люблю
[09:57:02] _lorien: все кто тебя не уважает - будут наказаны и сгорят в пламени гиенны
[09:57:03] Большой Лис: tek, sys.path у тебя там не дотягивает где то :)
[09:57:15] tek: sys.path.append('/path/to/proj')
[09:57:18] tek: это типа?
[09:57:41] _lorien: tek, смотри в error log
[09:57:48] _lorien: можед, там чо есть
[09:57:50] red-agent: _lorien: каждый дрочет - как хочет
[09:57:51] Большой Лис:
sys.path.append('/path/to')
sys.path.append('/path/to/proj')
[09:57:58] Большой Лис: или settings.py подрихтуй
[09:58:00] _lorien: red-agent, вот я и дрочу на пеп8
[09:58:05] _lorien: red-agent, какие проблемы? )
[09:58:15] red-agent: проблемы видимо у тебя =)
[09:58:25] red-agent: не я же тут с пеной у рта трясусь над пеп8 :D
[09:58:28] _lorien: sys.path.append('/path/to/proj)
os.environ['DJANGO_SETTINGS_MODULE'] = 'proj.settings'
кстати, это неравильно
[09:58:48] Большой Лис: tek, ROOT_URLCONF = 'urls'
[09:58:53] _lorien: если append('/path/to/proj')
то
надо просто os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
[09:58:58] red-agent: тем более, что pep8 в основном регулирует синтаксический регламент, а не семантический
[09:59:36] _lorien: red-agent, да я ваще дрочу на pep8, pep8 мой кумир
[09:59:45] _lorien: ояебу, пеп8, как я тебя люблю
[09:59:49] red-agent: ты еще и повторяешся =)
[10:00:17] _lorien: ради пеп8 я готов повториться хоть десятикратно
[10:00:21] _lorien: ах, милый пеп8
[10:00:22] tek: Большой Лис: !!!!
[10:00:36] Большой Лис: шо?!
[10:00:37] tek: tek: оно оно, теперь все ок, спасип
[10:01:03] Большой Лис: ImproperlyConfigured at /mysite/admin/
You'll need to put 'django.contrib.admin' in your INSTALLED_APPS setting before you can use the admin application.
[10:01:04] Большой Лис: ;)
[10:01:10] tek: Пирарья об этом умолчал на своем блоге =)
[10:02:31] tek: апач нужно перегружать всегда после внесенных изминений в settings ?
[10:02:53] _lorien: там можно как-то touch делать на wsgi файл, тока надо mod_wsgi настроить
[10:03:23] _lorien: !google mod_wsgi reload touch
[10:04:12] tek: thx )
[10:04:28] Большой Лис: tek, если допишеш в параметрах wsgi демона
WSGIScriptReloading On
WSGIReloadMechanism Process
то пергружатся будет путём
$ touch script.wsgi
[10:04:52] _lorien: piranha, бросай emacs, тут в eclips есть клёвая штука: рефакторинг кода: я сегодня так кусок кода в отдельную переменную вырефакторил
[10:05:07] tek: Большой Лис: кул, спс, сейчас сделаю
[10:05:31] piranha: _lorien: http://rope.sf.net/
[10:05:43] piranha: внимательно посмотри, там и для вима есть плагин
[10:06:15] piranha: tek: апач надо релоадить всегда, кроме изменений в статических файлах и .htaccess
[10:06:30] piranha: tek: только не restart, а reload
[10:06:43] piranha: tek: в каком посте? Давай я допишу :)
[10:06:54] _lorien: If using daemon mode, with any number of processes, and the process reload mechanism of mod_wsgi 2.0 has been enabled, then all you need to do is touch the WSGI script file, thereby updating its modification time, and the daemon processes will automatically shutdown and restart the next time they receive a request.
а как же это?
[10:07:02] piranha: а
[10:07:03] tek: =)
[10:07:13] tek: piranha: http://piranha.org.ua/blog/2007/10/05/apache--modwsgi--django/
[10:07:16] piranha: ну да, если ты включил механизм и сделал touch django.wsgi - то он сам сделает reload
[10:07:33] piranha: этого процесса вроде
[10:07:40] piranha: _lorien: но по сути это ж один хрен
[10:08:11] _lorien: ну, я к тому, что фраза "апач надо релоадить всегда" не совсем верна
[10:08:17] _lorien: а
[10:08:35] _lorien: чо прям весь апач релоадится?
[10:08:44] piranha: нет
[10:08:46] piranha: )
[10:08:51] piranha: но механизм тот же
[10:09:11] piranha: _lorien: ты не отвлекайся, иди про rope читай :))0
[10:10:42] _lorien: да я как-то заходил на его страницу, там многабукв было
[10:12:07] Большой Лис: да, шо то наврал piranha
[10:12:12] Большой Лис: про reload то
[10:12:14] Большой Лис: ;)
[10:13:00] piranha: _lorien: а на странице эклипса букв мало? )
[10:13:11] Большой Лис: что бы сделать touch права рута не нужны, а что бы апач релоаднуть...
[10:13:14] red-agent: бля, прекращайте эту хуйню
[10:13:22] red-agent: опять щас разведете холивар и флейм
[10:13:33] piranha: red-agent: о, ты с нами? )
[10:13:44] _lorien: бгы
[10:13:50] _lorien: а чо, молчать сидеть шо ли? )
[10:13:59] piranha: _lorien: странный чувак, скажи?
[10:14:02] red-agent: да просто подзаебало уже =)
[10:14:12] piranha: слабакЁ!
[10:14:23] red-agent: и вобще, я тут сижу в страхе
[10:14:43] red-agent: седня встал в хорошем настроение, вкусно пожрал, коннект не оборвался, jabber.org не упал
[10:14:49] red-agent: прям аж блядь чувствую какой-то подвох
[10:14:53] piranha: гыг
[10:15:00] Большой Лис: %)
[10:35:22] pitman: Привет всем. Не знаю как разрешить следующую проблему. Есть проект с иерархией папок. Есть папка gui, в которой есть еще продпапки (views, controllers). В views находится mainwindow.py и frame.py. Я хочу в gui.__init__.py прописать from project.gui.views.mainwindow import MainWindow, чтобы в коде можно было просто ссылаться project.gui.MainWindow, но если в самом mainwindow.py сказать from project import gui, то выпадет эксепшн, потому что на момент интерпретации этой строки import project.gui еще не закончился. Выход здесь -- использовать в mainwindow.py -- import frame. Но я хочу использовать абсолютный путь, так как при import frame в будущем будет вначале искать в стандартной библе и потом только в домашней папке проекта. Как быть?
[10:35:54] _lorien: пипец, многабукв =)
[10:36:03] pitman: _lorien: накипело :-)
[10:36:18] _lorien: ты можешь добавить в sys.path родительскую директорию и делать import как ты хочешь, если я прально понял, о чём ты
[10:36:56] _lorien: кстати, разве не наоборот? Разве сначала не в текущей директории ищет?
[10:37:06] pitman: _lorien: сейчас да
[10:37:25] pitman: думаешь почему ввели relative import?
[10:37:42] pitman: потому что в будущем вначале будет искать в стандартной библе
[10:37:51] _lorien: !google python relative import
[10:37:56] pitman: во-во
[10:38:22] pitman: Но, relative import по каким-то причинам не рекомендуется в PEP8
[10:39:00] wiz: суёшь свой проект весь в "стандартную библу" и импортируешь всё что хочешь
[10:39:10] pitman: wiz: тоже не выход
[10:39:18] wiz: это почему же?
[10:39:24] pitman: не хочу
[10:39:28] wiz: гхм
[10:39:31] wiz: ссзб
[10:40:02] _lorien: pitman, не понял, тебе надо или НЕ надо, чтобы импортировался локальный foo?
[10:40:29] pitman: _lorien: мне надо обойтись без import frame
[10:40:45] pitman: _lorien: тоесть хочу использовать абсолютные пути
[10:41:09] wiz: билять... суёшь свой проект весь в "стандартную библу" и импортируешь всё что хочешь по абсолютным путям
[10:41:38] pitman: wiz: да не хочу я. У меня standalone desktop приложение. Не хочу и все
[10:41:47] wiz: и хули что оно десктоп?
[10:41:48] piranha: дык а в sys.path повесить первым его?
[10:42:07] pitman: piranha: но это как-то некрасиво
[10:42:35] wiz: тут явно где-то ошибка
[10:42:38] wiz: подозреваю что в ДНК
[10:42:51] pitman: wiz: подозреваю, что манерам тебя не учили
[10:43:19] wiz: а кого-то не учили читать и выражать свои мысли
[10:43:32] pitman: wiz: без комментариев
[10:44:01] _lorien: pitman: _lorien: мне надо обойтись без import frame
pitman: _lorien: тоесть хочу использовать абсолютные пути
что это значит? ) Как это "использовать абсолютные пути"?
[10:44:20] pitman: _lorien: project.module1.module2
[10:44:20] _lorien: Это тебе руби надо юзать, там насколькоя помню, можно по абсолютным путям импортировать
[10:44:29] _lorien: piranha, и в чём проблема?
[10:44:36] _lorien: тьфу, не тудда )
[10:44:56] _lorien: piranha, пихай project в sys.path и импортируй из него, что угодно
[10:45:02] piranha: _lorien: хорошо
[10:45:06] piranha: _lorien: я так и делаю
[10:45:08] _lorien: блин =)
[10:45:09] piranha: :))))
[10:45:18] piranha: ну ты это и сам знаешь, правда :)
[10:45:51] pitman: _lorien: нет проблем, пока я не хочу сделать упрощение. А именно, в gui.__init__.py прописать from project.gui.app import App
[10:45:51] piranha: pitman: это нормально, самый простой выхо
[10:45:54] piranha: *выход
[10:46:20] pitman: _lorien: чтобы можно было говорить gui.App
[10:46:22] _lorien: pitman: _lorien: нет проблем, пока я не хочу сделать упрощение. А именно, в gui.__init__.py прописать from project.gui.app import App
положи деректорию, в которой находится project в sys.path
[10:46:43] _lorien: а
[10:46:51] _lorien: ээ
[10:46:52] pitman: _lorien: да это и не нужно
[10:47:03] _lorien: сам себя что ли импортировать хочешь? o_O
[10:47:30] _lorien: в gui.__init__ напиши просто from app import App
[10:47:42] pitman: _lorien: вот!
[10:48:07] pitman: _lorien: в этом и есть мое раздумие. Я не хочу так писать. Потому что хочу следовать PEP8
[10:48:17] _lorien: гм, а что в pep8 по этому поводу пишут?
[10:48:33] mishok13: а пеп8 про импорты вообще ничего не говорит
[10:48:37] mishok13: (вроде бы)
[10:48:55] pitman: _lorien: а PEP8 пишет что не юзайте relative import, а вместо этого юзайте полные пути
[10:49:01] mishok13: ну кроме как однострочных импортов и прочего
[10:49:13] mishok13: ага, вижу
[10:49:25] mishok13: pitman, пеп-8 только рекомендация
[10:49:39] mishok13: если ты считаешь, что тебе удобнее сделать относительный импорт
[10:49:42] pitman: mishok13: я хочу использовать style guide
[10:49:43] mishok13: то делай его
[10:49:57] pitman: mishok13: вот я и думаю...
[10:50:07] mishok13: introudction, первая фраза
[10:50:09] mishok13: прочитай
[10:50:15] mishok13: :)
[10:51:15] mishok13: иногда гораздо удобнее проигнорировать стайл гайд
[10:51:33] mishok13: Although practicality beats purity.
[10:52:23] _lorien: щит, я нарушаю pep8 во всех своих проектах
[10:52:29] _lorien: relative импортами
[10:53:04] pitman: _lorien: :-) Хотя не понимаю почему PEP8 против
[10:53:23] pitman: нифига не аргументированно
[10:54:20] _lorien: гмгм, ну например, ты можешь нечаянно системный модуль своим затенить
[10:54:20] red-agent: тебе уже сказали
[10:54:27] red-agent: [10:49:05] mishok13: pitman, пеп-8 только рекомендация
[10:55:17] pitman: _lorien: как?
[10:55:17] wiz: red-agent, не напрягайся, он читать не умеет
[10:55:20] _lorien: например, у меня была такая проблема раньше, я назвал модуль в джанго именем site и всё рушилось из-за него
[10:55:48] pitman: _lorien: я имел в виду from . import module
[10:55:54] wiz: _lorien, у меня есть приложение site и ничего. from project.site import ....
[10:56:17] pitman: _lorien: ты никак не можешь ничего затенить
[10:56:37] pitman: но в будущем import module будет работать по другому
[10:56:43] _lorien: бля, чё-то я гоню
[10:56:50] _lorien: но рушилось точно, ща вспомню )
[10:56:53] pitman: последовательность поиска изменится
[10:57:13] Jekel: ребят. обьясните пожалуйста как правильно форкатся
[10:57:15] pitman: ща ищет вначале в home dir проекта
[10:57:19] Jekel: потмоу что я нафиг запутался
[10:57:36] _lorien: lorien@lorien /tmp/project $ cat sys.py
path = 'SHIT'
lorien@lorien /tmp/project $ python -c 'import sys; print sys.path'
['', '/usr/lib/python2.5/site-packages/python_memcached-1.41-py2.5.egg', '/usr/lib/python2.5/site-packages/web.py-0.23-py2.5.egg', '/usr/lib/python2.5/site-packages/nose-0.10.2-py2.5.egg', '/usr/lib/python2.5/site-packages/Jinja-1.2-py2.5-linux-i686.egg', '/usr/lib/portage/pym', '/usr/lib/python25.zip', '/usr/lib/python2.5', '/usr/lib/python2.5/plat-linux2', '/usr/lib/python2.5/lib-tk', '/usr/lib/python2.5/lib-dynload', '/usr/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages/PIL', '/web/dja', '/web/django-bricks', '/usr/lib/python2.5/site-packages/gtk-2.0']
Как тогда это объяснить?
[10:57:53] red-agent: Jekel: форк - вобще херовая идея
[10:58:01] red-agent: лучше юзай треды
[10:58:03] _lorien: Jekel, вот так fork()
[10:58:18] Jekel: про треды я уже на днях тут говорил что под БСД они не катят
[10:58:31] red-agent: все там катит под bsd
[10:58:47] Jekel: у меня на каждый тред создается по процессу - это нормально?
[10:58:50] red-agent: а процесс форканья ничем не отлчичается практически от сишного
[10:59:06] red-agent: Jekel: значит питон собран без тредов
[10:59:07] pitman: _lorien: HOMEDIR_PROJECT, PYTHONPATH, Standard library path, any .pth files
[10:59:14] red-agent: и оно заменяет его dummy_
[10:59:37] _lorien: pitman, ну так почему sys.path вывел нормальную информацию, а не 'SHIT'?
[10:59:41] _lorien: см. пример выше
[10:59:50] red-agent: да и кроме того, форк тоже создает копию процесса
[11:00:22] Jekel: это я понимаю, только в случае с тредами - логично когда ты убиваеш процесс который всех породил треды доже должны умереть
[11:00:29] pitman: _lorien: в чем SHIT? поясни
[11:00:31] Jekel: но так нефига не происходит
[11:00:53] _lorien: pitman, почему в моём пример не выводится 'SHIT', вот в чём SHIT :-)
[11:01:25] Jekel: питон собран с тредами
[11:01:54] red-agent: Jekel: флаг isDaemon в тредах True или False&
[11:02:22] red-agent: и какой ты юзаешь модуль? thread или threading?
[11:02:26] Jekel: Thread
[11:02:28] pitman: _lorien: ща замониторю
[11:02:31] Jekel: брал примеры с форума
[11:02:36] Jekel: на питон.су
[11:02:42] red-agent: покажы
[11:02:43] red-agent: пример
[11:02:45] Jekel: там как раз тема была натему демона
[11:02:46] Jekel: ща
[11:03:33] tek: как привязать функцию с views.py к корню сайта ? - (r'/', index),
[11:03:49] Jekel: http://python.com.ua/forum/viewtopic.php?id=2019
[11:04:09] tek: какой там регексп нужен
[11:04:15] _lorien: r'^$'
[11:04:49] pitman: _lorien: попробуй сделать с модулем os. sys -- это видимо исключение
[11:05:07] tek: спс
[11:06:16] _lorien: lorien@lorien /tmp/project $ cat os.py
path = 'SHIT'
lorien@lorien /tmp/project $ python -c 'import os; print os.path'
<module 'posixpath' from '/usr/lib/python2.5/posixpath.pyc'>
[11:06:19] _lorien: гы )
[11:06:36] _lorien: может в py2.5 отключили relative import?
[11:06:36] pitman: _lorien: у меня вывелось другое
[11:06:37] red-agent: жуть
[11:06:46] red-agent: Jekel: какая задача-то стоит?
[11:06:52] pitman: _lorien: я правда через скрипт запускал
[11:07:05] _lorien: ща попробую скриптом
[11:07:22] _lorien: адин хрен
[11:07:30] Jekel: мне нужно написать демон, который будет висеть - дергать бд на предмет того что делать либо ловить SIGUSR и плодить чайлдов чтобы они делали эти задания
[11:07:57] pitman: _lorien: python -c 'import os; print os'
<module 'os' from 'os.pyc'>
[11:08:47] _lorien: а бля
[11:08:52] _lorien: я __init__.py забыл )
[11:09:10] _lorien: хм, один хрен
[11:09:21] pitman: _lorien: кстати, relative import -- это import вида from . import module.
[11:09:39] _lorien: lorien@lorien /tmp/project $ python -c 'import os; print os'
<module 'os' from '/usr/lib/python2.5/os.pyc'>
[11:09:44] red-agent: Jekel: и где затык?
[11:10:32] Jekel: в размножении. я не догоняю с этими форками какой пид будет являтся порождающим для всех форков
[11:10:40] Jekel: куда код показать?
[11:10:45] pitman: _lorien: тут что-то не так
[11:11:10] pitman: _lorien: у нас обоих py2.5, а работает по разному
[11:11:29] _lorien: pitman, может быть, я тебе снюсь?
[11:11:37] red-agent: Jekel: dumpz.org
[11:11:44] red-agent: ты ж раньше на Си кодил, в чем трабл-то? :)
[11:11:47] red-agent: механизм тот же
[11:12:14] Jekel: я системным программированием не особо под юникс увлекался ) я под винды фигачил спокойно треды, а тут с форками совсем бубу %)
[11:13:10] pitman: _lorien: [4 pitman@robot]$ ls -1
os.py
sys.py
[4 pitman@robot]$ python -c 'import sys,os; print sys, os'
'import site' failed; use -v for traceback
<module 'sys' (built-in)> <module 'os' from 'os.py'>
[11:13:31] red-agent: Jekel: в винде разве не pthreads юзаются?
[11:13:32] red-agent: в си
[11:13:36] pitman: я не могу это объяснить
[11:13:58] Jekel: винапи
[11:14:00] _lorien: lorien@lorien /tmp/project $ ls -1
__init__.py
os.py
sys.py
test.py
lorien@lorien /tmp/project $ python -c 'import sys,os; print sys, os'
<module 'sys' (built-in)> <module 'os' from '/usr/lib/python2.5/os.pyc'>
[11:14:03] Jekel: CreateThread
[11:14:05] Jekel: и вперед
[11:14:15] red-agent: винапи сосед
[11:14:24] Jekel: мфц тру?
[11:14:24] red-agent: ну в общем, это уже другая тема
[11:14:35] red-agent: posix threads - тру
[11:14:38] red-agent: так вот
[11:14:41] Jekel: да
[11:14:43] Jekel: к нашим баранам
[11:14:44] pitman: _lorien: а что в __init__.py?
[11:14:59] red-agent: немогу понять, какие проблема в bsd с тредами-то?
[11:15:03] red-agent: у меня все работало как нужно
[11:15:38] _lorien: pitman, ничего, без него тоже так же импортируется
[11:15:45] Jekel: а можно ли тред принудительно пришибить?
[11:15:51] pitman: _lorien: а дистр какой?
[11:15:56] _lorien: piranha, из-за тебя одни проблемы, приходится для автокомплита три буквы писать, вместо одной )
[11:16:00] _lorien: gentoo
[11:16:14] _lorien: вместо двух, вернее
[11:16:16] pitman: _lorien: с какими флагами собирал?
[11:16:33] pitman: у меня ubuntu 8.04
[11:16:39] red-agent: Jekel: libc собран с поддержкой тредов?
[11:16:51] red-agent: Jekel: нет, он должен сам returnить
[11:17:14] red-agent: и если isDaemon=False - то все треды умрут, если убить процесс, в нормальных условиях
[11:17:30] _lorien: piranha, чо то я заёбся, мне кажетсся проблему в другом, пусть ещё кто-нить попробует =)
[11:17:39] piranha: _lorien: я не при чём :)
[11:18:16] _lorien: Jekel, можешь попробовать ещё посмотреть модуль processing, это threading like интерфейс к тредам
[11:18:22] _lorien: но он у меня на фре глючил (
[11:18:35] red-agent: к форку, а не к тредам
[11:18:42] _lorien: * это threading like интерфейс к процессам (через форки)
[11:18:44] _lorien: да
[11:18:47] Jekel: red-agent, http://dumpz.org/1243/
[11:19:08] red-agent: Jekel: повторяю вопрос
[11:19:13] red-agent: libc - был собран с тредами?
[11:19:25] Jekel: ты либц на бсд руками не собираешь
[11:19:55] red-agent: угу, а чем, ногами?
[11:20:01] Jekel: оно в системе уже
[11:20:24] Jekel: а это не линух где каждая затычка как пакет идет %)
[11:20:36] red-agent: lol
[11:21:50] mishok13: :/
[11:26:05] red-agent: Jekel: собирание чего-то руками - это не в смысле порт-маганером =)
[11:26:10] red-agent: руками - это руками
[11:26:24] red-agent: к тому же, бутстраппинг никто не отменял
[11:26:28] red-agent: кросс-компиляцию тоже
[11:26:41] red-agent: ну, в общем, это уже тема для другого разговора
[11:27:28] Jekel: ты мне лучше с моим кодом форканья помог бы, чем рассуждать о прелестях ручной сборки либц
[11:27:42] red-agent: да у тебя не код =)
[11:27:43] red-agent: мясо
[11:27:51] Jekel: а это наброски
[11:27:54] Jekel: а не релиз )
[11:28:03] Jekel: опыты на этой хрени я ставлю
[11:28:04] red-agent: ятак понял, что после прочтения пепов - выводов ты не сделал?
[11:28:18] red-agent: len(args) > 0
[11:28:42] red-agent: if len(args) > 0 эквивалентно if args
[11:29:05] red-agent: def res_handler(sing_num, frame):
usr_handler(*args, **kwargs)
[11:29:09] Jekel: я этот код уташил откудато толи с форума или примеров - про обработку сигналов
[11:29:11] Jekel: как базу
[11:29:12] red-agent: это - место ддля лямбды
[11:30:31] red-agent: def res_handler(sing_num, frame):
usr_handler(*args, **kwargs)
return res_handler
это эквивалентно
return lambda sing_num,frame: usr_handler(*args,**kwargs)
[11:31:56] red-agent: да пиздец кароче, ты его в накурке писал или как?
[11:32:05] red-agent: logging притом в stdlib зачем?
[11:33:08] piranha: кто там устал, не могу что-то припомнить? :D :D :D
[11:33:40] red-agent: да ты посмотри на код :D
[11:33:43] red-agent: мя-со
[11:34:22] red-agent: Jekel: в общем, идея с форками - крайней хуевая
[11:34:32] red-agent: в любом случае
[11:34:37] mishok13: вообще, есть модуль subprocess
[11:34:38] red-agent: в а случае с питоном - трижды хуевая
[11:35:09] Jekel: red-agent, обнадежил
[11:35:24] Jekel: как кошерно тогда это всё реализовать в питоне? потому что я уже затрахался
[11:35:43] red-agent: тредами
[11:36:35] mishok13: а в чем задача заключается?
[11:37:38] Jekel: 12:09:46] Jekel: мне нужно написать демон, который будет висеть - дергать бд на предмет того что делать либо ловить SIGUSR и плодить чайлдов чтобы они делали эти задания
[11:37:46] _lorien: Lenovo R61i ThinkPad T5750 2.0(C2D)/1Gb/160Gb/DVD-RW/WiFi/BT/15'WXGA/VB+XPP
чо такое vb?
[11:37:54] _lorien: visual basic? ^_^
[11:39:16] tek: может vista basic :\
[11:39:17] piranha: Jekel: twisted
[11:39:45] red-agent: нунахуй
[11:40:03] Jekel: мнения разделились..
[11:40:10] _lorien: странно как-то, и виста и xp в комплекте? :-/
[11:40:31] piranha: такое бывает
[11:40:35] Большой Лис: а где про XP написано?
[11:40:42] tek: XPP
[11:40:43] Большой Лис: XPP это не XP :)
[11:40:52] _lorien: Jekel, в чём проблема использования threads?
[11:40:54] tek: XPP - XP prof
[11:40:57] Большой Лис: а
[11:40:58] tek: may be
[11:41:01] Большой Лис: могёт быть, да
[11:41:47] mishok13: Jekel, threading
[11:42:02] mishok13: я бы сделал конечно асинхронно, и не заебывался вообще
[11:42:05] Jekel: _lorien, то что у меня на бсд получилось что каждый трет это процесс и убивание порождающего не убило порожденных
[11:42:06] mishok13: но лучше трединг
[11:42:55] red-agent: а вобще
[11:43:09] red-agent: можна Stackless Python заюзать
[11:43:26] mishok13: тоже, конечно, вариант
[11:43:36] Jekel: твистед какое то слишком навороченное для моей простой задачи
[11:43:37] mishok13: но не думаю, что стоит так заебываться ради одной задачи :)
[11:43:41] piranha: asyncore?
[11:43:53] piranha: mishok13: +1 нафиг стока йопли
[11:44:09] mishok13: piranha, ну я бы asyncore взял, да
[11:44:31] _lorien: Jekel, ты им делаешь setDaemon? (выше по дискуссии, я чё-т так я не понял)
[11:44:37] _lorien: setDaemon(true)
[11:44:59] Jekel: _lorien, я брал пример с форума
[11:45:36] _lorien: Jekel, ну... э... и что там в примере? Делается, setDaemon или нет?
[11:45:37] red-agent: ну, теперь понятно, почему ты год пишешь, а получается говнецо =)
[11:45:56] Jekel: red-agent, поясни
[11:46:12] red-agent: ковырять чужие примеры - это очень хуевый подход, т.к. кроме их ошибок, ты еще и своих наделаешь - и нихуя толком не поймешь
[11:46:28] red-agent: самый правильный подход - это читать документацию и писать from scratch
[11:46:46] red-agent: максимум - еще подглядывать в чужой пример, но не передирать его
[11:46:56] Jekel: о да.. когда нихуя не понятно делать всё с нуля напмного продуктивнее ковыряние самплов %)
[11:46:57] red-agent: не шибко задумываясь над семантикой
[11:47:12] red-agent: Jekel: именно так, намного продуктивнее =)
[11:47:34] piranha: Jekel: зато потом ты поймёшь шо написано-то
[11:47:48] red-agent: потому, что после ковыряния чужих экзамплов - ты получишь hard-maintainable код, который сам к тому-же не будешь понимать
[11:48:02] piranha: именно
[11:48:03] _lorien: lorien@lorien /tmp $ cat test.py
import threading
import time
def foo():
while True:
print 'test'
time.sleep(1)
t = threading.Thread(target=foo)
t.setDaemon(True)
t.start()
Короче, в этом коде тред убивается сразу
[11:48:09] red-agent: и в конце-концов, если встанет похожая задача - полезешь опять за примерами
[11:48:10] Большой Лис: пиздец - леденящий душу
[11:48:11] Большой Лис: :)
[11:48:14] _lorien: если не делать setDaemon, то не убивается и продолжает работать
[11:48:54] Jekel: _lorien, а если я захочу тред прибить сам?
[11:49:01] Jekel: пока оно там работает
[11:49:56] red-agent: используй триггеры
[11:50:01] red-agent: Event например
[11:50:03] _lorien: Ты можешь завести в главном треде хэш, куда писать номер треда + 1 или 0, потом тред будет читать это каждый раз и понимать, надо ему работать или нет...
[11:50:56] red-agent: _lorien: ну это ужь совсем молдавский вариант
[11:51:08] _lorien: Может быть, я в этом не шибко силён )
[11:51:46] Jekel: TerminateThread пока еще не придумали в питоне оказывается.. (
[11:51:47] _lorien: Вооще была книжка от орейли "Programming python" шо ли... там было клёво про треды расписано всё
[11:52:12] red-agent: Jekel: в pthreads нету такого понятия
[11:52:15] red-agent: как убить тред
[11:52:47] red-agent: if not event.isSet(): return - самое простое решение
[11:53:20] _lorien: а вот ещё придумал
[11:54:32] _lorien: class Thread:
def stop(self):
self.stop_flag = True
def run(self):
while not self.stop_flag:
# do something
[12:01:11] tilarids: а синхронизация?
[12:01:52] pitman: _lorien: http://docs.python.org/tut/node8.html#SECTION008120000000000000000
[12:02:07] pitman: _lorien: теперь объясни почему у тебя это не так?
[12:02:28] tilarids: Я с тредами знаком только в С/С++, так что интересно. Нужно ли тут делать мьютекс на установку self.stop_flag, или благодаря гилу не нужно?
[12:03:59] _lorien: tilarids: а синхронизация?
что за синхронизация?
[12:04:00] mishok13: а нахер тут мютекс?
[12:04:25] _lorien: а
[12:04:39] _lorien: мне кажется не надо, ничо страшного не будет
[12:04:45] tilarids: self.stop_flag может изменяться из другого потока
[12:05:36] tilarids: я чисто из образовательных целей спрашиваю, почему он здесь не нужен. Из-за гила или по какой другой причине
[12:05:41] mishok13: ну, изменилось, и?
[12:05:57] mishok13: цикл доиграл последнюю итерацию и остановился
[12:06:41] tilarids: одновременное чтение и запись из разных потоков приводят к разным результатам
[12:08:07] tilarids: в С подобном языке вместо self.stop_flag может прийти какой угодно мусор. В том числе, 0.
[12:08:10] _lorien: tilarids, это для операций IO важно, я думаю, для установки переменной в треде - это не играет роли
[12:08:39] mishok13: tilarids, self.stop_flag только указывает на обьект
[12:08:52] mishok13: так что мусор туда прийти не может, по определению
[12:09:28] _lorien: http://dumpz.org/1244/
в общем, вот рабочий пример, кому интересно
[12:09:48] tilarids: ну, пусть он только указывает на объект. Тогда его в одном потоке по указателю изменяют значение, а во втором - получают. Вот вам и мусор.
[12:10:03] mishok13: какой блять указатель?
[12:10:16] mishok13: нету в питоне мусора
[12:10:20] tilarids: не ругайся
[12:10:36] mishok13: нету у тебя доступа в "чистополе", память тобишь
[12:10:51] mishok13: ты можешь получить или True или False
[12:11:11] tilarids: в смысле, нету? В итоге ж эта переменная self.stop_flag где-то хранится в интерпретаторе?
[12:11:27] mishok13: self.stop_flag не переменная
[12:11:34] mishok13: а всего лишь label
[12:11:41] mishok13: как ты сделаешь мусор?
[12:11:44] mishok13: вот обьясни мне
[12:11:58] _lorien: http://effbot.org/zone/thread-synchronization.htm
вот по теме неплохая ссылка
[12:12:33] Jekel: вобщем треды это кошерно в питоне?
[12:12:35] mishok13: foo = Spam(); foo = Eggs()
[12:12:43] mishok13: где тут может мусор произойти?
[12:13:08] mishok13: foo будет именем или для обьекта Spam() или для обьекта Eggs()
[12:13:10] mishok13: всё
[12:13:34] mishok13: Jekel, кошерно или некошерно -- спрашивать надо у израильских друзей :)
[12:13:51] mishok13: без конкретной задачи сказать, что лучше применять -- невозможно
[12:14:09] Jekel: я приминительно для моей проблемы
[12:14:26] tilarids: В интерпретаторе упрощенно есть дикт - {label1:object1,label2:object2}. Когда ты в скрипте пишешь label1 = 1 создается новый объект и записывается в этот дикт. Когда ты в одном треде в скрипте пишешь label1 = 1, а во втором треде пытаешься прочитать его, то неизвестно, что будет на месте object1
[12:14:45] _lorien: tilarids, не гони
[12:14:46] tilarids: это если не учитывать гил
[12:14:51] mishok13: я бы сказал, что одновалентно как-то
[12:14:51] _lorien: читай ссылку
[12:14:59] tilarids: сейчас, я не успел еще прочитать
[12:15:04] mishok13: tilarids, ты не понимаешь как работает питон, по-моему
[12:15:15] _lorien: The simplest way to synchronize access to shared variables or other resources is to rely on atomic operations in the interpreter. An atomic operation is an operation that is carried out in a single execution step, without any chance that another thread gets control.
[12:16:44] mishok13: про дикт вообще какую-то хуйню ляпнул
[12:17:06] tilarids: честно говоря, я не смотрел исходники питона
[12:17:26] mishok13: In [40]: foo = 1
In [41]: bar = 2
In [42]: d = {foo: 'spam', bar: 'eggs'}
In [43]: foo = 3
In [44]: d[foo]
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
/home/mishok/<ipython console> in <module>()
KeyError: 3
[12:17:41] mishok13: а теперь прочитай, какой ты сценарий описал
[12:17:53] mishok13: и получается полное несоответствие
[12:18:06] mishok13: tilarids, а исходники питона тут ни при чем
[12:18:42] tilarids: ну, и где тут несоответствие?
[12:18:52] mishok13: В интерпретаторе упрощенно есть дикт - {label1:object1,label2:object2}. Когда ты в скрипте пишешь label1 = 1 создается новый объект и записывается в этот дикт.
[12:19:03] mishok13: дикт сам по себе меняться не будет
[12:19:27] tilarids: я тебе про интерпретатор говорю. к питоновоским диктам оно отношения не имеет
[12:19:31] tilarids: давай сначала.
[12:19:42] mishok13: давай
[12:19:53] tilarids: в питоновском скрипте есть что-то типа:
label1 = 1
label2 = 2
[12:20:02] mishok13: угу
[12:20:54] tilarids: Когда интерпретатор его выполняет, он создает новое соответствие между названием (label) и значением.
[12:21:02] tilarids: Точнее, два таких соответствия
[12:21:03] _lorien: и тут выключают питание и label1 и label2 пропадают!
[12:21:08] mishok13: ну
[12:21:11] mishok13: создают
[12:21:38] tilarids: так вот, label1 соответствует какому-то объекту, который хранится в памяти интерпретатора
[12:21:43] mishok13: угу
[12:22:27] tilarids: когда из одного потока пытаются прочитать его, то интепретатор у себя в памяти считывает этот объект
[12:23:00] mishok13: ну, получил доступ к обьекту
[12:23:02] mishok13: далее
[12:23:46] tilarids: а когда одновременно из другого потока пытаются заменить это соответствие другим, то интерпретатор может получить мусор, когда попытается считать
[12:23:55] _lorien: нифига
[12:23:56] mishok13: почему?
[12:24:03] mishok13: мы уже получили доступ к обьекту
[12:24:04] _lorien: он в один момент времени что-то одно делает
[12:24:11] tilarids: именно :)
[12:24:23] mishok13: даже если в этот момент лейбл стал указывать на другой обьект
[12:24:36] mishok13: мы уже к нужному (предыдущему) обьекту доступ получили
[12:24:40] tilarids: благодаря гил в питоне есть атомарные операции, можно посмотреть по ссылке, которую дал лориен
[12:25:02] mishok13: так где ж мы мусор-то получим?
[12:28:58] _lorien: * ждите, идёт обработка запроса
[12:29:55] tilarids: Без гила:
struct PythonObject
{};
std::map<std::string,PythonObject> label_object_map;
//thread1:
//label1 = 1
PythonObject * pObject = new PythonObject();
label_object_map['label1']=pObject;//Здесь мы записываем указатель
//thread2
//print label1
PythonObject *pObject = label_object_map['label1'];
return pObject;//а вот тут мы его одновременно берем. Такой C++ код не является thread_safe - pObject может быть мусором и при разыменовании будет капец.
[12:30:30] mishok13: блять
[12:30:34] tilarids: Я же спросил про гил, на что лориен уже ссылкой ответил. С гилом просто интерпретатор работает в одном потоке
[12:30:37] mishok13: при чем здесь плюсы
[12:30:53] tilarids: мне впалу на С писать
[12:31:00] mishok13: у городі бузина, а в Київі дядько
[12:31:01] tilarids: потому что интерпретатор написан на С
[12:31:32] mishok13: ичо?
[12:31:41] mishok13: ghc тоже на си написан
[12:32:02] mishok13: что же, хаскель от этого параллелится плохо или не чисто функциональный язык?
[12:33:21] tilarids: Причем здесь хаскель? Мы про питон говорим. Я задал вполне конкретный вопрос - нужна ли синхронизация в лориеновском примере.
[12:33:35] tilarids: Если бы интерпретатор работал в нескольких потоках, то была бы нужна
[12:33:41] mishok13: мы тебе ответили -- нет
[12:33:42] tilarids: но он работает в одном потоке
[12:33:45] _lorien: http://chtochto.ru/node/110
[12:34:00] tilarids: \\кроме того, что хотел узнать ответ, мне было еще и интересно, почему
[12:34:35] mishok13: tilarids, хаскель тут также уместен, как и плюсы
[12:34:40] mishok13: абсолютно не к месту
[12:35:00] _lorien: сегодня день пиздец-дискуссий кажется, на канале =)
[12:35:17] mishok13: _lorien, боян
[12:44:05] slav0nic: мля ему диплмоа не найду%)))
[12:47:05] _lorien: кому ты не найдёшь диплома? )
[12:49:53] slav0nic: та бля я тему записывал на огрызке) спрашвитаь у препада как-то тупо))
[12:51:11] pitman: _lorien: попробуй вместо os или sys сделать тоже самое с string. Т.е. создай локальный string.py и скажи import
[12:52:10] _lorien: lorien@lorien /tmp $ cat string.py
split = 'SHIT'
lorien@lorien /tmp $ python -c 'import string; print string.split'
SHIT
[12:52:31] pitman: поздравляю :-)
[12:52:37] pitman: я разобрался
[12:52:46] _lorien: чочо там? )
[12:53:07] _lorien: импортируется автоматом перед началом работы скрыпта?
[12:53:11] piranha: slav0nic:
[12:53:16] piranha: нормально, я спрашивал :))
[12:53:20] piranha: тему никто не помнит
[12:53:27] slav0nic: )
[12:53:57] pitman: _lorien: да, ему нужно определить sys.path. это делает модуль site. Залезь в него и прочитай его импорты :-)
[12:55:35] pitman: _lorien: твой генту подгружает этот site и вместе с ним sys, imp, os, os.path.
[12:55:54] _lorien: pitman, а твой "генту" чо не подгружает? )
[12:56:08] pitman: ubuntu 8.04
[12:56:14] _lorien: кавычки
[12:57:10] _lorien: piranha, а твой ubuntu версия 8.04 чо не подгружает? )
[12:57:14] _lorien: тьфу
[12:58:15] piranha: _lorien: я не юзаю бубуду
[12:58:21] piranha: )
[12:58:25] pitman: здесь труднее объяснить, я смотрел патчи генту для питона. Ничего особенного. Но когда я у себя пускаю python -c 'import os,site; print os' (в текущей папке есть пустой os.py), то получаю:
'import site' failed; use -v for traceback
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/home/pitman/.egg/lib/python2.5/site-packages/site.py", line 73, in <module>
__boot()
File "/home/pitman/.egg/lib/python2.5/site-packages/site.py", line 2, in __boot
import sys, imp, os, os.path
ImportError: No module named path
[12:59:08] mishok13: лузир
[12:59:12] mishok13: :)
[12:59:21] pitman: _lorien: давай выложим свои site.py в dumpz.org и сравним?
[12:59:50] mishok13: pitman, он везде одинаковый
[13:00:11] mishok13: /usr/lib/python2.5/site.py
[13:00:37] pitman: mishok13: есть подозрение, что нет
[13:00:41] mishok13: о_О
[13:00:57] pitman: mishok13: gentoo любят свои изменения пихать
[13:01:31] red-agent: ну, как видишь эти изменения оказываются вполне полезными =)
[13:01:37] pitman: _lorien: http://www.dumpz.org/1245/
[13:01:42] pitman: кидай свой
[13:01:54] pitman: _lorien: я дифом прогоню
[13:03:44] _lorien: чичас кину
[13:04:36] pitman: _lorien: http://www.dumpz.org/1246/ , а то не то кинул :-)
[13:05:11] red-agent: вы для начала - сравнили бы минорные версии
[13:05:12] red-agent: питона
[13:05:20] pitman: python 2.5.2
[13:05:51] _lorien: lorien@lorien /tmp $ python -V
Python 2.5.2
[13:06:00] _lorien: у меня на 8 строчек больше в site.py )
[13:06:18] pitman: _lorien: кидай в dumpz.org. Я через diff пропущу
[13:06:37] _lorien: да кинул, тока про ссылку забыл =)
http://dumpz.org/1247/
[13:08:29] mishok13: дифф на всеобщее обозрение, пожалуйста
[13:10:21] _lorien: мать моя, флешки на 4гига по 400рублей продаются уже o_O
[13:10:35] _lorien: /me отстал от жизни
[13:11:20] mishok13: привет из нашего времени
[13:11:36] mishok13: уже ssd надвигаются на сектор домашних пк
[13:11:50] pitman: _lorien: мда...вобщем, все различия -- это то что gentoo добавляет портежевские папки.
[13:13:06] _lorien: pitman, тогда почему у тебя так ведёт себя питон?
[13:13:31] _lorien: pitman, т.е. в этом site.py есть импортирование sys? Может быть, твой site.py не выполняется?
[13:15:08] red-agent: это по-ходу у меня uin cпизнули или icq легла?
[13:15:41] pitman: _lorien: где-то есть blacklist модулей, которые всегда грузят версию стандартной библы. Только у тебя это sys и os, а у меня только sys.
[13:17:23] mishok13: red-agent, асику вроде как еще живет
[13:17:24] mishok13: :)
[13:17:33] red-agent: вот блиадь
[13:17:56] red-agent: /me охуевает
[13:18:06] red-agent: специально же зарегил 9знак, шоб не пиздили
[13:18:48] _lorien: red-agent, хороший день, да? )
[13:19:47] red-agent: я так и знал, шо седня какая-то жопа будет
[13:20:08] red-agent: если red-agent'у везет с самого утра - знай, пиздец уже близок
[13:20:22] xN: ку
[13:24:15] Jekel: кому нафиг нужен 9и знак?
[13:24:24] pitman: _lorien: python -c 'reload(sys); print sys' :-)))
[13:24:39] red-agent: я его регил с такой же мыслью =)
[13:24:54] tilarids: red-agent: это судьба. У тебя остался жаббер
[13:25:37] _Nirdosh_: ща все пиздят чтоп спамить потом:\
[13:25:38] _lorien: lorien@lorien /tmp/project $ python -c 'reload(sys); print sys'
Traceback (most recent call last):
File "<string>", line 1, in <module>
NameError: name 'sys' is not defined
[13:25:44] red-agent: ну, я предусмотрел такой сценарий развития событий
[13:25:58] Jekel: у тебя заныкан еще один 9знак?
[13:26:11] _Nirdosh_: а чо не на мыло зарегал шоле?
[13:26:25] red-agent: на мыло, вот щас ретривну обратно
[13:26:44] red-agent: pitman: import sys
[13:26:46] red-agent: для начала =)
[13:26:50] _lorien: * если его тоже не попиздили
[13:26:55] red-agent: не
[13:27:05] pitman: _lorien: да, я ступил
[13:27:40] _Nirdosh_: а как сперли то? винда+троян?
[13:27:46] _lorien: * предвидя следующий вопрос
lorien@lorien /tmp/project $ python -c 'import sys; reload(sys); print sys'
<module 'sys' (built-in)>
[13:29:12] pitman: _lorien: ну собственно с sys все понятно. Она жизненно необходима. Но os...
[13:29:38] pitman: поиск sys видимо зашили в код
[13:30:14] red-agent: _Nirdosh_: lol gentoo+clamav+rkhunter+nat+ еще пару параноидальных вывертов
[13:30:43] red-agent: в серверной части icq багов - врот мне ноги
[13:30:49] red-agent: просто все они щас крутятся в привате
[13:30:52] _Nirdosh_: о_О и ток аську увели?
[13:31:00] red-agent: за что собственно и работают icq -шопы
[13:35:14] slav0nic: в аське пом-моему макс длина пароля 8 символов) это тупо
[13:35:31] mishok13: а не минимальная?
[13:35:46] Jekel: максимальная скорее всего
[13:37:33] pitman: _lorien: нашел! python -c 'import sys; print sys.builtin_module_names'
Мой вывод:
('__builtin__', '__main__', '_ast', '_codecs', '_sre', '_symtable', '_types', 'errno', 'exceptions', 'gc', 'imp', 'marshal', 'posix', 'pwd', 'signal', 'sys', 'thread', 'xxsubtype', 'zipimport')
[13:37:55] pitman: _lorien: выведи свое
[13:39:57] pitman: _lorien: у тебя скорее тоже самое. Вот поэтому sys подменить и нельзя
[13:40:01] tek: моя аська 1Y000 :P
[13:40:33] pitman: _lorien: но все остальное можно. Но почему то у тебя в генту нельзя захайдить os
[13:40:45] slav0nic: там помоему алгоритм шифрования пароля при передаче, если не мд5 - то ксоры с массимвом констант, и там их 16, н опочему-то 8 последних не юзаются
[13:40:59] slav0nic: * в icq
[13:41:18] slav0nic: http://slav0nic.org.ua/entry/144#more тут раздуплял В)
[13:42:13] red-agent: ну, некоторые стандартизированные алгоритмы криптования, в usa - подвержены искуственно созданной (в NSA) уязвимости
[13:42:16] tek: круто
[13:42:30] red-agent: prg инициализируется заведомо известными, константными seedами
[13:42:36] _lorien: lorien@lorien /tmp/project $ python -c 'import sys; print sys.builtin_module_names'
('__builtin__', '__main__', '_ast', '_codecs', '_sre', '_symtable', '_types', 'errno', 'exceptions', 'gc', 'imp', 'marshal', 'posix', 'pwd', 'signal', 'sys', 'thread', 'xxsubtype', 'zipimport')
[13:43:31] pitman: _lorien: ну вот. Отсюда следует, что мой питон правильнее твоего ;-)
[13:43:49] mishok13: о_О
[13:43:49] pitman: никогда не любил генту :-)
[13:43:54] _lorien: а мой правильнее твоего )
[13:44:13] mishok13: просто пиписьками померяйтесь
[13:44:14] pitman: _lorien: что же ты тогда не можешь os подменить?
[13:44:24] _lorien: pitman, хм, зачем? o_O
[13:44:56] pitman: _lorien: затем, что так должно работать.
[13:45:20] _lorien: где это написано?
[13:45:25] pitman: хотя хотел бы я посмотреть на умника который решит захайдить os
[13:45:35] _lorien: и почему ты sys не можешь подменить, раз так должно работать?
[13:45:36] pitman: это чисто принципиально
[13:45:46] pitman: sys - builtin module
[13:45:53] mishok13: _lorien, sys нельзя подменить
[13:46:00] pitman: т.е. он уже в интерпретаторе
[13:46:13] pitman: a os нет
[13:46:21] _lorien: а чо она у меня не подменяется тогда?
[13:46:27] _lorien: чё-то я так и не понял )
[13:46:28] pitman: потому что gentoo
[13:46:31] _lorien: и?
[13:46:32] pitman: хз
[13:46:34] _lorien: это не ответ )
[13:46:39] _lorien: ну короче ты так и не понял ничего )
[13:46:45] pitman: в ubuntu все хорошо
[13:46:48] _lorien: в смысле, почему так происходит
[13:47:13] _lorien: так ладно, а ещё кто-нить хочет провести тест? )
[13:47:17] pitman: надо python под gdb пускать....нет желания
[13:47:31] _lorien: создать файлик os.py и посмотреть, чо подгрузится
[13:49:19] mishok13: в pythonpath, что-ли?
[13:49:37] red-agent: о чем вы вобще тут флейм развели?
[13:49:45] mishok13: я не понимаю вообще
[13:49:46] pitman: mishok13: touch os.py; python -c 'import os; print os'
[13:50:01] tilarids: у меня 2.4.4, так что мой пример не будет показателен
[13:50:12] pitman: tilarids: запусти, посмотрим
[13:50:17] mishok13: mishok@laptop:~/doc$ touch os.py; python -c "import os; print os"
<module 'os' from '/usr/lib/python2.5/os.pyc'>
[13:50:31] tilarids: аналогично
[13:50:35] pitman: mishok13: ось какая?
[13:50:38] mishok13: ubuntu 8.04, если тебе интересно
[13:50:50] pitman: mishok13: ну тогда я особенный епрст
[13:50:52] tilarids: у меня генту
[13:51:18] pitman: Ща нафиг все переменные окружения потру!
[13:52:15] tilarids: на убунту 6.06 и 6ой фряхе аналогично
[13:52:16] _lorien: гм, а зачем сделали, что если return нету, то подразумевается, что return None, разве это true? Я вот ща забыл сделать в конце return True и маялся с багом...
[13:53:20] mishok13: _lorien, по другому низзя никак
[13:53:21] red-agent: _lorien: вполне логчно
[13:53:47] red-agent: если нету return - функция ничего не возвращает, точнее возвращает ничего =)
[13:53:51] red-agent: точнее возвращает None
[13:53:57] red-agent: или NULL в Си эквиваленте
[13:54:21] tilarids: NULL - это 0 :)
[13:54:32] tilarids: а 0 - это очень даже чего
[13:54:35] xN: только у меня на две аси пишет что пасс неверный и не заходить на сайт мирабиллиса?
[13:55:15] _lorien: mishok13: _lorien, по другому низзя никак
выдават ошибку, если нету return
[13:55:15] xN: вот вроде хоть на сайт зашел..
[13:55:35] mishok13: _lorien, а контекст из функции ты как возвращать будешь?
[13:55:45] mishok13: ВНЕЗАПНО!, да?
[13:56:10] _lorien: чочо, я тебя не понимаю )
[13:57:02] Патриот: xN: не только у тебя, у многих...
[13:57:05] mishok13: короче, на уровне реализации сделано так, что каждая функция возвращает что-либо
[13:57:10] mishok13: по-другому никак
[13:57:37] mishok13: tilarids, NULL это 0, но не на всех платформах
[13:58:18] xN: хм
[13:58:26] _lorien: mishok13, гм, ну и пусть возвращает что-либо, просто если интерпретатор видит, что чувак не написал return, то хрясь Exception, так что ли нельзя?
[13:58:29] pitman: _lorien: починил. Оказалось что у меня в PYTHONPATH было прописано '/home/pitman/.egg/...' это место где я храню свои eggs и python первым грузит site.py оттуда. Тот в свою очередь os.py, но не из стандартной библы, а из текущей папки. После чего получаем эксепшн. Но видим его только при запуске python -v
[13:58:30] xN: путаюсь залогинится на сайте уже 2 мин висит
[13:58:51] mishok13: _lorien, да ты ебнулся
[13:58:53] mishok13: :)
[13:58:55] red-agent: под NULL - подразумевался null pointer
[13:59:10] xN: пытаюсь*
[13:59:11] red-agent: который зачастуй репрезентируется в value, одним битом 0
[13:59:15] _lorien: о да, холивар про NULL в студию =)
[13:59:23] red-agent: tilarids: письку с пальцем не путай =)
[13:59:32] red-agent: _lorien: какой нафиг холивар?
[13:59:49] _lorien: mishok13, я не C программист, я не понимаю, в чём проблема Exception кидать, если нету return. Я так понял, ты про техническую проблему говорил.
[14:00:14] mishok13: _lorien, то есть ты хочешь, чтобы парсер ругался на отсутствие return?
[14:00:20] _lorien: да, именно
[14:00:39] _lorien: red-agent, ну, показалось, что холивар ща будет про null
[14:00:42] mishok13: о_О
[14:00:55] red-agent: _lorien: и тогда тебе в каждой функции, даже в тех, которые ничего не возвращают прийдется explicitно возвращать что-нибудь
[14:00:56] mishok13: зачем?!
[14:01:12] _lorien: а, блин, точно
[14:01:17] red-agent: hello C, bb python
[14:02:19] mishok13: скорее, хело чистая функциональщина
[14:02:35] red-agent: скорее незнание мат.части ;)
[14:06:16] _lorien: хм
[14:06:44] _lorien: тогда можно было бы возвращать EVIL_ANSWER который при любой попытке что либо сделать с ним выдавал бы Exception!
[14:06:55] mishok13: гениально
[14:06:59] mishok13: пойди поспи
[14:07:05] _lorien: чо опять не так? )
[14:07:18] mishok13: тебе уже возвращают None
[14:07:20] red-agent: _lorien:попробуй что-то сделать с None
[14:07:23] mishok13: сделай с ним что-нибудь
[14:07:30] tilarids: red-agent:
[14:07:30] _lorien: я не про это
[14:07:35] tilarids: 18.1/4 --- The macro NULL is an implementation-defined C++ null pointer constant in this Internnational Standard (4.10). --- Footnote says: --- Possible definitions include 0 and OL, but not (void*)0. ---
[14:08:03] mishok13: tilarids, мы про C или C++?
[14:08:03] _lorien: я сделал функцию:
def foo():
if some_condition: return False
if another_condition: return False
а в конце забыл сделать return True
[14:08:05] tilarids: В сях вроде тоже самое
[14:08:06] red-agent: lol
[14:08:09] red-agent: мы говорим про Си
[14:08:18] tilarids: я не знаю стандарта С
[14:08:23] red-agent: там NULL - это не максров, а именно указатель в никуда
[14:08:26] _lorien: возвращался None и портил мне всё т.к. я ожидал, что будет True, который я забыл возвращать!
[14:08:39] red-agent: tilarids: ну и нахуй пездеть тогда, скажи друг любезный? =)
[14:09:02] mishok13: tilarids, #define NULL ((void *) 0)
[14:09:10] _lorien: я делал во внешнем коде банальное сравнение на истину и получалось, что if foo() возвращал False для этого None, в случае же EVIL_ANSWER я бы схавал Exception
[14:09:12] mishok13: это в си
[14:09:17] mishok13: сравни с плюсами
[14:09:25] gigimon: привет всем
[14:09:33] red-agent: _lorien: ну, для этого есть дебаггеры
[14:09:38] _lorien: опопа, таки холивар про NULL, я же грил =)
[14:09:38] red-agent: чтоб такие ошибки ловить
[14:09:53] red-agent: от таких ошибок не застрахован никто, внимательно писать код нужно в таких местах
[14:10:00] mishok13: _lorien, чинить надо в первую очередь в себе ошибки ;)
[14:10:04] _lorien: red-agent, дебагер это хорошо, но почему бы не облегчить жизнь программисту? А то как бы и в PHP можно с дебагером что-то работающее написать
[14:10:19] mishok13: _lorien, это не облегчение, а пиздец
[14:10:32] red-agent: _lorien: бля, в python жизнь программисту и так облегчена до предела
[14:10:37] red-agent: возьми на Си покодь
[14:10:45] _lorien: не пойму, чем это пиздец, это в zen вписывается, явное лучше неявного
[14:11:18] _lorien: вы часто юзаете результат функций, где неявно None возвращаете?
[14:11:31] red-agent: да =)
[14:11:36] _lorien: Вернее, я не особо вижу удобства опускания return None
[14:11:56] red-agent: удобство - это второстепенно
[14:12:00] red-agent: главное - логика
[14:12:10] _lorien: да это ваще игра слов какая-то
[14:12:11] red-agent: функция, в которой нету return - не возвращает ничего
[14:12:19] red-agent: а в питоне ничего - это None
[14:12:23] _lorien: нет
[14:12:28] _lorien: это игра слов
[14:12:33] red-agent: а посколько функция ДОЛЖНА возвращать что-либо, то она возвращает None
[14:12:57] _lorien: когда ты говоришь про ничего, это игра слов, если ты назвал ничего, то это уже не ничего, и то что я сказал, это тоже игра слов
[14:13:40] red-agent: ну, в общем, тут диагноз ясен
[14:13:41] red-agent: =)
[14:13:46] _lorien: пойду на велосипеде покатаюсь :-/
В общем, я не особо понял, чем так круто неявное возвращение None )
[14:14:26] Большой Лис: _lorien, отсыпь перед отъездом
[14:14:28] Большой Лис: ;)
[14:14:50] mishok13: бля
[14:15:07] mishok13: просто пиздец
[14:15:23] mishok13: что же мне, все in-place методы украшать return None?
[14:15:35] wiz: - Это безумие!
- Это ПАЙТОН!!11
[14:15:46] _lorien: можно пример in-place метода?
[14:15:50] mishok13: list.sort
[14:15:57] mishok13: опача, да?
[14:16:21] mishok13: и чтобы ты вот ничего с результатом не делал, тебе возвращают None
[14:16:52] _lorien: чё-то я не понял, можно подробнее плиз?
[14:17:08] _lorien: ну возвращает он None и что?
[14:17:46] mishok13: l = l.sort() #если ты полный идиот и не понимаешь, что ты делаешь
l[0] # упс!
[14:17:56] wiz: _lorien, кто принимает тот None, который ты на той стороне возвращаешь?
[14:18:16] tilarids: лориен не против возвращения None. Он против неявного возвращения None, как я понимаю
[14:18:17] wiz: ой
[14:18:23] _lorien: да
[14:18:29] tilarids: тогда пример не канает
[14:18:42] wiz: А что надо возвращаеть когда ничего не возвращается? (8
[14:18:47] wiz: RuntimeError ?
[14:18:55] _lorien: да, Exception
[14:19:07] mishok13: тогда у функции нету значения возврата
[14:19:07] _lorien: когда нет строки return в коде
[14:19:21] wiz: тю.. это уже бред
[14:19:31] _lorien: как нету? EVIL_VALUE она вернёт, если не было return
[14:19:39] _lorien: который выдаст Exception при любой работе с ним
[14:19:40] mishok13: _lorien, а что ты предлагаешь делать с функциями, которые только exception бросают?
[14:19:51] mishok13: писать там принудительно return None?
[14:19:54] tilarids: единственное объяснение этого факта, которое я могу придумать - питон язык динамический, компайл-чеков у него нет, так что такое неявное поведение уменьшает количество эксепшенов.
[14:19:57] wiz: mishok13, бросать exception (=
[14:20:11] _lorien: mishok13, я имею в виду
[14:20:29] _lorien: что надо заменить return None (если не было return написано) на return EVIL_VALUE
[14:20:40] _lorien: просто если ты не используешь этот EVIL_VALUE потом, то всё ок
[14:20:59] mishok13: def foo(bar):
if bar != 42:
raise FourtyTwoErrorMismatch
else:
raise Exception
[14:21:01] _lorien: а если используешь, то что-то тут не так, будь добр напиши в функции return None или то, ЧТО ТЫ ЗАБЫЛ ТАМ НАПИСАТЬ
[14:21:09] mishok13: где тут ретурн вставлять?
[14:21:13] wiz: _lorien, так ты хочешь?
def greedy(): pass
greedy() --> ok.
a = greedy() --> exception!
[14:21:14] _lorien: нигде
[14:21:16] mishok13: давай, расскажи нам
[14:21:19] _lorien: не надо там ничего вставлять
[14:21:25] mishok13: но ты же сказал, без return нет пути
[14:21:40] _lorien: Гм, попробую ещё раз объяснить. что я имею в виду.
[14:23:09] _lorien: Рассмотрим функцию:
def foo():
print 'asdf'
Она вернёт None
можно сделать
if not foo():
print 'not foo'
и этот код сработает
Я же предлагаю в случае, когда нету return, возвращать не None, а EVIL_VALUE, которое выдаёт Exception при любой работе с ним т.е.
if not foo():
выдаст Exception
[14:24:00] _lorien: точно так же для функции:
def foo():
raise Something()
всё в силе остаётся... она неявно возвращает EVIL_VALUE к которому правда уж никак не достучаться, даже при желании т.к. результат возврата тут нельзя получить
[14:24:22] wiz: Use case какой у этого?
[14:24:57] red-agent: _lorien: возьми перепишы bool() и будет тебе счастье
[14:24:59] red-agent: наркоман бля
[14:25:03] _lorien: Чтобы уменьшить тип ошибок, когда челове забыл написать return True или return 'SOME SHIT' и вместо этого вернулся None и программа продолжила работать
[14:25:21] _lorien: у меня только что такая ошибка была
[14:25:42] wiz: сделай себе декоратор
[14:25:46] red-agent: ладно
[14:25:48] _lorien: Т.е. я пока вижу два аргумента:
за: то что я сказал
против: кому-то удобно не писать явно return, чтобы None вернуть
[14:25:49] red-agent: повторюсь
[14:25:53] mishok13: /me смеется
[14:25:56] red-agent: специально для lorien
[14:26:03] red-agent: который едет в броне-поезде
[14:26:20] _lorien: * на броневелосипеде
[14:26:21] red-agent: ты слышал деточка о таком понятии, как Л О Г И К А?
[14:26:40] _lorien: а по существу можно? )
[14:26:43] red-agent: ок
[14:27:07] wiz: г
[14:27:09] red-agent: ты хочешь, чтоб твоя функция возвращала ЧТО-ТО, когда она должна возвращать НИЧЕГО
[14:27:13] _lorien: Если ты хочешь, сказатЬ, что раз нету return, то возвращение None - это логично, то я с тэтим не спорю
[14:27:19] pitman: _lorien: разрулил. Когда ставишь eggs в переопределенную папку (для это нужно прописать префикс в ~/.pydistutils.cfg), то там же создается site.py, который загружается первее всего. Он делает import sys, imp,os,os.path и проверяет os.environ.get(PYTHONPATH). После этого добавляет eggs в sys.path. Так вот проблема была в том, что на момент когда делался import sys,imp,os,os.path - sys.path содержал ['',$PYTHONPATH,...] и поэтому os.py импортировался из текущей папки. После чего site.py вылетал с эксепшеном, который не выводился питоном, но при запуске python -v я его отловил.
[14:27:37] red-agent: таким образом, твоя функция *implicitно* возвращает значение
[14:28:11] _lorien: red-agent, а возвращение EVIL_VALUE это не *implicitно*?
[14:28:39] red-agent: именно =)
[14:28:46] red-agent: притом, что возвращатся не должно ничего
[14:28:58] red-agent: но все-же, неявно возвращается EVIL_VALUE
[14:29:02] wiz: /me считает, что замедление вызова функций в языке не стоит того, чтобы менять штаны програмисту
[14:29:03] _lorien: я не вижу различий между None и EVIL_VALUE.. ну сделай EVIL_VALUE наследником от None )
[14:29:39] red-agent: ну, давайте вобще уберем весь семантический сахар из питона
[14:29:46] red-agent: где нубы ошибаются
[14:29:46] wiz: синтактический
[14:29:47] red-agent: =)
[14:29:51] red-agent: семантический
[14:29:51] _lorien: это уже не по существу )
[14:29:57] red-agent: ну почему же? :)
[14:30:08] red-agent: давай сделаем, чтоб if string - плевался эксепшоном
[14:30:14] red-agent: и будет if len(string)>0:
[14:30:34] Большой Лис: _lorien, попытка наследования от None :)
TypeError: Error when calling the metaclass bases
cannot create 'NoneType' instances
[14:30:38] wiz: red-agent, if len(bool(string))>4:
[14:30:46] _lorien: потому что None так спроектировали
[14:31:01] _lorien: ничто не мешает спроектировать, чтобы он давал EVIL_VALUE наследоваться, думаю
[14:31:19] red-agent: бля
[14:31:23] red-agent: _lorien: покодь вон на Си
[14:31:33] red-agent: оно из тебя выбьет подобную дурь
[14:31:58] red-agent: там ты будешь столько писать explicitного кода, что тебя еще тошнит по 3 раза в день буде
[14:32:00] red-agent: т
[14:32:02] red-agent: от его количества
[14:32:04] _lorien: red-agent, это вопрос балланса: какую порцию сахара пихать в язык, поэтому утрировать тут не особо имеет смысла, мне кажется
[14:32:33] _lorien: я лично не могу припомнить, где бы я использовал неявный None, может быть, у меня плохая память, просто
[14:32:47] red-agent: может быть маленький опыт просто?: )
[14:32:49] _lorien: всё, я точно пошёл кататься на велосипеде )
[14:33:13] red-agent: и ты использовал нагроможденную конструкцию с try..except, где можна было использовать неявное возвращение None
[14:34:26] red-agent: напримем if d.get(key): вместо try: в[key] .. except KeyError: ..
[14:34:34] _lorien: опыт, опыт, я тоже могу сказатЬ, мол, у тебя мало опыта, ты не видишь крутости моего предложения, тока какой смысл в таком ракурсе говорить?
[14:34:55] red-agent: я тебе выше привел аргумент в пользу моего довода
[14:35:16] _lorien: d.get это stdlib, вообще не понял, при чём тут наша дискуссия
[14:35:49] _lorien: поясни свой пример, я не понял, что тут к чему
[14:36:10] _lorien: some_dict.get('foo') я часто юзаю, да
[14:36:11] wiz: _lorien, у тебя на велосипеде комуникатор чтоль?
[14:36:25] _lorien: это stdlib, в ней можно написать возвращение None и что?
[14:36:52] _lorien: ладно я выйду из жабера лучше, а то не могу оторваться, пойду кататься :-/
[14:45:19] mishok13: у лорьена все в итоге упирается в то, что такая функция:
In [88]: def foo(bar):
....: if bar == 'spam':
....: return 'eggs'
должна будет возвращать на не if-ветке EVIL_NONE
[14:46:20] mishok13: получается, код в виде if foo('huis'): baz() приведе к исключению
[14:46:23] mishok13: на пустом месте
[14:46:26] mishok13: гениально
[14:51:08] Jekel: жжж... плодит у меня треадинг процессы сцуко..
[14:52:03] Jekel: ы. а если сказать СетДемон то нет.
[14:52:04] Jekel: странно
[14:52:15] Jekel: в чем фишка?
[14:52:20] Jekel: где собако зарыто?
[14:52:30] red-agent: я ж тебе сцуко в самом начале говорил
[14:52:52] Jekel: ты эта, не ругайся в мою сторону
[14:53:21] red-agent: угу, а еще не дышать в "твою стороны" и называть на Вы?
[14:53:35] Jekel: не сравнивай вежливость с какой то ахинеей уже
[14:53:53] red-agent: а ты не сравнивай комплексы с вежливостью
[14:54:05] red-agent: вежливость - это открыть дверь, впереди идущей даме
[14:54:07] red-agent: =)
[14:54:10] Jekel: о да. "сцуко" очень культурное слово наверное в твоем понимании.
[14:54:46] red-agent: здесь не чан искусствоведов
[14:54:58] gigimon: во теслиб сказали сука, тогда да, обидно... сцуко скорее это так, необидное должно быть
[14:55:16] Большой Лис: искустовведов :D
[14:55:32] wiz: искусновводов
[14:55:46] red-agent: вкустывводов
[15:07:28] _lorien: короче d.get левый пример )
[15:07:32] _lorien: не в тему какбе
[15:07:47] _lorien: т.к. get это функция языка, ничто не мешает там написать return None
[15:09:02] tilarids: лориен, подобное поведение наблюдается в дельфи, которое ты хочешь. Попробуй :)
[15:09:36] mishok13: и в C
[15:09:42] mishok13: ;)
[15:09:48] tilarids: не совсем ;)
[15:09:54] mishok13: ну вообще да, не совсем
[15:09:55] gigimon: _lorien: быстро покатался
[15:11:31] _lorien: я не то, что хочу, я просто это высказал на обсуждение, а мне какие-то примеры приводят не в тему и говорят, что это страшно и ужасно
[15:14:27] _lorien: по идее это можно посчитать, взять ту же django посчитать в скольки функциях нету return, затем посчитать в скольких местах используется неявный None из этих функций, толко я хз, как это сделать.
[15:14:59] red-agent: бля
[15:15:12] red-agent: давайте менять теперь каждый tricky момент, где ты лоханешся =)
[15:15:51] tilarids: посчитать количество отсутствующих ретурнов невозможно, можно подсчитать только во время выполнения
[15:16:01] tilarids: пример давал mishok13 с эксепшнами
[15:16:21] _lorien: я не понял, в чём был смысл примера
[15:16:31] _lorien: что он доказывали или опровергал
[15:18:07] tilarids: я сейчас привел его только как пример того, что нельзя ретурны посчитать
[15:18:34] _lorien: Хм, берём фунцию, если в конце нет return, то это искомая функция
[15:18:45] _lorien: она неявно возвращает None
[15:19:00] _lorien: вот такой подчёт, что не так? )
[15:19:15] tilarids: а если в конце raise MFException?
[15:19:32] _lorien: см. мой предыдущий пост
[15:20:03] _lorien: хм, не, надо подумать
[15:20:11] tilarids: какой именно, их много?
если идет эксепшн, разве у функции есть возвращаемое значение?
[15:20:51] tilarids: даже в С++ и подобных языках компиятор не всегда может разобраться в том, будет ли ретурн или не будет
[15:21:29] _lorien: да, трудно подсчитать
[15:21:32] wiz: народ, вы тупите
[15:21:38] wiz: не надо ничего считать (=
[15:22:04] wiz: встретился конец кода - push EVIL_VALUE
[15:22:04] _lorien: ок, раз ты просишь, мы не будем считать, так уж и быть
[15:22:17] wiz: вы байткод функции видели?
[15:22:28] _lorien: неа
[15:22:41] wiz: посмотрите на досуге. очень интересно
[15:22:50] _lorien: wiz, вот раз ты видел байткод, что ты думаешь про мою идею )
[15:23:10] wiz: реализуется тривиально (см.выше)
[15:23:15] wiz: но сама идея не нравится
[15:23:20] wiz: я ленив (8
[15:25:22] _lorien: А зачем тогда надо делать, str(1) == 'asdf'?
Мы же сцуко ленивые, давайте как в PHP сделаем... как это называется... слабая типизация... или как там?
[15:25:26] tilarids: мой довод против такой evil value - раз это не может подсчитать машина, то как разберется человек? Вполне кучу ошибок можно наделать. Скорее, вместо того, чтобы думать про evil_value, нужно просто всего ожидать от функции, которую ты вызываешь. В том числе и None и exception'a
[15:26:26] _lorien: tilarids, ты мне предлагаешь тестировать каждый раз, а не вернула ли функция None, чтобы подстраховаться? )
[15:27:21] _lorien: tilarids: мой довод против такой evil value - раз это не может подсчитать машина, то как разберется человек?
Не надо ни в чём разбираться, просто заменяем неявный return None на return EVIL_VALUE и получаем Exception, когда пытаемся с ним работать.
[15:28:39] tilarids: тю, ты ж питонщик. Сделай декоратор, который это будет проверять, на тех функциях, на которых тебе нужно не None.
[15:29:24] tilarids: если заменить return None на return EVIL_VALUE то нужно будет вместо if писать try.
[15:29:33] tilarids: В принципе, разницы особо никакой
[15:29:37] _lorien: где??
[15:29:51] _lorien: где тат нужно писать??? БЛяТЬ, ДА НЕ БЫЛО, НЕ БЫЛО РАЗРЫВОВОООВВВ!
[15:30:19] _lorien: не было, с ноября по апрель, не было НИ ЕДИНОГО РАЗРЫВА!!
[15:30:39] tilarids: А ты хочешь, чтобы эксепшн от твоего evil_value все ронял нафиг?
[15:31:08] _lorien: lorien@lorien /web/tripster.ru $ php -r "print var_dump(1 == '1');"
bool(true)
Вот в php удобно как сравнивать, не то что в python. Давайте в python так сделаем :-/
(это типа сарказм)
[15:31:20] mishok13: _lorien, это
[15:31:31] mishok13: можешь свою идею в python-ideas запостить
[15:31:35] wiz: +1
[15:31:56] mishok13: учти, что в 2.x идею твою точно не примут
[15:32:06] _lorien: вот возьму и запощу.... ух как запощу =)
[15:32:14] mishok13: так чего ты ждешь?
[15:32:31] mishok13: я серьезно
[15:32:52] _lorien: мне надо щас кое-что доделать, а с английским у меня плохо, поэтому я буду долго продумывать текст
(я тоже серьёзно)
[15:40:33] _lorien: red-agent: девушка пишет, что у неё quip тоже не подключается, пишет про неправильный пароль, возможно просто глюк и с твоей icq всё ок
[15:41:57] mimmuror: lorien: сейчас ася у всех лежит)
[15:42:50] Большой Лис: у меня полчаса назад уже говоила "неправильный пароль"
[15:43:01] xa4a: асикукапец
[15:43:23] Большой Лис: и у 2\3 офиса такая же комбина
[15:43:26] mishok13: у вас у всех на асику6
[15:43:33] mishok13: стопудов
[15:43:36] mishok13: *не
[15:44:22] xa4a: копыто туд
[15:44:30] Большой Лис: пиджин
[15:44:41] mishok13: у меня вот пиджин
[15:44:47] mishok13: и тоже не подключается :)
[15:44:50] xa4a: /me потыкал mishok13. а что с 6?
[15:44:55] xa4a: неужели пашед?
[15:45:05] mishok13: да вы чо, не знаете как AOL работает?
[15:45:07] Typhon: говорят протокол сменили
[15:45:11] Typhon: icq
[15:45:14] xa4a: пруфпик!
[15:45:15] Большой Лис: гыгы
[15:45:24] mishok13: выпускают обновление для своего клиента, а потом меняют протокол
[15:45:26] Большой Лис: не нифига
[15:45:31] mishok13: десятки раз такое было
[15:45:38] Большой Лис: на соседнем компе у чуваки qip и работает
[15:45:40] Typhon: http://tritopora.livejournal.com/273432.html
[15:45:56] Typhon: у меня крыса (rnq) тоже пашет.
[15:46:06] mimmuror: Большой Лис: скажи ему чтоб перелогинился)
[15:46:34] xa4a: "Я так понимаю, злобные хозяева мерзкой ICQ опять поменяли протокол" первые три слова - ключевые
[15:46:56] Vit@liy: Так наверное и есть, глюки глобальные
[15:46:59] Vit@liy: Привет всем
[15:47:00] mishok13: жж у нас уже пруфлинк
[15:47:03] _lorien: mishok13: десятки раз такое было
а разве кто-то спорит? )
[15:47:10] Vit@liy: квип правда работает
[15:47:27] Большой Лис: дак штука в том что у части работает а у части нет
[15:47:35] Typhon: ну я ж говорю, слухи только)
[15:47:37] Большой Лис: QIPсмысле
[15:47:38] Vit@liy: даже так?
[15:47:54] Vit@liy: у меня в ростере с копыта люди еще есть. С транспорта никого
[15:48:00] Большой Лис: наверно всё же, у них какой то глобальный ацкопиздец происходит
[15:48:15] Vit@liy: Джимм тоже в сети
[15:48:37] xa4a: на пхпабре пишуд работает "безопасный вход" кипа
[15:49:06] Typhon: а на МКС между тем засорился туалет
[15:49:20] Большой Лис: :)
[15:49:34] _lorien: !google мкс засорился туалет
[15:49:52] Vit@liy: не подскажите в какую сторону копать по поводу работы в питоне с буфером обмена?
[15:49:53] Typhon: http://www.fontanka.ru/2008/05/28/012/
[15:50:21] _lorien: Vit@liy, если win, то можно через win32api, думаю
[15:50:43] xa4a: если линухс - xclip
[15:50:45] Vit@liy: а линукс?
[15:50:48] Vit@liy: спсибо
[15:50:53] Большой Лис: о
[15:50:56] Большой Лис: а я зашёл
[15:50:59] Большой Лис: с пиджина
[15:51:35] gigimon: а подскажите, поулчить дату и время через datetime, только так: datetime.datetime.now().isoformat() ?
[15:51:37] Vit@liy: но не с транспорта?
[15:51:46] gigimon: в виде строки
[15:52:03] mishok13: и я зашел :)
[15:52:07] _lorien: gigimon, strftime
[15:52:11] gigimon: спс
[15:52:15] mishok13: ненадолго
[15:52:49] gigimon: эм
[15:53:08] Большой Лис: gigimon, например так :) а можно да strftime
In [5]: str(datetime.datetime.now())
Out[5]: '2008-05-28 15:52:41.810542'
[15:54:02] gigimon: Большой Лис: тьфу, я идиот, я так попробовал сразу, но у now забыл () =(
[15:54:07] gigimon: /me ламир
[15:57:07] Vit@liy: xclip - это сторонний модуль?
[15:58:40] _lorien: !google python xclip
[15:58:58] _lorien: блин, да что за нерелевальщина пошла %-)
[15:59:21] Vit@liy: "Xclip это очень простое приложение. Почему оно было неизвестно пользователям Линукс до сих пор - остается вне моего понимания.
Все просто, оно позволяет вам размещать то, что вы хотите в буфере обмена. Точка"
[16:00:28] Vit@liy: кажется нашел таки пример
[16:02:52] xa4a: xclip - не питонное
[16:02:54] xa4a: консольное
[16:03:04] xa4a: просто $ echo "huis" | xclip
[16:05:26] mishok13: subprocess в помощь, в общем
[16:09:59] Jekel: счастье есть, нашел вменяемый туториал http://heather.cs.ucdavis.edu/~matloff/Python/PyThreads.pdf
[16:10:12] gigimon: а для urllib.urlretrieve() можно проксю указатЬ?
[16:10:21] gigimon: а то в urlopen это как параметр
[16:13:33] _lorien: The following example uses an explicitly specified HTTP proxy, overriding environment settings:
>>> import urllib
>>> proxies = {'http': 'http://proxy.example.com:8080/'}
>>> opener = urllib.FancyURLopener(proxies)
>>> f = opener.open("http://www.python.org")
>>> f.read()
open можно на retrieve заменить... пример из мана, между прочим...
[16:14:23] _lorien: а просто для urllib.urlretrieve судя по ману нельзя
[16:14:47] Большой Лис: Кроме того, в библиотеке OpenSSL найдено несколько проблем безопасности, которые можно использовать для вызова краха серверного или клиентского приложения, использующих OpenSSL реализацию протокола TLS. Проблема устранена в релизе OpenSSL 0.9.8h, выпущенном несколько часов назад.
[16:14:55] gigimon: тогда я как понимаю, надо делать open, и потом эту поулченную страницу пистаь в файл
[16:15:26] _lorien: ага
[16:15:33] Большой Лис: интересно, ejabberd откуда tls берёт из openssl или из gnutls?
[16:16:13] Jekel: при работе с threading.Thread, лучше треды создавать на базе этого класса, или простыми обьектами и запускать через threading.Thread(target=обьект.метод).start() ?
[16:16:18] mishok13: http://failblog.files.wordpress.com/2008/05/all-aboard-the-failavator_sm.jpg?w=500&h=358
[16:16:43] (ZioN,): шо ж с аськой твориццо :(
[16:16:55] Большой Лис: смерть ацке!
[16:17:15] Vit@liy: воч что с асей - http://net.compulenta.ru/358383/
[16:17:49] _lorien: Jekel: при работе с threading.Thread, лучше треды создавать на базе этого класса, или простыми обьектами и запускать через threading.Thread(target=обьект.метод).start() ?
как тебе удобней, так и делай
[16:19:20] _lorien: а только мне непонятно, что на той картинке? )
[16:19:21] (ZioN,): Vit@liy: я уже думал, аккаунт увели...
[16:19:27] gigimon: нет
[16:19:33] gigimon: у многих глюки
[16:19:38] gigimon: вклчюите безопасный вход)
[16:19:48] wiz: у меня через pyicq-t работает всё
[16:20:00] mishok13: _lorien, на какой "той"?
[16:20:41] xa4a: /me подёргал gigimon за кип
[16:20:47] gigimon: хей
[16:20:49] gigimon: я не юзай квип
[16:20:55] gigimon: я миранду юзаю)
[16:20:58] gigimon: квипу смерть!
[16:21:05] xa4a: а, гм..
[16:21:09] gigimon: xa4a: (:
[16:21:17] _lorien: mishok13: http://failblog.files.wordpress.com/2008/05/all-aboard-the-failavator_sm.jpg?w=500&h=358
на этой )
[16:21:19] gigimon: xa4a: в квипе тоже есь где то безопасный вход
[16:21:21] xa4a: а в копыте нет безопасного для аськи :\
[16:21:40] mishok13: _lorien, кнопка "вниз" сверху
[16:21:43] Vit@liy: может там по умолчанию ssl?
[16:21:49] mishok13: кнопка "вверх" снизу
[16:21:56] xa4a: врядли..
[16:22:08] (ZioN,): gigimon: так и через пиджин не заходит)
[16:22:09] xa4a: в копыте асику недопиленное. особенно в третьекедовом
[16:22:11] _lorien: а..
[16:22:26] Vit@liy: у меня сейчас в ростере человек с копыта сидит
[16:22:36] gigimon: (ZioN,): ну и в нем ищите...
[16:22:51] gigimon: Vit@liy: а у кого то и не глючит
[16:22:51] Typhon: а win32api входит в стандартный набор?
[16:23:01] gigimon: винлы
[16:23:11] gigimon: наверно входит
[16:24:01] mishok13: Typhon, в стандартный набор чего?
[16:24:24] Typhon: python'а
[16:24:30] Typhon: в стандартну библиотеку
[16:24:36] mishok13: нет
[16:24:46] mishok13: есть pywin32
[16:25:08] mishok13: или просто pywin
[16:25:12] mishok13: не помню точно
[16:25:13] Vit@liy: по-моему входит, на импорт не ругается
[16:25:23] Typhon: у мня ругается на import win32api
[16:25:34] mishok13: Vit@liy, на импорт чего?
[16:25:36] Typhon: на pywin32 натыкался, да.
[16:26:12] Vit@liy: >>> import win32api
>>> dir(win32api)
['AbortSystemShutdown', 'Apply', 'Beep', 'BeginUpdateResource', 'ChangeDisplaySettings', 'ChangeDisplaySettingsEx', 'ClipCursor', 'CloseHandle', 'CopyFile', 'DebugBreak', 'DeleteFile', 'DragFinish', 'DragQueryFile', 'DuplicateHandle', 'EndUpdateResource', 'EnumDisplayDevices', 'EnumDisplayMonitors', 'EnumDisplaySettings', 'EnumDispl.......
[16:26:14] _lorien: win32 входит в activestate python
[16:26:48] _lorien: Vit@liy, может быть, у тебя он как раз?
[16:27:16] Vit@liy: нет
[16:27:59] Vit@liy: а, может я потом ставил его, pywin32 - это точно не оно?
[16:28:07] mishok13: http://python.net/crew/mhammond/win32/
[16:28:11] mishok13: это вот оно
[16:28:30] mishok13: к основной поставке питона никакого отношения не имеет
[16:28:37] Typhon: он по win32api импортируется 7
[16:28:57] Typhon: по import win32api
[16:29:09] Vit@liy: значит когда-то зачем-то поставил..
[16:30:23] Typhon: http://www.python.org/doc/faq/windows/#how-do-i-emulate-os-kill-in-windows
[16:30:54] mishok13: и?
[16:31:34] xa4a: !google how to use win32api python
[16:33:11] Typhon: mishok13, стандартная документация, про сторонние модули ничего не говорится
[16:33:32] mishok13: это документация?
[16:33:38] mishok13: это так, заметки на полях
[16:33:47] mishok13: http://www.google.com/search?q=site%3Adocs.python.org+win32api
[16:33:53] mishok13: вот здесь где win32api?
[16:34:10] mishok13: нету -- значит нету в стандартной поставке
[16:37:11] gigimon: http://dumpz.org/1249/ --- сильно коряво написан скриптик, который должен скачивать файлик и сохранять его?
[16:39:35] xa4a: \\routes\\
[16:39:48] xa4a: s/\\/os.path.sep/
[16:39:51] mishok13: если это одноразовый скрипт, который импортировать наверняка никто не будет, то нафиг проверка на __name__?
[16:40:03] gigimon: заготовка...
[16:40:28] gigimon: xa4a: а имеет ли смысл? скриптег ток для винды
[16:40:34] gigimon: я как понимаю это дял этого?
[16:40:38] xa4a: os.mkdir(save_path) ?
[16:41:01] mishok13: xa4a вот правильно подметил
[16:41:10] gigimon: угу
[16:41:22] gigimon: это были эксперименты... забылось поменять... спасибо
[16:41:27] gigimon: ну а атк в общем?
[16:41:36] mishok13: а так, набросок как набросок
[16:41:43] gigimon: /me пробелма с названием переменных
[16:41:46] gigimon: (:
[16:41:49] mishok13: к 10 строчкам как-то придираться и не тянет :)
[16:41:57] gigimon: :-[
[16:42:54] _lorien: ща я придерусь )
[16:43:06] _lorien: щ_Щ
[16:43:15] xa4a: "Not open file"
[16:43:19] xa4a: ниправильно
[16:43:22] mishok13: :)
[16:43:47] gigimon: ну
[16:43:56] gigimon: xa4a: и как правиьно?)
[16:44:07] gigimon: ну я бы понял, т.к. скрипт дял меня...
[16:44:09] _lorien: save_path = os.getcwd() + "\\routes\\" + datetime.datetime.now().strftime("%d-%m-%y")
можед лучше юзать os.path.join?
[16:44:17] xa4a: т.к. а) не по англицки как-то (думаю имелось в виду file not opened) б) там урл, а не файл
[16:44:30] _lorien: proxy = {"http":"http://192.168.112.254:8080"}
нет пробела после :, как советует PEP8
[16:44:41] gigimon: xa4a: урл на файл
[16:44:48] _lorien: file_inet = urllib.urlopen(url_file,proxies=proxy)
нет пробела после запятой!
[16:45:10] mishok13: это пожалуй, да
[16:45:12] xa4a: а вообще можно from os import getcwd, mkdir
[16:45:16] mishok13: запятые надо ставить таки
[16:45:22] xa4a: надо пробелы ставить
[16:45:24] mishok13: тьфу, пробелы
[16:45:26] _lorien: os.mkdir(os.getcwd() + "\\routes\\" + datetime.datetime.now().strftime("%d-%m-%y"))
выше была такая точно строчка, нафига два раза одно и то же o_O
[16:45:34] gigimon: _lorien: уже поправлено)
[16:45:40] mishok13: _lorien, чтобы разные строки получились :)
[16:45:55] xa4a: краудсорсинговое код-ревью..
[16:46:12] _lorien: file_save = file("%s\\torg1.kml"%save_path,"w+")
это ваще perl какой-то =)
[16:47:16] gigimon: вокруг % пробелы?
[16:47:22] mishok13: /me какой-то добрый сегодня и критиковать никого не хочется
[16:47:23] _lorien: file_save = file("%s\\torg1.kml"%save_path,"w+")
file_save.writelines(file_inet.readlines())
file_save.close()
====>
open(os.path.join(save_path, 'torg1.kml'), 'w+').write(file_inet.read())
[16:47:24] gigimon: и после запятой
[16:47:54] gigimon: оптимизировал...
[16:47:58] mishok13: _lorien, я бы тебя на код-ревью за такие однострочники заставил от пола отжиматься
[16:48:07] mishok13: что за дурацкая экономия строчек
[16:48:16] xa4a: а ещё, после % тьюпл бы в скобки взять
[16:48:34] _lorien: окей, вынесем вычисления имени файла в отдельную строку
[16:49:00] _lorien: filename = os.path.join(save_path, 'torg1.kml'
open(filename, 'w+').write(file_inet.read())
[16:49:14] mishok13: ну это уже ладно
[16:49:35] gigimon: закрыват ьфайлы не надо за собой? или само?
[16:49:45] xa4a: само, но надо
[16:49:56] _lorien: или в py2.5 можно:
with open(filename, 'w+') as fh:
fh.write(file_inet.read())
=)
тогда надо сделать import из __futer__ какой-то штуки
[16:50:01] mishok13: в данном случае само
[16:50:14] mishok13: from __future__ import with_statement
[16:50:46] mishok13: так ты не полагаешься на gc
[16:50:48] _lorien: if __name__ == "__main__":
ну и вся программа в этом блоке - это, конечно, остроумно =)
[16:51:08] mishok13: а четко на контексты entry, do, exit разделяешь
[16:51:14] mishok13: _lorien, я уже это говорил
[16:51:16] mishok13: :)
[16:51:27] _lorien: ну я просто для комплекта, чтобы по полной придраться =)
[16:51:34] gigimon: не выносить же все по функциям, ибо смысл
[16:51:46] gigimon: или убрать ваще if
[16:51:50] mishok13: gigimon, убери нахуй иф
[16:52:02] mishok13: ты же не модуль, а просто скриптец написал
[16:52:05] _lorien: datetime.datetime.now()
опа, опа
мне кажется обычно делают from datetime import datetime
и потом в коде уже datetime.now()
[16:52:16] mishok13: вряд-ли ты будешь его из других программ вызывать
[16:52:27] mishok13: _lorien, а разница?
[16:52:40] mishok13: в экономиии 20 символов?
[16:52:42] _lorien: datetime.datetime.now().strftime("%d-%m-%y"))
по мне так как-то чересчур длинно )
[16:52:45] mishok13: :)
[16:52:50] pit: !google xmpp icq transport
[16:52:51] mishok13: ну это уже придирка
[16:53:41] gigimon: http://dumpz.org/1250/
[16:53:51] gigimon: с файлами мне нравится длинно
[16:53:55] mishok13: import datetime as datetime
[16:54:01] mishok13: ЧОЭТАЗАХУЙНЯ?!
[16:54:04] gigimon: мля
[16:54:06] gigimon: дада
[16:54:09] _lorien: балин, опять я умудрился в dumpz чё-то поломать, что нумерация по высоте меньше, чем код
[16:54:13] mishok13: from datetime import datetime :)
[16:54:16] gigimon: угу
[16:54:35] _lorien: #Скрипт который скачивает инфу о GPS точках с http://www.luisespinosa.com
#и сохраняет его в папку routes/date
ахтунг
[16:54:40] _lorien: камменты надо по английски писать )
[16:54:51] mishok13: _lorien, коудинг указан
[16:54:58] mishok13: можешь хоть на малайском указывать теперь
[16:55:10] _lorien: pep8 рекмоендует на английском )
[16:55:16] mishok13: _lorien, суко
[16:55:18] _lorien: а ещё после слова Скрипт нужна запятая
[16:55:19] mishok13: я тебя загрызу
[16:55:26] gigimon: ыы
[16:55:29] mishok13: /me грызет _lorienа
[16:55:43] mishok13: это ж тяпляп для домашнего использования
[16:55:51] _lorien: /me не знает, как на это реагировать, что его грызут
[16:56:00] mishok13: прикинься гранитом науки
[16:56:02] mishok13: :)
[16:56:05] gigimon: mishok13: ++
[16:56:14] gigimon: это потом
[16:56:16] gigimon: если прокатит
[16:56:29] gigimon: придется перепсиывать, чтобы он кучу скачивал и сохранял в разные файлы
[16:56:34] _lorien: > и сохраняет его в папку routes/date
может у меня пунктик, но мне кажется, что употребление слова "папка" выдаёт в пользователе виндузятника с головой =)
[16:56:49] xa4a: _lorien: а \\ ?
[16:56:53] gigimon: _lorien: да, я щас в винде!)
[16:57:00] gigimon: и скрипт для винды
[16:57:06] _lorien: xa4a, а это ваще надо было на os.path.join заменить
[16:57:13] gigimon: заменил)
[16:57:30] xa4a: о, я вот вчера спрашивал, но никто полезного не ответил ничего. в какую сторону копать, если хочется обычной админке джанговской поиск для конкретной модели свой вкрутить?
[16:57:49] gigimon: http://dumpz.org/1251/
[16:57:52] gigimon: _lorien: dct&)
[16:57:53] xa4a: пока что кажется, что надо писать свой queryset, но чего-то не оч хочется..
[16:57:57] _lorien: > os.path.join(os.getcwd(), "routes", datetime.now().strftime("%d-%m-%y"))
а нужен ли тут os.getcwd()? ты ведь и так будешь запускать из этой директории...
[16:58:24] _lorien: все пути будут относительно директории запуска, имхо, тут os.getcwd() излишен
[16:58:25] gigimon: чтоб наверняка
[16:58:31] xa4a: gigimon: после # принято пробелы ставить %)
[16:58:38] gigimon: черт :(
[16:58:52] mishok13: ыыыыы
[16:59:28] gigimon: _lorien: если оттуда просто os.getcwd() то except вылазит
[17:00:00] gigimon: поулчается либо вначало надо os.path.sep, либо путь полный
[17:00:04] gigimon: или нет?
[17:00:37] gigimon: т.к. путь сохранения получается routes\\28-05-08
[17:00:45] _lorien: try:
file_inet = urllib.urlopen(url_file, proxies=proxy)
except IOError:
print "File not open"
а я бы сделал file_data = urllib.urlopen(url_file, proxies=proxy).read()
а иначе у тебя может будет exception во время readlines, хоть я и не уверен
[17:00:57] _lorien: gigimon, и чем плох такой путь?
[17:01:05] _lorien: он относителен текущей директории
[17:01:05] gigimon: WindowsError
[17:01:14] gigimon: Message File Name Line Position
Traceback Node
<module> D:\aliens\gpsget\gpsget.py 15 Node
exceptions.WindowsError: [Error 183] Невозможно создать файл,: 'routes\\28-05-08' Node
[17:01:45] gigimon: ладно, пойду домой
[17:01:51] gigimon: спасибо за разъяснения)
[17:01:54] _lorien: хм, а чо это там два слэша обратных..
[17:02:07] _lorien: file_save = file(os.path.join(save_path, "torg1"), "w+")
file_save.writelines(file_inet.readlines())
file_save.close()
тупо выглядит )
[17:02:14] Vit@liy: работает уже все, поднялись транспорты
[17:02:17] gigimon: )
[17:06:00] Vit@liy: интересно, вечером в новостях расскажут, что аськосервер падал? :)
[17:07:47] mishok13: конечно
[17:10:55] (ZioN,): ))
[17:11:06] (ZioN,): наверно кто-то кофе пролил на сервер)
[17:11:12] Vit@liy: :)
[17:13:05] Большой Лис: @user_passes_test(lambda u: u.is_superuser)
[17:13:14] Большой Лис: вот так правильно да?
[17:13:32] Большой Лис: что бы ограничить доступ к вьюхе только одминчегам
[17:13:40] _lorien: нед
[17:13:43] mishok13: о_О
[17:13:44] xa4a: ()
[17:13:45] _lorien: ты забыл ()
[17:14:18] _lorien: Большой Лис, там же были декораторы стандартные, разве нет?
[17:14:35] Большой Лис: In [4]: r.is_superuser
Out[4]: True
[17:14:45] Большой Лис: шо то вы гоните про ()
[17:14:45] _lorien: а, это и есть декоратор оттуда =)
[17:15:59] _lorien: гоним, да :-(
[17:16:17] xa4a: это был вопрос с подвохом :(
[17:16:24] Большой Лис: :D
[17:17:10] _lorien: А, кстати, в прошлый раз никто не ответил кажется. В newforms admin branch сделали нормальную ACL, работающую на уровне объект <--> пользователь, которую можно юзать не только в админке?
[17:17:42] wiz: нет
[17:17:53] _lorien: :-(
[17:19:42] xa4a: /me думает, проще будет прикрутить к одной модели в джанго-админке свой поиск, или всё администрирование этой модели переписать руками..
[17:19:53] xa4a: со своим поиском
[17:20:11] Большой Лис: _lorien, нет
[17:20:29] _lorien: вротмненоги :-(
[17:21:19] _lorien: xa4a, ты типа хочешь в манагере переопределить операцию like__ операцию?
[17:21:31] _lorien: если, конечно, админка через неё ищёт
[17:21:59] _lorien: ой, не like__, contain__
[17:22:04] xa4a: ну э.. я хочу искать используя внешний веб-сервис >_< тоесть не только __like
[17:22:42] _lorien: ну я имею в виду, что админка будет создавать like запрос из поля поиска и его можно обрабатывать наверное в своём манагере...
[17:22:55] xa4a: хм..
[17:23:05] _lorien: т.е. я про class Admin: search_list = ['name'] или как там грю...
[17:23:14] xa4a: угу..
[17:23:15] _lorien: там можно было чё-то делать, чтобы появлялась форма поиска
[17:23:45] xa4a: да, форма появляется просто добавление search_fields
[17:23:51] xa4a: search_list
[17:23:53] xa4a: или как там
[17:24:22] _lorien: !google django admin search_list
[17:24:33] _lorien: !google django admin search_fields
[17:24:38] _lorien: опаопа )
[17:25:06] xa4a: там ничего нет о своём сёрч-бекенде
[17:29:20] mishok13: <xeLobyte> A
<habnabit_> B
<xeLobyte> C
<xeLobyte> :p
<bobf> I've never felt so smart.
[17:29:49] pit: народ дайте совет
[17:30:03] pit: кк накотить ntfs разметку
[17:30:04] slav0nic: консультация платная)
[17:30:20] slav0nic: каво?)
[17:30:59] pit: :) блин я разметку та вытинул , а вот кк обрано накатить вот вопрос
[17:31:08] xa4a: dd ?
[17:31:10] plkjm: куда вытинул?
[17:31:18] plkjm: dd
[17:31:34] xa4a: dd if=/huis/razmetka of=/dev/head
[17:31:58] pit: нет dd тут не поможет .. тк easyRecovery
[17:32:19] pit: у него собвственная разметка
[17:36:26] pit: есть идеи ?
[17:38:58] slav0nic: только суицидальные
[17:38:59] wiz: /me достал попкорн
[17:39:02] _lorien: import razmetka
razmeta.self_repair()
[17:39:33] _lorien: или разметка не твоя и ты просто запостил сообщение?
[17:39:36] xa4a: NameError: name 'razmeta' is not defined
[17:39:45] mishok13: у него разрыв в разметке, я думаю
[17:39:54] mishok13: до 28 мая не было разрывов?
[17:40:26] slav0nic: ))
[17:42:18] _lorien: >>> import razmetka
>>> razmetka.fix(fs='NTFS')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 2] No errors before May 28
[17:42:44] pit: :)
[17:43:05] pit: это типа грохнуть разметку :)
[17:44:04] mishok13: >>> import razmetka
>>> razmetka.fix(fs='NTFS')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 42] Will you please answer my answer?
[17:51:04] slav0nic: на гмейл офлайн сообщения доходят?
[17:52:18] mishok13: а почему не должны?
[17:53:05] _lorien: а мне кажется часто не доходят, у меня по работе человек на гмайле и ему часто не доходят в оффлайн
[17:58:29] red-agent: 1 ? printf("bitch") : printf("asshole");
[17:58:40] red-agent: Си и ридэбилити - понятия не совместимые
[18:00:57] xa4a: а мне привычнее видеть сначала условие, а потом выполняемые действия
[18:02:09] mishok13: red-agent, это где такой код?
[18:02:48] red-agent: да блять
[18:02:59] mishok13: и зачем там вообще условие :)
[18:03:19] red-agent: да это я чтобы синтаксис проиллюстрировать
[18:03:22] red-agent: код там другой =)
[18:04:15] mishok13: C вполне даже ридэбл можно сделать
[18:04:23] mishok13: если захотеть
[18:04:38] red-agent: угу, и получится Python 8P
[18:04:41] red-agent: с сишной семантикой
[18:04:55] mishok13: не питон, так руби :)
[18:05:06] red-agent: Си пора уже упразднять потихоньку
[18:05:17] mishok13: и что вместо него?
[18:05:28] mishok13: /me ждет предложений
[18:05:33] red-agent: ну, не кресты точно
[18:05:39] mishok13: чисто на асм писать, ога?
[18:05:39] red-agent: ибо кресты на йух
[18:05:44] Typhon: чем ()?():() не нравится?
[18:06:05] red-agent: mishok13: наоборот - что-то оо
[18:06:10] mishok13: Typhon, тем что ты мне сейчас смайлик нарисовал
[18:06:19] _lorien: это ваще три пизды какие-то )
[18:06:20] Typhon: () ? () : ()
[18:06:21] mishok13: red-agent, всё что ОО требует оверхеда
[18:06:27] red-agent: ну дык
[18:06:29] mishok13: и немаленького
[18:06:38] mishok13: пойди в embedded это скажи
[18:06:47] red-agent: ну, когда девелопили си - требования к хардвару были как-бы другие
[18:06:59] mishok13: :/
[18:07:10] red-agent: ну, эмбеддед - особенная ниша ниша
[18:07:21] red-agent: там вобще на asm частенько приходится
[18:07:29] mishok13: это чушь
[18:07:36] red-agent: хотят щас такие эмбеддед пошли - что можна было и крестах
[18:07:53] mishok13: asm только вставками
[18:08:03] mishok13: но не суть
[18:08:15] red-agent: ага, вставкми int main() а все остальное asm inline? :D
[18:08:21] mishok13: red-agent, нет
[18:08:30] mishok13: такой код уже лет 10 не пишут
[18:08:31] red-agent: ну, мы видимо говорим о разных embedded
[18:09:04] mishok13: о_О
[18:09:07] mishok13: датычо
[18:09:59] red-agent: ога
[18:10:47] mishok13: то-то я что-то не замечаю сейчас ассемблера
[18:10:55] mishok13: хотя вполне себе эмбеддед
[18:11:50] mishok13: там где это возможно -- берут основу на сях, встраивают питон и вперед, галопом по европам
[18:11:57] mishok13: а у нас битиками дорожат
[18:12:06] mishok13: ибо 128 к флэша
[18:12:29] mishok13: хорошо хоть nor, за памятью следить особо не надо
[18:18:32] _lorien: а как сделать, чтобы редактор подсвечивал HTML в клипсе? Сначала он вообще в браузере показывал, затем я назначил для *.html текстовый редактор и там нифига нет подсветки.
[18:18:49] red-agent: _lorien: эту подсветку поставить нада
[18:18:52] red-agent: чтоб она была
[18:19:03] red-agent: вместе с валидацией и прочеми вкусняЖками
[18:19:06] red-agent: WST
[18:19:15] _lorien: !google eclipse WST
[18:20:27] wiz: как в telnet задать кодировку?
[18:21:30] xa4a: wiz: putty
[18:31:44] slav0nic: >>На данный момент серверами аол отвергаются попытки авторизации из транспортов jabber-icq .
Если ситуация сохранится оба транспорта будут выключены на неопределенный срок.
хы
[18:32:26] _lorien: гыгы
[18:36:22] wiz: slav0nic, что это за бред?
[18:36:38] slav0nic: это факт
[18:37:33] wiz: чоо?
[18:38:18] wiz: у меня всё работает
[18:39:12] _lorien: у меня не работает транспорт
[18:39:18] wiz: какой?
[18:39:31] _lorien: pyicqt
[18:39:33] _lorien: или как там его
[18:40:01] wiz: хм
[18:40:06] wiz: может старый просто?
[18:40:13] _lorien: утом работал какбе )
[18:40:38] wiz: ну не знаю... у меня с 26 апреля ни одного разрыва
[18:41:11] mishok13: ы, k3b предлагает мне 58 минут записи на двд
[18:41:23] mishok13: интересно, чо он так долго будет писать?
[18:41:24] _lorien: вышел, зашёл - заработало )
[18:42:27] _lorien: mishok13, тише едешь дальше будешь
[18:43:07] mishok13: 8x это не особо медленно
[18:44:02] slav0nic: http://eyeos.org/en/
[18:45:16] mishok13: славоник, боян
[18:50:40] _lorien: при заходе в этой айос, мне три alert выскочило =)
[18:51:03] _lorien: а где там жабер?
[18:51:39] _lorien: гавно какое-то )
[18:52:19] Большой Лис: :)
[19:04:04] _lorien: вот я пиш пишу, а впереди сука эклипс вставил скобку, могу ли я что-то нажатЬ,чтобы очутиться после неё, какой-нить там shift + пробел?
[19:04:25] _lorien: кроме end конечно )
[19:05:22] wiz: стрелочку вправо (8
[19:05:37] wiz: и вроде бы эту скобку
[19:06:42] _lorien: о точно
[19:08:11] slav0nic: народ, как свободное место на лвм глянуть?
[19:08:22] slav0nic: волюм группы
[19:08:38] wiz: vgs
[19:09:38] slav0nic: а бля там НРUX ) не ко мне )
[19:09:55] wiz: hpux? ты попал (=
[19:10:11] slav0nic: да сетапят и девайсы мутят железячники В0
[19:13:01] red-agent: блядь
[19:13:15] red-agent: в прототипе у main 3 что идет?
[19:13:45] red-agent: точнее, судя по всему идет char ** с переменными окружения
[19:13:51] red-agent: непонятно какого хера
[19:16:33] _lorien: if slug:
try:
Community.objects.get(slug=slug)
except Community.DoesNotExist:
return slug
else:
тупая клипса, не туда выравняла мой else
[19:17:33] Большой Лис: _lorien, get_object_or_404(Community, slug=slug) как то полутшЭ смотрится :)
[19:17:43] Большой Лис: или там по жёсткому не надо 404?
[19:17:59] _lorien: гм, да это ваще проверка на существование какбе )
[19:18:04] _lorien: мне там нах 404 не надо )
[19:19:16] _lorien: А какой русскоязычный аналог слову slug?
Я ж не напишу: сообщество с таким slug уже существует :-/
[19:26:19] red-agent: слаг
[19:26:31] Большой Лис: шлак
[19:27:56] red-agent: молавский юмор настолько суров, что аж не смешон
[19:28:01] red-agent: *д
[19:29:11] _lorien: слаг ваще не вариант
[19:29:16] _lorien: шлак тем более
[19:46:04] _lorien: вот засада... если я дам для просмотра урлы типа /community/python/
то тогда я не могу использовать урлы /community/add/ для добавления нового коммьюнити :-/
[19:46:11] _lorien: ибо это тупо
[19:47:30] red-agent: community/by-name/python
[19:47:42] red-agent: или community/get/python
[19:48:33] _lorien: ну да, это решение напрашивается, но его минус в том, что урл вида /community/python/ очень красивый, скорее всего я его так и оставлю
[19:48:42] _lorien: а добавлять буду через /add/community/
[19:49:56] Большой Лис: можешь ты всё
[19:49:58] Большой Лис: шо ты гонишь
[19:50:58] _lorien: могу, но это будет пересечение ммм... смысловых множеств... хуй с ним, что кто-то сможет создать /community/add/ (хотя это, конечно, тупо). Самое тупое, что смотря на урл не поймёшь, то ли это community то ли это какое-то действие
[19:51:06] _lorien: Мне это вообще не нравится.
[19:51:31] red-agent: ну, большому лису это нравится
[19:51:38] red-agent: т.к. молдавский вариант во всей красе
[19:51:39] red-agent: :D
[19:51:47] Большой Лис:
(r'^/community/add/$', 'add_comunity'),
(r'^/community/(?P<comutiny_slug>\w+)/$', 'view_comunity'),
[19:51:52] Большой Лис: чо тут такого?!
[19:52:01] _lorien: Большой Лис, ну то что я выше написал, не нравится мне это )
[19:52:32] _lorien: 1) пересечение смысловых множеств в одной схеме урлов
2) невозможность создать community с именем add
[19:53:06] Большой Лис: гм
[19:53:13] _lorien: 3) всякие грабли, чтобы в runtime не давать юзверю создать community с именем add ) Иначе он создаст его, но попасть туда не сможет =)
[19:53:15] xa4a: ха. возможность создать, но невозможность смотреть
[19:53:51] _lorien: хотя когда все урлы модуля с одним префиксом это тоже конечно круто :-/
[19:54:04] _lorien: Чо же делать, вротмненоги )
[19:54:40] red-agent: мое решение - самое рациональное
[19:54:48] _lorien: есть конечно вариантик.
/community/SLUG/
/community/_/ACTION/
но он тоже какой-то кривой
[19:54:59] xa4a: валидацию приделать и не париться
[19:55:12] xa4a: не давать создавать с волшебными именами
[19:55:21] xa4a: куда рауиональнее
[19:55:21] _lorien: не, нафиг надо такое :-/
[19:55:30] wiz: http://www.typeracer.ru/
[19:55:34] _lorien: Если закрыть глаза на кривость - это потенциальный источник багов
[19:55:37] Большой Лис: а нафиг тебе комьюнити с именем add? :)
[19:55:39] red-agent: xa4a: это не рациональность
[19:55:43] red-agent: это хуй знает что
[19:55:44] red-agent: =)
[19:55:47] xa4a: почему?
[19:56:04] Большой Лис: wiz, типо рэйсер? :)
[19:56:05] _lorien: xa4a, мне что при каждом новом view надо будет менять валидацию?
[19:56:07] red-agent: потому, что нелогично
[19:56:08] _lorien: да я заипусь )
[19:56:28] _lorien: Большой Лис: а нафиг тебе комьюнити с именем add? :)
мне не надо, а вот кто-нить захочет )
[19:56:32] xa4a: _lorien: ок, юзай /_/
[19:57:15] _lorien: эх, нет, _ тоже не катит ( Тупо, просто тупо (
[19:57:38] _lorien: пойду на хабру повтыкаю =)
[19:57:47] red-agent: ну, в итоге после 30 минтуного флейма - ты все-равно вернешся к моему варианту
[19:57:51] xa4a: эта.. а /community/?add
[19:58:16] red-agent: xa4a: ты чо бля?
[19:58:19] red-agent: пхпшнег?
[19:58:21] _lorien: )
[19:58:22] xa4a: хотя хреново, т.к. разруливать разные вьюхи из одной
[19:58:24] red-agent: семки езь?
[19:58:45] _lorien: http://habrahabr.ru/blog/my/add/ - у них вот так =)
[19:58:53] Большой Лис: wiz, 163 зн/мин
[19:59:21] wiz: соска
[19:59:36] red-agent: community/get/by-name/python
[19:59:46] wiz: у меня 250, на выгнутой клаве и от неожиданости q:
[19:59:50] _lorien: если на хабре создать блог с именем my, то тебя редиректит сразу на /blog/my/, а там
Forbidden
You don't have permission to access /blog/my/ on this server.
[19:59:53] _lorien: бгага
[20:00:07] Большой Лис: гы
[20:00:17] red-agent: длинно, зато красиво
[20:00:19] red-agent: + можна by-id еще сделать
[20:02:16] Большой Лис: 172 зн/мин
[20:02:20] Большой Лис: чо то бля, хз :)
[20:02:24] Большой Лис: медленно я таймаю :)
[20:02:47] _lorien: ойолол
[20:02:55] _lorien: я в блог my ещё и пост написал
http://habrahabr.ru/blog/my/43330.html
[20:03:25] Большой Лис: _lorien, 404
[20:03:27] wiz: _lorien, КАК ТЫ МОГ!!
[20:03:29] _lorien: из раздела написания новых постов, там этот блог есть в выпадающем списке
[20:03:38] Большой Лис: а, пнятно :)
[20:03:42] _lorien: Большой Лис, да 404, но сюда меня после написания средиректило =)
[20:03:54] Большой Лис: праказник!
[20:03:55] Большой Лис: :D
[20:04:06] _lorien: http://habrahabr.ru/new/
лолоо
[20:04:13] _lorien: оно тут есть, а попасть туда нельзя =)
[20:04:59] _lorien: странно, что никто до меня такую хуйню не сделал, может, они периодически удаляют такие блоги =)
[20:05:14] wiz: оно просто не опубликовано
[20:05:16] wiz: там кнопка есть
[20:05:26] wiz: s
[20:05:27] wiz: ы
[20:05:31] wiz: уже кто-то минус влил
[20:08:23] _lorien: wiz: оно просто не опубликовано
нет, просто хабра кривая )
[20:08:35] _lorien: я для проверки зашёл в его редактирование и нажал ещё раз "опубликовать"
[20:15:03] tek: гы
[20:15:14] tek: _lorien: hacker :)
[20:15:37] _lorien: нет, это хулиганство называется )
[20:25:31] wiz: там кстати можно сразу толпой кататься
[20:25:40] wiz: можно устроить заезд pythonua@cjr
[20:28:05] _lorien: 293 знаков в мин )
[20:29:12] _lorien: кто-то 590 печатает o_O
кстати, туда тоже ботов можно писать =)
[20:29:29] _lorien: greasemonkey plugin =)
[20:29:46] Большой Лис: от жеж люди
[20:29:59] Большой Лис: куда не зайдут, везде наср^Wначитать хотят
[20:30:11] Большой Лис: начитить*
[20:32:18] xa4a: 221
[20:32:53] _lorien: 311 =)
[20:33:14] _lorien: я понял стратегию, надо на сложных слова снижать скорость
[20:33:23] _lorien: а есть слова, на которых очень быстро пальцы печатают.
[20:33:35] _lorien: просто если там быстро печтать, то можно ошибиться, а это дорого стоит.
[20:33:46] wiz: угу
[20:34:36] slav0nic: хех) как мне это знакомо)
[20:35:20] wiz: я в начале сразу отрываюсь, а потом к концу строки уже начинаю ошибаться и отстаю
[20:35:36] _lorien: 326 =)
[20:37:26] _lorien: 320 :-(
[20:41:12] slav0nic: я быстрей вроде)
[20:41:41] _lorien: slav0nic, скока? )
[20:41:51] slav0nic: 390 было вроде
[20:42:09] slav0nic: тока бля опечатак...)
[20:42:16] slav0nic: одна рука опережает другую)
[20:42:24] _lorien: очорд
[20:46:57] _lorien: бугага, 21 бал у моего сообщения )
[20:50:21] _lorien: 29 o_O
[20:50:59] xa4a: уже на главной
[20:59:50] _lorien: пипец =) пойду спать
[21:00:51] xa4a: ыэ
[21:00:54] xa4a: там 1 комент!!
[21:02:24] _lorien: блин, я тоже заметил, теперь придётся ответить, а то не смогу уснуть =)
[21:03:43] xa4a: хм. а его можно посмотреть?
[21:04:48] _lorien: блин, там уже 3(три) комментария, что-то подсказывает мне что они не формировали http-вручную
[21:06:00] xa4a: http://habrahabr.ru/rss/blog/my/43330/comments/
[21:07:33] _lorien: ну, ещё я и их через email уведомления вижу )
[21:08:07] red-agent: хабр на ror вертится?
[21:08:37] _lorien: X-Powered-By: PHP/5.2.4
[21:08:41] _lorien: имхо на php )
[21:09:24] red-agent: фу
[21:09:27] red-agent: как пошло
[21:09:55] _lorien: http://habrahabr.ru/?=PHPE9568F36-D428-11d2-A769-00AA001ACF42
правда пасхальное яйцо чё-то не показывается
[21:10:01] _lorien: должна быть картинка уебанская
[21:10:16] _lorien: http://it-omsk.com/?=PHPE9568F36-D428-11d2-A769-00AA001ACF42
типа такой
[21:13:23] red-agent: может все-же не на пыхпыхе
[21:15:15] _lorien: Блин, я не верю, что они посмотрели, что генерит форма и сформировали ручками ajax-запрос. Конечно, тупо думать, что люди тупые (пять челов), но почему-то я так думаю :-/
[21:16:56] xa4a: live http headers, вроде, позволяет на лету менять заголовки/данные в посте
[21:22:16] _lorien: function SubmitComment(commentID, f)
{
id = SubmitCommentID = commentID > 0 ? commentID : 'f';
if (s = $('cpb' + id)) s.disabled = true;
if (s = $('csb' + id)) s.disabled = true;
new Ajax.Updater('commentsdiv',
'/ajax/comment.html?commentID=' + commentID,
{asynchronous:true,
parameters: Form.serialize(f),
onSuccess: SubmitCommentUnlock });
return false;
}
[21:22:48] xa4a: ну вод
[21:22:56] xa4a: хоть из жс-консоли коменть)
[21:23:08] _lorien: гм, интересная идея )
[21:25:59] _lorien: вот тока непонятно, где здесь номер поста...
[21:26:19] _lorien: а
[21:26:22] _lorien: понятно
[21:26:24] red-agent: http://www.portablepython.com/
[21:26:36] _lorien: <form id="formf" onsubmit="return SubmitComment(-42337,this);"
[21:38:34] _lorien: lorien@lorien /tmp $ python test.py
Kolbaskin Error KE-504
[21:38:38] _lorien: ебтить нах
[21:38:50] _lorien: это я пытался на хабру каммент отправить =)
[21:39:27] red-agent: некуда отправлять уже
[21:40:56] Большой Лис: или пребили, или лориен занывал его
[21:41:00] Большой Лис: в /new/ уже не видать его
[21:42:55] _lorien: поставили там насильно "личный хабратопик" )
[21:43:50] red-agent: упыреныши
[21:43:59] red-agent: криворуки
[21:44:09] red-agent: они часом не из md? :D
[21:47:30] xa4a: вротмненоги: http://monk.com.ua/article.php/20080526153842326
[21:50:00] red-agent: факмоймозг х_Х
[21:51:49] _lorien: ооффигеть =)
[21:52:44] _lorien: http://monk.com.ua/images/articles/20080526153842326_32.jpeg
ваще бугага =)
[22:01:22] _lorien: http://lizendir.habrahabr.ru/blog/43330.html
[22:01:54] slav0nic: на реддите чтоли день джанго?
[22:02:27] slav0nic: http://code.google.com/p/django-threadedcomments/
[22:02:31] Муркт: _lorien: зачот
[22:03:43] Муркт: _lorien: а ты не пробовал делать блоги со слагами new или unhabred?
[22:19:37] _lorien: Муркт, нет, мне это уже неинтересно, это уже не хулиганство даже, а вандализм какой-то )
[22:19:49] Муркт: :))
[22:19:53] slav0nic: Компания Yahoo утверждает, что ей удалось побить мировой рекорд, создав самую большую и нагруженную базу данных в мире!
Объём запущенной год назад базы данных достиг 2 петабайт
на psql
[22:20:03] _lorien: я думаю, точно так же создаются... кстати мой блог удалили, возможно имя "my" опять свободно
[22:20:09] slav0nic: pgsql
[22:23:14] Большой Лис: slav0nic, модифицированный pgsql
[22:23:21] Большой Лис: изменения которые они там сделали, они зажали
[22:23:22] Большой Лис: суки
[22:23:52] slav0nic: хех
[22:23:55] slav0nic: не знав
[22:45:14] red-agent: ничо так сосисочег пожрал
[22:45:40] red-agent: мой желудок минут 10 пытался прогрызть себе путь наружу, через брюшную полость
[22:46:01] red-agent: а когда понял, что нихуя не получится - начал искать альтернативные пути решения проблемы х_Х
[23:16:34] gigimon: а кто нибудь использует стандартные темплейты авторизации в джанго?
[23:42:52] gigimon: _lorienL: http://hg.pybb.org/file/cae987486383/pybb/account/views.py -- в 36 строке очипятка (:
[23:57:54] Муркт: http://bash.org.ru/quote/397026 жжжесть