Setti

Его сообщения

или забить

Точно удалить?

    • нет

    • показать ещё 22
    • @Setti Некорректно поставлен вопрос. В описании методов класса не надо передавать текущий экземпляр, как и в описании статических методов, а в описании методов экземпляра класса как раз надо. Учите теорию.

    • @BekoBou когда мы описываем класс, в его методы нужно всегда передавать параметром текущий класс (self). Зачем это сделано? В PHP этого нет, и это прекрасно

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

    • @Setti Потому что это логично. Если ф функцию передается параметр, то человек должен знать что он туда передается. Следовательно он должен быть описан в хедере метода.

      Питон это не ПХП, за что ему и спасибо)

    • @Creotiv вот потому, что это логично, это и не нужно делать явно. Метод класса имеет доступ ко всем методам и свойствам этого класса. Зачем это явно указывать каждый раз?

    • Зачем делать

      def(self):

      self.var

      Если это то же самое, что

      def():

      self.var

      Но мы не можем делать как во втором варианте, потому что будет ошибка.

    • @Setti читайте дзен питона. "Явное лучше, чем неявное"

    • @Jungle Полность согласен

    • @Setti Потому что вы будете вызывать переменную, которая не передана явно в функцию.

      Или к примеру, я через Метаклас захочу подменить параметр self и передать что то другое? - Тогда это уже явно будет не обращение на сам обьект, а следовательно называть его self тупо.

      это все равно что вызывать синглтон через создание класа, когда нужно вызывать через getInstance() показывая тем самым что это таки синглтон, а не обычный обьект.

       

      Вообщем читайте PEP и теорию.

    • @Jungle с такой логикой надо бы еще и при обращении к членам родительского класса явно указывать, что это именно они. Например

      self.parent.var

      Нахрен не нужно, но зато отвечает дзену "Явное лучше, чем неявное". Такая логика получается.

    • @Creotiv Нет, я буду обращаться к переменной, которая должна быть в той области видимости, в которой я работаю. Если я говорю

      self.var, то я обращаюсь к члену текущего класса, и его не нужно передавать в функцию параметром. На то он и член класса, чтобы быть доступным внутри этого класса.

      Да, это расходится с теорией, но потому я и завёл эту полемику, потому что не понимаю, зачем создатели Python так сделали.

      Зачем передавать в методы класса весь класс вместо того, чтобы просто сделать видимыми члены классов для методов класса, и не заниматься лишним def(self) ?

    • @Creotiv мне понравился трюк с подменой первого аргумента метода чем-то другим. Пока что для меня это единственный сильный аргумент в защиту подхода

    • @Setti программист должен четко понимать что происходит в коде, для этого все действия должны быть явными. Это как хедер функции в Си, если там написано что такие параметры на вход, значит именно такие, и человек не думает, а может кто-то гдето заврапил функцию и передает еще че-то где-то как-то.

      Все это делает код легко читаемым и просто поддерживаемым. Любой же неявный функционал сбивает с толку и усложняет работу с кодом в разы.

      В Питоне сделано все правельно, а вот в ПХП нет.

       

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

       

      Лучше писать понятно, чем коротко. Перл тому в пример.

    • @Setti вы не понимаете логики работы питона, это не пхп и к родительскому классу так не обращаются. Почитайте побольше о питоне может тогда у вас пройдёт переломный момент и всё встанет на свои места :)

    • @Creotiv про метаклассы думаю еще рано говорить :)

    • @Jungle Про метаклассы всегда в тему говорить, это ж млин метоклассы))))

    • @Creotiv не надо, а то запутаете ещё больше человека :)

    • Мне всё еще не понятно, почему вместо области видимости (прозрачно и без лишней писанины и без лишних параметров методов) используется передача по параметру метода. А значете что самое печальное? В метод всегда передается экземпляр класса, даже когда он там нахрен не нужен. Если мне нужна приватная функция для расчёта, нахрена в нее передавать экземпляр класса? Но Python это обязательно сделает. И мне обязательно нужно это учесть.

    • @Setti Python сделает это по дефолту, но не всегда, через метакласс можно это изменить(вроде бы, никогда таким не страдал)

    • @Jungle Это важная тема в питоне, ее надо знать.. по крайне мере зачем оно есть.

    • @Setti в питоне нет приватных атрибутов! не всегда если это метод класса, то первым параметром предается класс! Почитайте на досуге www.cafepy.com/article/python_attributes_and_metho…

    • такая "явная" передача в некоторых случаях помогает избежать ошибок(особенно это касается классов-наследников)

    • чтобы пиариццо и чтобы тебя единственного и неповторимого заметили.

    • ыы

    • Porcupine Tree - Time Flies

    • @insteankt Верно. Класс, да? :) У меня мурашки по коже были в первый раз. Именно как буд-то всю скоротечность жизни показали как оно есть

    • начальный проигрыш на что-то из Pink Floyd похож очень, надо вспомнить

    • @Setti да, интересные. есть пара альбомов

    • @FunkyBob так ведь жанр с Pink Floyd один и тот же у них

  • Супертипичный для новичка вопрос: вот у меня список из 300 файлов, которые по по очереди качаются curl'oм. Это все делается в цикле, разумеется, но проблема в том, что скрипт, не успевая до конца сохранить один файл, переходит к закачке и сохранению следующего. В результате файлы оказываются битыми. Знаю, что curlmulti здесь в помощь, но хочу сначала разобраться с однопоточной загрузкой по почереди большого количества файлов. Помогите, пожалуйста.

    • код в студию

    • @Jungle

       

      def get_images_thread(table):

      class LoopThread ( threading.Thread ):

      def run ( self ):

      global db

      c=db.cursor()

      c.execute(""" SELECT * FROM js_stones ORDER BY stone_id LIMIT 1

      """)

      ec = EasyCurl(table)

       

      while(1):

      stone = c.fetchone()

      if stone == None:

      break

      img_fname = stone[2]

      print img_fname

      url = "www.jstone.it/"+img_fname

      fname = url.strip("/").split("/")[-1].strip()

      ec.perform(url, filename="D:\\Var\\Python\\Jstone\\downloadeble_pictures\\"+fname, progress=ec.textprogress)

    • показать ещё 21
    • @Setti используйте онлайн хранилище кода, это удобнее )

    • @rumkin кстати, искал, но навскидку не нашел сразу. Спасибо

    • @Setti понятно каждый тред читает одну и туже строку из ДБ и начинает скачивать файл и записывать, т.е. неправильно формируешь очередь, точнее у тебя её нет, делай так сначала создай очередь класс Queue с именем файла который нужно скачать, а потом тредами читай из этой очереди.

    • @Jungle другими словами, чтению из базы и и процессу скачивания сделать разные потоки?

    • @Jungle а LIMIT 1 - это временно было выставлено в процессе отладки

    • @Setti другими словами да, используй очередь, заполняем очередь N урлами из БД и следим на предмет пустоты очереди, если очередь пуста, то заполняем её данными из БД, а другими тредами скачиваем файлы которые находятся в очереди.

       

      сколько нитей используешь для скачивания ?

    • @Jungle ага, Queue ... понял

    • эмм.. кстати есть такой вариант что это может блочиться GIL. То есть всегда будет работать только один тред. Это нужно проверять. GIL врубается когда идет изменение среды Питона, насколько помню он даже врубается при попытке отослать скачать что то по сети. Посему треды обычно юзаются когда есть независымые I/O и то с переменным успехом.

      Кстати правильнее будет создать сначала пул тредов, а потом туда загонять таски. ибо генерация тредов как и вообще всего процесс дорогой.

       

      А вообще я обычно юзаю подпроцессы, они дороже обходятся, но зато работают четко и не валят саму апликуху когда что-то не так.

    • @Creotiv да не у него код малёк неправильно организован, каждый тред читает запись из БД (причем одну и туже)

      GIL отрубается при каждом вызове curl'a так как это сишный код

      вообще здесь правильней юзать multicurl :)

    • @Jungle Курл сишный то, но вот доступ к БД не сишный и организовать его через треды нельзя. а следовательно процес частично блочится. А вообще в тредах не должно быть ничего кроме мат подсчетов и I/O

       

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

       

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

    • @Creotiv а чем мультикур сам себе не асинкор?

    • @Setti Потому что мультикурл не занимается диспатчиризацией запросов, а лишь обрабатывает их.

    • @Creotiv чем доступ к БД не I\O? как раз таки и нужно с БД работать в треде

      @Setti т.к. пример у тебя простой, то и делай на тредах + очередь

    • @Jungle Я, кстати, сдела еще в первой полвине дня с использованием дуркцкого time.sleep(2). Но в будущем хочется делать по-человечески и быстро.

    • @Setti вот моя обёртка для библиотеки libcurl для питона http://bitbucket.org/jungle/pylibcurl

      только в тредовом режиме не работает какой-то баг, никак не отлажу, времени не хватает

      зато мультикурл работает :)

    • не работает какой-то баг :)

    • Около 0%.

    • Не вижу пока смысла юзать Python 3... больно сырой он.

      Вот когда выйдет версия 3.3 тогда да... смысл появится (должны влить Unladen Swallow)

  • В свете IDE есть что-то новое, интересное из бесплатного? Уже две недели переключаюсь между Eclipse и Netbean - не могу привыкнуть ни к той, ни к другой. Какие-то они ебанутые.

    • Никогда не любил IDE — слишком много ресурсов для того, что они дают. А UI перегружен настолько, что просто глаза вырывай. Предпочитаю писать в текстовом редакторе (gedit довольно мощен под Linux) и консоли.

    • emacs :<

    • показать ещё 24
    • Espresso прекрасный редактор, но платный.

    • @ai удваиваю gedit, кстати. В ОС Linux только его и использую.

    • @ai Спасибо за комментарий, он довольно ценный как от разработчика такой системы как Атата. // Да, я подозревал, что мои постоянные возвращения из той или иной IDE обратно в notepad++ достаточно оправданы. В последний раз опять сел попробовать Eclipse из-за удобства работы над проектом удаленно. Кстати, можешь описать (или может быть ссылка), как вы поступаете, когда надо оттестировать новые возможности, а после удачных тестов незаметно внедрить их на работающий проект?

    • @ai какой хороший пак, возьму на заметку, спасибо.

    • @Setti полагаю, обычно как-то так: # /etc/init.d/apache2 reload

    • @Setti На сервер код заливается с помощью Capistrano (мета-язык на Ruby для описания таких штук с удобными решениями для Rails). Ну и плюс Git репозиторий очень приветствует создание веток, так это легко. Когда я знаю что для функции потребуется несколько коммитов, то всегда завожу ветку.

    • @Setti А перезагрузка сервера очень простая. Мы используем Passanger, он запускает Rails-проект в память. Если кто-то изменил время доступа к tmp/restart.txt (а это сама делает Capistrano), то Passanger сам незаметно перезагружает потоки Rails-проектом.

    • @ayanami Веб-сервер (у нас nginx) мы перезагружаем только когда правим его конфиги — давно уже этого не было :).

    • Emacs + ECB (Emacs Code Browser)

    • @ai благодарю

    • На счет редакторов: все люди делятся на два лагеря - те кто за мощные штуки типа Eclipse с кучей плагинов, и те кто за "лёгкие" редакторы :) Я за лёгкие и юзаю e-texteditor, хотя конечно мощные штуки позволяют практически все настроить и автоматизировать, но привычка уже въелась..)

    • @Setti Если вкратце: Git/Hg/Bazaar это следующее поколение систем контроля версий. В них есть всё, что умеет svn, но ещё есть свои фишки, так что повода делать новые проекты на svn я не вижу.

    • @Setti Лично мне в git нравится скорость, возможность работы в оффлайн, действительно удобные ветки, http://github.com/, удобные консольные утилиты.

    • @ai ага, понял, спасибо

    • Я пишу(для себя пока..) на Comodo Edit , на бесплатной версии, есть куча хреней, подсказки для пхп Ксс и кучи языков, редактирование по ФТП, и все это при небольшой ресурсохавательности, ЕНДЖОЙ!

    • После Eclipse пересаживаться на что то простое не тянет, не хватает кучи мелочей, которые на первый взгляд даже незаметны.

    • @gemozlobin мне нехватает кучи мелочей после перехода с notepad++ на Eclipse

    • @gemozlobin других мелочей нехватало

    • использую geany и под linux и под win, изначально пользовал как обычный текстовый редактор, нор оказалось он умеет намного больше.

      ИМХО: самая классная легковесная IDE.

  • Имею ценный трёхлетний опыт координации небольшой группы энтузиастов из в разное время от 20 до 150 человек. Никаких денег, договоров, обязательств - исключительно социальные механизмы взаимодействия. Для них же создал, развил и управляю тематическим интернет сообществом. Пол года назад зарегистрировал общественную организацию. Задавайте вопросы.

    • Цель сообщесвта? Бенифиц получаемые учаниками? Место дейсвтие?

    • @ZeroCold Роллеры. Развитие, социальная жизнь, развлечения. Город Донецк.

    • показать ещё 9
    • @Setti А зачем нужна некомерческая организация в таком случие? Я понимаю это было андерграунд сообщество с набором своих правил и со своми ритуалами и ценностямси, но что дало сообществу новый статус?

    • @ZeroCold взаимодейстиве с государством, проведение официальных мероприятий, выход на новый уровень престижности увлечения, защита интересов роллеров в городе

    • @Setti А до появления НКО, это было невозможно? А какие обязательства берут на себя члены группы? Выполняют ли их? (если есть конечно) Какие санкции (в смысле соц не админ) налогаются на участинка группы в случие не выполненичя обяхательств?

    • @ZeroCold некоммерческая организация действует автономно в рамках интересов сообщества. У представителей сообщества нет обязательств перед организацией. Обязательства только у рабочей группы внутри организации друг перед другом и перед сообществом.

    • @Setti хм, я перефразирую, естьли разделение "труда" внутри группы и если есть каково оно?

    • @ZeroCold Внутри группы 5 человек. Руководитель (достижение уставных целей), заместитель (помогает руководителю), общественный координатор (постоянная связь с сообществом, ведущий на мероприятиях), секретарь (второстепенные заботы) и внештатный бухгалтер (взаимодействие с налоговой, фондами). Все работают на собственном энтузиазме. В сложных ситуациях стараемся договариваться. Насильно никто ни кого не держит, а выпадать из рабочей группы никто не хочет :)

    • @ZeroCold >> А до появления НКО, это было невозможно? << Было воможно, но условно. Например, чтобы официально при поддержке города провести спортивное мероприятие, без юр. лица это означало, что его должен спорткомитет. А неофициально просто может прийти милиция и всех разогнать по несокльким поводам. Или, например есть задача подобрать несколько крытых площадок как варианты для зимних катаний. С позиции юр. лица все проще в этом плане происходит.

    • @Setti А работа над\с сообществом ведется в свободное от прочих дел (работы) время, или ?

    • @ZeroCold Верно. Это как часть хобби.

    • /etc/hosts =)

    • показать ещё 5
    • @Setti alias _block='echo 127.0.0.1 example.com >> /etc/hosts'

    • @Setti alias _unblock='sed -i "g/127\.0\.0\.1/#127\.0\.0\.1/s" /etc/hosts'

    • чтобы трюк удался нужно чтобы усилие по разблокировке было больше усилия по блокировке

    • @eicto переключения в трее какогонить профиля файервола было бы как раз кстати. Жаль в ZoneAlarm этого нет. Но там есть более удобный способ чем hosts

    • @eicto никто не мешает добавить какой-нибудь dialog в алиас разблокировки

    • Хорошо сказано. Действительно, очень хочется завидовать себе)))

    • ггг.. ниче так простая)

      для неблокирующих HTTP запросов можна юзать Tornado + multi curl

    • @Creotiv напомните, пожалуйста ссылочку на неблокирующий multi curl. Или PycURL - это оно и есть?

    • @Setti curl - это сишная либа. pycurl - это обертка для этой либы

      тоесть вам нужно поставить сначала libcurl, а потом pycurl для python

      multi curl - это просто функционал curl'a

    • зеленый - человек на сайте, синий - оффлайн

    • @Futurist Тю. Я думал, мы какие-то особенные.

    • @Setti Тю. Я думал, мы, ЖЕЛТЕНЬКИЕ, какие-то особенные. =)

    • Твоя музыкальная совместимость с Setti Высокая Вас объединяет любовь к Keane, Blue Foundation, Röyksopp, Moby и Green Day.

    • Your musical compatibility with Setti is Low Music you have in common includes Led Zeppelin, Porcupine Tree, Pink Floyd, Green Day and The Doors.

    • Твоя музыкальная совместимость с Setti Очень высокая :)

    • Ну скоро наладят :)

    • +1. внезапно захотелось отписаться от 90%

Ctrl ↓
загрузка…
Наверх ↑