Вы видите копию треда, сохраненную 9 апреля 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Кек, ну вы поняли, да? У него питон в штанах))
18 марта, в пятницу, приглашаем на MoscowPython Meetup 33 в офис компании Mail.Ru Group.
Какая-то муть про тестирование ТЕМНЫХ ЗОН, ipython notebook, и гвоздь программы!
>«Новички в Python: как жить дальше?»
Вам самим не лень ради такого собираться?
Ну я из своего, хобби всё-таки.
Пишешь в комментах к коду # TODO а потом грепаешь :3
В ide и даже vim это поддерживается вообще https://www.jetbrains.com/pycharm/help/using-todo.html
Если юзаешь гитхаб или аналог можешь там создавать issue
Можно юзать софт типа redmine, trac, jira, basecamp
Хех. А ведь правда, тяночки хр таки смотрят на кодеров свысока. Такой-то синдром вахтёра, когда от тебя зависит чья-то судьба, прямо выше себя чувствуешь в иерархии.
лорчую кстати. нафига какой-то лишний софт если можно в текстовом файле просто записать.
ну на крайняк gnote/tomboy - там есть синхронизация и есть клиенты для мобилок
Или книжку пусть почитает. 2 scoops of django например.
Я тебе написал. Я не знаком с парадигмой разработки в вебе. Я понял как работает Django. Я могу написать в нём простенький апп. Чего я не знаю, так как этот апп превратить в нормальный веб-сайт. Изначально хотел копать в сторону готовых landing-page'й на GitHub, но там какие то HTML\CSS\JS фреймворки. Понимаю, что вопрос несколько расплывчатый, но что мне взять для создания первого полноценного сайта. Полагаю, это должна быть связка из: Django, Memcached\Redis(Не особо понимаю что это, так что хотелось бы по подробнее об этом узнать), какие то HTML\CSS\JS фреймворки + какая то база данных + какой то вебсервер(Хотя чёрт с ним, с вебсервером. Реквестирую хотя бы предыдущие пункты.). Возможно есть книга-туториал, которая хоть мельком, но проходится по всем этим пунктам. Еще раз, для особо мееедленных. Какой пул технологий нужно знать для постройки полноценного сайтика?
Ну для начала надо знать html, основы http, как работают всякие формы и куки/сессии..
Вайпалку чего?
HTML не такой простой как кажется. Например нельзя <div> вставлять в <p>. Или нельзя <div> вставлять в <span>. Тегов много разных. HTML4 можно уже не учить, только пятёрку. Читай htmlbook.ru
CSS тоже не простой. CSS3 селекторы намного мощнее чем CSS2. Вместо трюков с float сейчас надо учить flexbox. Соответственно специфику CSS2 тоже учить не нужно.
JS очень не простой язык. Особенно после выхода ES6 и появления кофескрипта. Сначала учится чистый жс, затем по желанию кофе. Актуальная версия до сих пор ES5, ну и её изучение поможет понять прототипы. ES6 по большей части сахарок вынутый из кофе. Хороший ресурс javascript.ru
HTTP протокол далеко не прост как кажется. Множество статусов, множество возможностей управления соединением. Множество кодировок, передача файлов итд. Про это всё лучше знать чем не знать. Актуален 1.1, но уже грядёт бинарный 2.
REST протоколы сейчас тоже актуальны, но моё мнение что они реально нужны как апи вебсайта для третьих сторон, нежели его основа. Хотя многие с этим не согласны. Во всяком случае ознакомиться стоит, он интенсивно использует возможности HTTP.
WebSockets/ServerSideEvent позволяют преодолеть пассивность HTTP протокола. Связь соответственно двухсторонняя и односторонняя. Желательно так же глянуть на тот треш который творили до их прихода: comet, long polling (на javascript.ru есть раздел про ajax).
Далее DOM/jquery. Это такое апи браузера для жаваскрипта. В целом в новых браузерах можно вынимать элементы по селектору и без жквери, но жквери содержит много всего полезного на все типичные случаи. К тому же версия 2 специально обрезана от всякого легаси под более-менее новые браузеры. Касательно DOM, хотя жквери и покрывает 99% его использования, нужно хотя бы иметь представление что эти интерфейсы стандартизированы, и вот например даже с стандартной библиотеке питона есть апи для etree которое сгенерировано по стандартным IDL прямо с w3c. Здесь же стоит почитать про events и как они в браузере генерируются, распространяются и отрабатываются.
Далее хипстерская часть: имеет смысл изучить один из жс фреймворков: ангуляр/реакт/нокаут/тысячи их, и срачи между ними не кончаются. Мне больше всего реакт понравился. Так же есть заготовки типа бутстрапа/foundation, которые позволяют верстать более-менее красиво и адаптивно (тобишь под всё сразу и под мобилки, и под планшеты, и под десктопы) не понимая ничего в вебдизайне.
Далее очень хорошо почитать про вебдизайн в целом. Про шрифты, про графические форматы, про атласы спрайтов и прочие интересные техники. Про юзабилити/UI/UX. ВОТ ТЕПЕРЬ МОЖНО СОЗДАТЬ ХОРОШИЙ ЛЕНДИНГ.
ТЕПЕРЬ БЕРЁМ ДЖАНГУ. И пишем наш пока что простой вебсайт. Гоняем хуйлоады, понимаем что наш сайт страшно проседает, начинаем думать как нам убрать ботлнеки: избавляемся от лишнего IO, кешируем темплейты, кешируем целые вьюхи (кстати на русском PyCON 2015 есть отличные доклады на эту тему и тему кеширования в целом), далее понимаем что наш путь nosql и распределённость базы данных, дальше я ничего рассказать не могу, сам мало знаю.
Касательно вебсервера, обычный выбор: nginx + uwsgi. Нужно почитать про его опции, открыть статикфайлы, медиафайлы, кое-как настроить чтобы работало и чтобы никаких лишних файлов не раздавало как статику. Вот собственно и всё. Далее идёт трюкачество с load balancing, но это опять же в тему поддержки кластеров, можно особенно не трогать. Если конечно ты не хочешь стать devops.
Далее открываем свою контору, нанимаем макак, рекламщиков, продаванов, художников, дизайнеров, фотографов, сеошников, контентеров и идём к успеху.
HTML не такой простой как кажется. Например нельзя <div> вставлять в <p>. Или нельзя <div> вставлять в <span>. Тегов много разных. HTML4 можно уже не учить, только пятёрку. Читай htmlbook.ru
CSS тоже не простой. CSS3 селекторы намного мощнее чем CSS2. Вместо трюков с float сейчас надо учить flexbox. Соответственно специфику CSS2 тоже учить не нужно.
JS очень не простой язык. Особенно после выхода ES6 и появления кофескрипта. Сначала учится чистый жс, затем по желанию кофе. Актуальная версия до сих пор ES5, ну и её изучение поможет понять прототипы. ES6 по большей части сахарок вынутый из кофе. Хороший ресурс javascript.ru
HTTP протокол далеко не прост как кажется. Множество статусов, множество возможностей управления соединением. Множество кодировок, передача файлов итд. Про это всё лучше знать чем не знать. Актуален 1.1, но уже грядёт бинарный 2.
REST протоколы сейчас тоже актуальны, но моё мнение что они реально нужны как апи вебсайта для третьих сторон, нежели его основа. Хотя многие с этим не согласны. Во всяком случае ознакомиться стоит, он интенсивно использует возможности HTTP.
WebSockets/ServerSideEvent позволяют преодолеть пассивность HTTP протокола. Связь соответственно двухсторонняя и односторонняя. Желательно так же глянуть на тот треш который творили до их прихода: comet, long polling (на javascript.ru есть раздел про ajax).
Далее DOM/jquery. Это такое апи браузера для жаваскрипта. В целом в новых браузерах можно вынимать элементы по селектору и без жквери, но жквери содержит много всего полезного на все типичные случаи. К тому же версия 2 специально обрезана от всякого легаси под более-менее новые браузеры. Касательно DOM, хотя жквери и покрывает 99% его использования, нужно хотя бы иметь представление что эти интерфейсы стандартизированы, и вот например даже с стандартной библиотеке питона есть апи для etree которое сгенерировано по стандартным IDL прямо с w3c. Здесь же стоит почитать про events и как они в браузере генерируются, распространяются и отрабатываются.
Далее хипстерская часть: имеет смысл изучить один из жс фреймворков: ангуляр/реакт/нокаут/тысячи их, и срачи между ними не кончаются. Мне больше всего реакт понравился. Так же есть заготовки типа бутстрапа/foundation, которые позволяют верстать более-менее красиво и адаптивно (тобишь под всё сразу и под мобилки, и под планшеты, и под десктопы) не понимая ничего в вебдизайне.
Далее очень хорошо почитать про вебдизайн в целом. Про шрифты, про графические форматы, про атласы спрайтов и прочие интересные техники. Про юзабилити/UI/UX. ВОТ ТЕПЕРЬ МОЖНО СОЗДАТЬ ХОРОШИЙ ЛЕНДИНГ.
ТЕПЕРЬ БЕРЁМ ДЖАНГУ. И пишем наш пока что простой вебсайт. Гоняем хуйлоады, понимаем что наш сайт страшно проседает, начинаем думать как нам убрать ботлнеки: избавляемся от лишнего IO, кешируем темплейты, кешируем целые вьюхи (кстати на русском PyCON 2015 есть отличные доклады на эту тему и тему кеширования в целом), далее понимаем что наш путь nosql и распределённость базы данных, дальше я ничего рассказать не могу, сам мало знаю.
Касательно вебсервера, обычный выбор: nginx + uwsgi. Нужно почитать про его опции, открыть статикфайлы, медиафайлы, кое-как настроить чтобы работало и чтобы никаких лишних файлов не раздавало как статику. Вот собственно и всё. Далее идёт трюкачество с load balancing, но это опять же в тему поддержки кластеров, можно особенно не трогать. Если конечно ты не хочешь стать devops.
Далее открываем свою контору, нанимаем макак, рекламщиков, продаванов, художников, дизайнеров, фотографов, сеошников, контентеров и идём к успеху.
asm.js + emscripten для тех кто хочет пописать под веб на сишечке.
Это нужно на GitHub, тот, что в OP посте. Большое спасибо, анон. По крайне мере теперь знаю куда копать. Если не подохну, заброшу и таки приду к успеху - буду выкладывать в тред.
Настолько толсто, что даже тупо.
Каким образом виртуалка, на которой крутится PHP код будет работать быстрее?
Путаю, всё ещё хуже. hhvm сосёт по производительности у HippyVM, который сделан на фреймворке от pypy. Но в любом случае съеби в пхп тред. Я ещё понимаю рельсы или ноду, но пхп это гроб и кладбище, настоящий фрактал отсоса.
Кастую в тред большинство-пакаджей-pypi-под-двойку-куна.
>REST протоколы
Такие точно существуют? Дай пару названий, а то гугл только общее описание выдаёт.
Django girls tutorial
Есть на русском, охуительно подробно, местами даже как для дебилов.
Следующий шаг: гугли название-популярного-сайта + Джанго туториал, что как маленький
Ну протоколом я назвал то что принято называть REST API. Если хочешь пример бери twitter api (вроде бы с него мода и началась) или vk api. Но строго говоря REST это такая идеология, которую описал в засратом году Рой Филдинг в своей диссертации. Люди понапридумывали всяких SOAP XML где с данными передаётся куча бесполезных обёрток. И вот REST какбы и призван сделать всё проще и легче. В том числе использовать url как однозначный идентификатор сущности. Далеко не все веб апи сайтов в строгости соответствуют идеологии REST. Доходит до парадоксальных вещей, рестом называют чёрт пойми что, в том числе просто выдачу вместо html тех же данных в формате json. REST не привязан к формату, может даже html выдавать, но в то же время не всегда является оптимальным. Например механизм покупки в интернет магазине/транзакций в банке нет никакого смысла делать согласно идеологии REST. REST это такой универсальный способ поддерживать некий набор данных на сервере, например твоих постов в твиттере, с помощью него ты легко можешь написать приложение для своего калькулятора которое будет работать как полноценный твиттер.
К 2045 ASI вздрючит и тебя.
Вряд ли на питоне. Но вообще питон сейчас самый популярный язык для всякого deep learning и ai. По крайней мере прототипируют.
И всего 500 строк. А у вас все стотысячный и никому не нужный ландинг пейдж на жанге.
Щас почитал статью на вики, исходники закрыты, скорее всего на Сишке, потому что они и так постоянно кластер увеличивают, а тратить вычислительные ресурсы на тормозной питон я думаю они бы не стали.
>Как все знают, компьютеры плохо играли в Го потому, что там очень много возможных ходов и пространство поиска настолько велико, что прямой перебор помогает мало.
>До настоящего времени го является одной из тех традиционных игр, в которых человек играет лучше компьютера[5]. Поэтому написание программы, которая хорошо бы играла в го, является важной вехой в развитии искусственного интеллекта.
Какие 2 другие игры? В шахматы же давно человека вздрючили
я нихуя не пони
действительно
Ну про этот бардак с rest я слышал, я как раз хотел какой-нибудь стандарт rest api увидеть. Думал, под протоколами ты имел в виду именно это.
Читай Филдинга. Стандарта нет.
Есть строка вида "qwerty_ [ qwf _fjdsf_ jdsf] sdfs [_uiosda_]".
Как мне именно в тех частях, что в квадратных скобках сделать replace("_","")?
re.sub('(\[.*?\])', lambda x:x.group(0).replace('_',''), '"qwerty_ [ qwf _fjdsf_ jdsf] sdfs [_uiosda_]"')
А если это всё динамически меняется? Выходит надо будет целый массив использовать и потом заново склеивать циклом. И еще образовавшиеся ошметки как-то сохранить.
>>684952
Эх, всё никак не дойдут руки изучить всё это волшебство.
Покажи способ лучше
Я для данного случая описал. Так то получим список из N строк. В целом, не думаю, что это КАРДИНАЛЬНО повлияет на производительность. Зато читабельно и понятно с первого взгляда.
Запилил твоим способом:
s="qwerty_ [ qwf _fjdsf_ jdsf] sdfs [_uiosda_] hh"
s.split('[')[0]+''.join('[%s]%s' % (x.split(']',1)[0].replace('_',''), x.split(']',1)[1]) for x in s.split('[')[1:])
Может регулярочка всё-таки лучше?
[<_sre.SRE_Match object; span=(8, 27), match='[ qwf _fjdsf_ jdsf]'>,
<_sre.SRE_Match object; span=(33, 43), match='[_uiosda_]'>]
Ну и далее по индексам строку кромсать и собирать результат склейкой получившегося массива.
Пожалуй без написания небольшого велосипеда, да. Regex лучше.
Кстати это ещё и с эксепшеном упадет если '[' нет в строке. т.е. надо добавлять проверку на это.
Он ещё и самый правильный - не генерит кучу списков.
И в варианте со сплитом будут проблемы если скобка не закрыта.
Скорее асинхронный веб фреймворк.
>2016
>юзать для асинхронности левые костыли
>да, блеать, добавили сахар и теперь оно хоть читаемое стало, алсо в нём много кроссплатформенного кода для общения с процессами/пайпами и прочей ерундой, а не только с сокетами
>>684758
Гит у меня конечно есть, но я с ним не особо привык работать, потому что исправляю то там, то тут и коммиты делаются только после большого числа исправлений. Делать # TODO: ... хорошо, конечно, но не очень удобно. Хотелось бы оффлайн утилиту с минимальным функционалом - добавить таск с комментом, удалить, отметить как выполненный, отсортировать по критерию.
orgmode
Но ткинтер есть и в третьем пистоне.
Никто не использует, потому что не стильно и не молодёжно. Есть другие, более функциональные альтернативы, типа GTK/PyGObject, PyQt. Хотя я сам ничего плохого в TKinter не вижу. Тоже задавал тут этот вопрос и никто внятно не ответил.
Начнем с того, что он выглядит как win95 на большинстве платформ. И этим же закончим.
Не аргумент. Скажи ещё что терминал в линуксе выглядит как прямиком из 85 года.
Только /bin/sh на xterm'e. И еще какой аргумент. Я просто не юзаю приложения которые выбиваются из общей темы. А ткинтер выбивается всегда. Хотя хуй знает, может виндузятники привыкли к зоопарку.
Виджеты только по контейнерам распихиваются? Если я хочу два виджета в одну строчку поместить, мне кусок контейнера ещё одним контейером разбивать надо?
*Glade
Точнее сменить "базу".
Postgres
Добавить куда? Во многих контролах скроллбар встроенный. Там есть Scrolledwindow, внутрь него можно пихать что-то контейнер какой-нить и он будет прокручиваться. Можно добавить Scrollbar вручную и повесить на него какие-то действия
sqlite может в многопоточность, может тебе надо сессию отдельную создавать.
Ну как может, если ты пишешь в базу, то для других потоков она будет заблочена. Читать можно из разных потоков.
https://www.djangopackages.com/
Тут по категориям и популярности рассортированы.
Могу сказать django_mptt django debugtoolbar admin-tools что-нить для thumbnails да много всего. какая-нить хрень типа bootstrap
К "списку" из фреймов.
Я делаю так:
if __name__ == "__main__":
....Session = sessionmaker(bind=engine)
Сессия вроде бы одна на всё, но всё равно вижу эксепшон sqlalchemy.exc.ProgrammingError: (sqlite3.ProgrammingError) SQLite objects created in a thread can only be used in that same thread.The object was created in thread id 40136 and this is thread id 60032 [скюэль простыня]
А что ты вообще собираешься делать? Зачем тебе многопоточность и orm при этом?
При попытке добавить этот же самый фрейм мне выдаёт
Attempting to add a widget with type GtkFrame to a container of type GtkListBoxRow, but the widget is already inside a container of type GtkListBoxRow, please use gtk_widget_reparent()
А, ну да, в вопрос немного неправильно сформулировал. Добавлять этот заготовленный фрейм в бокс/листбокс я хочу в рантайме, по нажатию кнопки.
Тут есть несколько вариантов.
Я бы сделал на твоем месте класс унаследованный от фрейма, который в init создает все нужные элементы внутри себя сам.
Такой кастомный контрол короче. Можешь там ещё всякое поведение объявить.
Или ты можешь создавать эту хрень из xml подгружая её в рантайме и вставляя куда надо.
Например раньше можно было http://www.pygtk.org/pygtk2tutorial/sec-UIManager.html
merge_id = uimanager.add_ui_from_string(buffer)
window = gtk.Window()
vbox = gtk.VBox()
menubar = uimanager.get_widget('/MenuBar')
toolbar = uimanager.get_widget('/Toolbar')
vbox.pack_start(meunbar, False)
vbox.pack_start(toolbar, False)
и т.п.
В общем glade хорош чтобы набросать основной интерфейс, каркас, менюшки, всякие окна настроек.
Но то что должно создаваться в рантайме лучше делать внутри кода.
>>685811
А можно сделать что-нибудь типа
frame_proto = builder.get_object('frame1').xml_repr()
frame = Gtk.Frame.from_xml(frame_proto)
или
frame_class = builder.build_proto_class('frame1')
frame = frame_class()
?
Незнаю. Вот тут есть пример костыля и какие-то ссылки http://stackoverflow.com/questions/20460848/templating-overflowing-content-with-glade-and-pygtk
>.xml_repr()
Ты можешь открыть xml просто в текстовом редакторе и скопировать оттуда код виджета твоего.
Алсо для pygtk были генераторы кода. Типа оно берет glade файл и преобразует его в python код, который создает эти виджеты автоматически. Скорее всего они заброшены и не работают с новыми версиями т.к. это нафиг не нужно есть gtkbuilder и прочее.
Да в общем то ни в чём, просто мне казалось, что UI билдеры как раз и призваны такого рода проблемы решать.
Чет не очень
http://stackoverflow.com/questions/22584193/clone-a-gtkwidget-from-glade-so-it-will-be-reusable-several-times-in-application
https://mail.gnome.org/archives/gtk-app-devel-list/2012-December/msg00002.html
Можно только через жопу делая новый builder для каждого виджета
Придётся XML руками править. Что-то типа
widget_src = \
"""
...
<widget id={} name={}/>
...
""".format(w_id, w_name)
> Note that if you call your objects in glade ending with "_1" then you copy
and paste
the first copy will be "_2", the second "_3" and so on, it happened to me
to use this trick
and create a vector in my code of objects ending this way the object names.
То что если у тебя виджеты называются типа frame_1
оно должно автоматически переименовать следующий в frame_2 когда ты его добавишь
Мне так то без разницы. И там в треде в итоге решили, что best way - это пересоздавать билдер каждый раз, тем более, если файлы маленькие.
По ходу проще вручнкю делать - add_from_string никаких идентификаторов вновь созданного объекта не возвращает.
Можно, но тогда нужно как-то определять новый, т.е. хранить копию списка в каком-либо виде и после каждого добавления сравнивать. Чёт пиздец какой-то, такое простое действие и так много мороки.
Я в курсе, я знаю.
Но мне надо проверить, равен ли результат int'у этого же результата. То есть не является ли он дробным. Если всё тупо округлять сразу, то 217 в степени 1/3 и 216 в той же степени дадут одинаковый результат.
С большинством чисел до тысячи работает корректно, а с 343 и 216 вылазит такая чушь. Как-то же это можно обойти? Или искать другой алгоритм/язык. Сишка вот пишет корректно, вроде.
Туплю я, ну. Что ты как этот?
Ну как бы да, лол. Только это сильно замедлит алгоритм же. А нужна нормальная скорость.
Вообще число 1/3 уже не может быть записано точно в виде double
В питоне есть модуль fractions для работы с дробными числами но он тут не помогает.
А вообще да 7.0 возвращает.
http://pastebin.com/tdVmh1bg
суть токова: ходим по страничкам из списка и выдирает нужный мне текст
всего там ~1300 страниц, на каждой странице нужный текст начинается примерно с 100 строчки
130`000 строчек текста, это уже слишком много?
Но ведь есть и более сложные парсеры, не верится что все они тормозные.
Вижу убунту.
Основной тред — gui, отображает статусы тасков и может их менять (остановить, возобновить). Дополнительный тред — выполняет таски, обновляет их статусы, логгирует какой таск на какой стадии выполнения.
Ты же всё в один поток делаешь. Конечно так долго будет. Пока ты ждёшь ответ от странички твой комп и кАНАЛ простаивают. Юзай треды или asyncio, базарю ещё захочешь.
Я ньюфаг, но я бы юзал регулярки для поиска мыл.
^([A-Z|a-z|0-9](\.|_){0,1})+[A-Z|a-z|0-9]\@([A-Z|a-z|0-9])+((\.){0,1}[A-Z|a-z|0-9]){2}\.[a-z]{2,3}$
И сделал бы по потоку на каждую страницу.
Такие дела.
> по потоку на каждую страницу.
А если их миллион?
Лучше юзать https://docs.python.org/3/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor
Допустим если я хочу сделать как этот анон >>686008 только веб версию, где каждый юзер может парсить емейлы с введенных им урлов. Как это все работать должно в этом случае? Мне достаточно просто запускать приложение каждый раз, когда каждый юзер захочет парсить? Или мне нужно приложение, каторое будет работать как демон и чекать есть ли новые задание, создавать потоки и т.д.? Как это все работает, где можно посмотреть примеры?
>directory = u'D:/тест'
>mask = '.djvu'
>files = os.listdir(directory)
>masked_files = filter(lambda x: x.endswith(mask), files)
Посоны, как это заставить работать с кириллическими файлами? В смысле, данные из массива, чтобы могли нормально использоваться, если файлы имеют кириллицу в имени.
Дело в том, что эти запросы будут занимать много времени и блокировать весь поток. Поэтому я бы делал это всё асинхронно с callback`ами и прочим адом.
Например на торнадо:
тут в _on_download можно впихнуть парсер и какие-то ещё действия
> filter(lambda x: x.endswith(mask), files)
есть модуль glob для этого
> работать с кириллическими файлами?
виндопроблемы
Хм и правда. Ещё какие вот есть http://stackoverflow.com/questions/14142194/is-there-a-gui-design-app-for-the-tkinter-grid-geometry
Сделать его растягиваемым?
Т.е. мне понадобится 2 приложения. Одно для веб морды (джанго\фласк) а другое для логики (торнадо), так? А есть какие-то примеры?
Торнадо это веб сервер и фреймворк. В тем же есть асинхронный http клиент. Т.е. он может при запросе к нему делать запрос на какой-то другой сайт асинхронно и вернуть результат, когда страница скачается и будет обработана.
>2016
>юзать для асинхронности сторонние костыли
Под новые костыли пока не завезли фреймворков хотя бы уровня торнадо того же.
Да и новая питон 3.5 мало где стоит пока.
Хотя aiohttp вроде норм
Поставь, лол. Ты же умеешь софт ставить, правда? Ты же не юзаешь дефолтную винду с iexplorer.exe и notepad.exe в качестве IDE?
У меня то он стоит. Но на сервер(ах) это неудобно. Придется канпелять и ставить куда-то, самому следить за обновлениями. Гораздо проще использовать версию из дистрибутива.
И у меня возвращает 404. Видимо, этой куки недостаточно.
Выучишь, не сомневайся. Пиши сюда свои хелловорды, нам всегда приятно покритиковать чужой код.
для постинга в /b/ нужны ебанутые запросы с подтверждением капчи, а я, тип, неумею)0
>делиться моими достижениями в духе print('Hello world!') стыдно
А ты запости достижение хоть чуть-чуть выше уровнем. И да, ты выучишь.
Лей сюда, хуле. Для чего тред держим?
Почти все ЯП такие, если руки из жопы и отсутствует забота о стиле и читаемости.
Несомненно. Поэтому чем выше уровень вхождения в язык, тем лучше, если ты понимаешь о чем я.
Уровень вхождения значит практически ничего через год-два после вхождения. Если конечно у человека есть желание развиваться, а не продолжать писать говнокод.
class App(Gtk.Window):
..def __init__(self):
....Gtk.Window.__init__(self, title='test')
....builder = Gtk.Builder()
....builder.add_from_file('main_window.glade')
....window1 = builder.get_object('window1')
....self = window1
....self.a = 1
....self.b = 10
..def test(self):
....print(self.__dict__)
....print(self.a, self.b)
app = App()
app.test()
Оно говорит мне, что __dict__ пустой и выкидывает ошибку, говоря, что никаких self.a и self.b не существует.
Собственно, суть вопроса такова: можно ли совместить класс App и билдер?
Потому что ты мудак ебаный.
>self = window1
>__dict__ пустой и выкидывает ошибку, говоря, что никаких self.a и self.b не существует.
ну все правильно
>>686875
Тебе хочется содержимое window1 иметь в неймспейсе App, который наследует от Gtk.window? Можно например так:
self.__dict__.update(window1.__dict__)
Можно модифицировать __getitem__, чтобы при запросе App.a он на самом деле выдавал app.window1.a
А можно просто использовать app.window1 и не усложнять.
Всё, понял, пасаны. sqlite не позволяет модифицировать базу из других тредов.
Да, решил с помощью qt сигналов из одного треда в другой, чтобы эти самые изменения происходили в одном треде.
>self.__dict__.update(window1.__dict__)
Кстати, это как я понимаю смержит только переменные. А как быть с методами window1?
>А можно просто использовать app.window1 и не усложнять
Ну я так и сделал в итоге. Так даже логичнее, наверное, иначе из
>self.__dict__.update(window1.__dict__)
каша получится
>>686895
Не только переменные. Вообще всё.
Короче, единственный путь собрать несколько классов в один, имея все в одном неймспейсе и не проебать ни переменные, ни методы - http://ideone.com/dAyENn
Рейт, дискасс. Может есть способ получше.
Использовать super и наследование?
Решил попробовать перекатиться под Spyder, который шёл в комплекте с WinPython-ом
мимодебил
Код прилогается по сылке
http://rghost.net/6Kc4BWDNs
Игровые данные, очевидно, хранятся в виде каких-то объектов.
Объекты можно сохранить, очевидно, используя родную библиотеку pickle.
мимодебил
Да хуле тут разбираться. Лови, тебе понять этот код на пять минут.
мимодебил
import cPickle
def SaveGame(level, health): #сохранение файлов проекта
data = [level, health]
f = open('savedgame.xyu','w')
cPickle.dump(data, f)
f.close()
def LoadGame(): #загрузка файлов проекта
f = open('savedgame.xyu','r')
data = cPickle.load(f)
return data
levelToSave = raw_input('Введи уровень, мудак!')
healthToSave = raw_input('Введи жизни, мудак!')
SaveGame(levelToSave, healthToSave)
del levelToSave
del healthToSave
levelLoaded, healthLoaded = LoadGame()
print "Твои сохранённые жизни, сучёныш:",healthLoaded
print "И при этом ты на",levelLoaded,"уровне"
Да хуле тут разбираться. Лови, тебе понять этот код на пять минут.
мимодебил
import cPickle
def SaveGame(level, health): #сохранение файлов проекта
data = [level, health]
f = open('savedgame.xyu','w')
cPickle.dump(data, f)
f.close()
def LoadGame(): #загрузка файлов проекта
f = open('savedgame.xyu','r')
data = cPickle.load(f)
return data
levelToSave = raw_input('Введи уровень, мудак!')
healthToSave = raw_input('Введи жизни, мудак!')
SaveGame(levelToSave, healthToSave)
del levelToSave
del healthToSave
levelLoaded, healthLoaded = LoadGame()
print "Твои сохранённые жизни, сучёныш:",healthLoaded
print "И при этом ты на",levelLoaded,"уровне"
Хочешь сказать, что куча этого говна (плагинов) не будет лагать? У меня на Атоме нехуёво плагины жрут.
Спасибо, щас сделаю
Не знаю, мне встроенного автокомплита хватало.
> У меня на Атоме нехуёво плагины жрут.
Саблайм намного легковеснее, вряд ли самыми тяжелыми плагинами получится довести до тормознутости чистого атома.
тоже атомом пользуюсь, но саблайм куда лучший выбор для пека-кофеварки
Ну я думаю надо в какой-нить контейнер засунуть Notebook этот.
> sqlite не позволяет модифицировать базу из других тредов.
А должен https://www.sqlite.org/threadsafe.html
Ну, я-то орм использовал. Может в нём поддержки нет. На стаке лишь и разговоры о том, что так нельзя. Или коннекты к базе закрывай после каждого чиха или соси.
Ты отстал от жизни.
Нет. В нормальных юниксах никаких wayland`ов нет и не будет. Также как этих ваших systemd. Насчет переносимости тоже сомнения.
Иксы есть под osx и даже винду.
Незнаю. Перебирай get_children рекурсивно.
Если его нет в билдере, то ты его сам создаешь? Почему не сохранить ссылку на него в переменной какой-нить?
>Если его нет в билдере, то ты его сам создаешь?
Я запилил widget_factory, которая каждый раз заново создаёт билдер, возвращает топ фрейм и вырубается. Буду наверное всю структуру возвращать, а не только его.
Продолжаю охуевать с функциональности. Совсем не такого я ожидал.
> Нет. В нормальных юниксах никаких wayland`ов нет и не будет.
Никто не заставит софтописателей продолжать поддерку иксов, а тем более мизерный процент среди разработчиков серверных ОС, так что ещё как будет.
> Иксы есть под osx и даже винду.
Костыли уровня xwayland, под виндой и osx никому не нужные.
> софтописателей продолжать поддерку иксов
gtk3 или там qt перестанет работать под иксами? Или ты про дерганье xlib вручную, этого почти никто не далает.
> под виндой и osx никому не нужные.
Пока ты не захочешь, например, запустить wireshark на удаленной машине - иксы это сетевая прозначность. Или что-нить ещё.
> gtk3 или там qt перестанет
Gtk4 или там Qt6 перестанет.
> Или ты про дерганье xlib вручную, этого почти никто не далает.
Делают, особенно при работе с графическими api.
> Пока ты не захочешь, например, запустить wireshark на удаленной машине
Что помешает мне сделать это без иксов?
> Что помешает мне сделать это без иксов?
Через vlc? Придется графический сервер и прочее говно ставить на сервере.
*vnc всмысле.
Через консольный wireshark tshark, очевидно.
На самом деле сетевая прозрачность в редких случаях может быть действительно полезной, но ты смотришь на ситуацию не с той стороны, это не просто "фича" иксов, а их предназначение, в 99.999% используется костыль уровня пикрил и клиент-сервер общение происходит через сокеты, фунционал - никому не нужный оверхед.
> общение происходит через сокеты,
Это норма. Некоторые вон хотят вообще микроядро - тогда даже с драйверами общение происходит через некоторые IPC.
> Через консольный wireshark tshark, очевидно.
Да можно записать дамп хоть tcpdump`ом и потом открыть этот файл для анализа на локальном wireshark, но удобней в реальном времени всё наблюдать иногда, запустив wireshark прям там.
Сделай как-нить @property которое будет get_text дергать само
Да тут главное не сама строка, а наличие прямой ссылкм на переменную, её срдержащу.
Я же говорю запили property. Или используя https://habrahabr.ru/post/122082/ сделай универсальную заворачивалку для TextBuffer`ов.
hnnnng
– В 10 лет я уже могла считать себя программистом, – рассказывает девушка. – К этому времени я изучила технологии С#, ADO.NET, SQL, HTML, CSS, Javascript. Чтобы получить карманные деньги и практический опыт, я стала выполнять отдельные заказы.
В 15 лет Лена устроилась на первую работу по трудовой книжке: она занималась программированием серверных компонентов на C#, в том числе безопасных WEB-сервисов. В это же время она сдавала школьные выпускные экзамены
Причем тут вообще воспитание? Просто интерес должен быть.
Мне вот попалась книжка случайно про бейсик в младших классах, я её в туалете почитал и заинтересовался стал пробовать примеры кода что там были.
О чем видео то? Туториал по сассандра пересказывает?
Вот именно, что при всем оно!
Батя смог заинтересовать ребенка и направить, дать нужные знания.
А чем обусловлено "siwa" на куртке, полагаю, шведа? А то по-китайски это 丝袜 и значит "чулки".
Не, не мог. Я финских имён не знаю.
Бытие шлюхой повредит её имиджу не меньше.
пости свою жс дрисню в жс тредах
жс дрисня, что еще сказать.
Сижу, разглядываю листинг на Питоне. Отец, глянув издалека на монитор, спрашивает: Маяковского читаешь?
Потому что меньше костылей надо вставить чтобы стало хорошо.
Потому что сколько костылей в питон не ставь, хорошо не станет.
>Почему под питон так мало библиотек?
>Потому что сколько костылей в питон не ставь, хорошо не станет.
Вербовщики жс дрисни подоспели.
К примеру: %h;sample text%
Как вытащить "sample text"?
Попробовал: 're.findall('%h(.*?)%','tegs%h;\w+%dsd')', т.к. вместо 'sample text' может быть и другой текст, но выдаёт лишь: '\\w+'
Пошел нахуй.
Ты чего-то тупишь помоему.
У тебя строка
'tegs%h;\w+%dsd'
Вот и получается что текст между ними это \w+
Ты же сам написал там \w+
re.findall('%h(.?)%','tegs%h;\w+%dsd')
'%h(.?)%' - регулярка
'tegs%h;\w+%dsd' - твоя строка. можешь что хочешь там писать 'baa%h;blabla%fooo %h;zzz%' например
Да понял, что там любой текст. Просто, я, к примеру, пишу: %h; ЛЮБОЙ ТЕКСТ% и выбирается текст между этими символами. А так я просто получаю \\w+ вместо того текста.
А. Во.
http://pastebin.com/dGGLDSx7
Пишов ты на хуй, я тебе интерпретатор штоле вникать.
Поясните по этому рисунку. Я ничего не понял.
Ой, ну это древнее изобретение ещё. Стек был даже на 8битных машинах. Суть в том что оно дохуя оптимально выделяет память под локальные переменные функций, и ещё это единственный способ хоть как-то совладать с рекурсией.
Как понимать этот рисунок? Я не понял ничего из текста.
>>688219
Ну это короче так:
объявил ты в начале модуля переменную
вот так
cat='Муська'
А потом в какой-нибудь функции объявил переменную с тем же именем:
cat='Мурка'
Что будет если ты сделаешь
print cat
в теле функции?
Мурка. Теперь понял. Локальные и глобальные переменные обсуждались в предыдущей главе.
И что всё это значит?
Конкретно меня вводит в заблуждение последний стэк с bruce.
Ох.
Ну вот ты бы сам как сделал вызовы функций?
1. Локальные переменные внутри одного вызова не должны никак пересекаться с локальными переменными другого вызова.
2. Функция должна как-то знать куда она сделает return.
3. Одну и ту же функцию можно вызвать много раз.
Это всё понятно. Спасибо.
Конкретно стэк с bruce вводит в заблуждение. Почему в примере показано, что при вызове он возвращает текст?
Стековая диаграмма всего лишь показывает название переменной и модуль в котором она создана в контексте цепочки вызова функций
То есть когда одна функция вызывает другую, то локальные переменные вызвавшей функции могут быть переданы в вызванную функцию.
А когда управление передается из вызывающей функции обратно, то все ее локальные переменные пропадают.
> То есть когда одна функция вызывает другую, то локальные переменные вызвавшей функции могут быть переданы в вызванную функцию.
> А когда управление передается из вызывающей функции обратно, то все ее локальные переменные пропадают.
Можешь примером показать, пожалуйста?
Ну эт видимо локальная переменная функции print_twice. И видимо это её аргумент. То что в предыдущем стеке называлось cat передалось как bruce
def print_twice(bruce):
видимо так
Нивапрос.
http://ideone.com/EVWXrQ
В этой фиговине нарисуй для себя такую диаграмму в точках отмеченных как ## и ###
Иди почитай про то как память в компах устроена и как процессор работает. Открой для себя факт что перемещать куски памяти пиздец как дорого, а аллокейтить лучше всего именно что стеком, ибо одно за другим плотно идёт. И деаллокейтится не образуя дыр. То есть стеку чтобы чёта разместить нужен только адрес вершины и никаких тебе йоба структур данных.
Вообще нахуя тебе оно в питоне? Выбрось эту книжку, возьми попроще что-нибудь.
Распутался. Понял. Спасибо.
Другой вопрос.
> Напишите функцию right_justify (выровнять по правому краю), которое принимает строку s в качестве параметра и печатает ее так, чтобы оставить слева столько пробелов, чтобы последняя буква была на 70-й позиции..
Как узнать, точно ли последняя буква на 70-ой позиции?
http://ideone.com/7K9zwC
__main__
Объявили
reallymanytimes=12
Запустили printmanymanybl с передачей внутрь значения reallymanytimes, то есть 12
Внутри функции printmanymanybl известно о внешней переменной reallymanytimes но также известно о значении переменной manytimes, которая является параметром этой функции
Дополнительно к этим двум объявляется еще одна, supamanytimes, которой присваиваем не значение внешней переменной, которая принадлежит самому модулю __main__ а значение внутренней переменной manytimes помноженной сама на себя.
Теперь вызываем функцию
printbl
и передаем ей параметром значение локальной для функции printmanymanybl переменной supamanytimes
В функции printbl нам ничего неизвестно про внутренние переменные функции которая нас вызвала, но мы оттуда видим свою переменную-параметр times и таки глобально объявленную переменную __main__.reallymanytimes
И уже внутри printbl ничего дополнительно не объявляя тупо выводим букву "ы" times раз подряд (не подозревая что times - это копия той самой переменной supamanytimes, которую инициализировали в printmanymanybl
Делишь длину строки на 70 нацело.
Получаешь число полных кусков по 70 символов в строке.
Потом получаешь остаток от деления на 70 и вычитаешь его из 70.
Получаешь число пробеллов, которые и выводишь перед последним, неполным куском строки, дополняя его таким образом до 70 символов.
Читал это ещё когда тред про неё был. Ты опоздал. Да и не альфач это, а просто всратый мажорчик, из которого она деньги и гражданство тянет.
Будто она мало зарабатывала.
Будто после выступлений на всяких конференциях на западе и будучи бабой её не взяли бы на работу в США и так.
Таких софтик как говна.
http://gtgnome.net/
Плюс в любой ide и редакторах типа vim/emacs это встроено.
Знаю. Так не интересно. Зато теперь я могу перед школьниками хвастаться.
Гугл даст.
Ничего не пойму, она действительно что-то знает или просто распиаренная пизда из-за выступлений на конференциях и её список знаний просто ложь?
Фиг знает на гитхабе у неё какие-то helloworld`ы какая-то чушь типа(https://github.com/lenadroid/lenadroid.github.io/blob/master/despair.js/js/despair.js). На конференциях я потыкал немного - пересказывает tutorial с оф сайта походу, при этом через жопу используя докер.
Плюс в этом семестре проект на питоне надо будет сдать, хочу совместить.
Чот проиграл. Сам себя не похвалишь - никто не похвалит
https://github.com/lenadroid/dotnetfringe.github.io/commit/6c6f45e531b17eef0ec22fab8aae81a930680342#diff-236a4950d125dab8b20b783f4fb5d08cR20
Напиши систему учета заказов/километража/оплат/рабочего времени диспетчера для диспетчерской какой-нибудь службы такси.
Или для какой-нибудь умозрительной логистической конторы.
О логистике думал, да, спасибо.
Как думаете, не поздно ли вкатываться в пайтон для веба практически с нуля?
>>688483 мой пост.
> Питон умирающий язык.
ну хоть и с моим вопросом уровня б, мне кажется что это не совсем так.
> Фронтенд
ты имеешь в виду верстку или что? яваскрипт в вакууме не используется. Он используется с html, css. То есть целый стек.
>>688563
инсайдер-кун, ты опять выходишь на связь?
Вот фронтэнд умереть может, а бэкэнд нужен как для веба, так для мобилочек.
питон тоже в вакууме не используется надо дофига всего знать.
нет, не верстку, а фронтенд программирование. плюс нода ещё есть.
> Баззвордами разговаривает
https://lenadroid.github.io/hireme.html
Doing any kind of complicated solution architecture, distributed cloud programming, high load and performance, big data analysis, data science, functional programming and machine learning.
No, simple and clear is better.
27 лвл, дохуя давно в айти кручусь, но программёром не работал уже лет 7. Умею питон3 + стандартную библиотеку + нампи + сайпи + пандас и чуть фласк/джанго.
По баблу мне похуй совсем, если чё.
Расскажи свою стори, с чего начинал, что изучал и вообще все подробности, интересно послушать.
А по теме: крайне маловероятно что-то найти по заданным критериям, только если в офис, пошерсти на hh вакансии, требования, сразу поймешь какой расклад щас на рынке.
px = Gtk.IconTheme.get_default().load_icon("emblem-default", 64, 0)
'Pixbuf' из 'gi.repository.GdkPixbuf' я импортировал.
Делаешь gtk.Image() в нем дергаешь set_from_icon_name или set_from_pixbug
Для кнопки делаешь button.add(image)
http://www.pygtk.org/pygtk2tutorial/ch-ButtonWidget.html#buttonfig
Вот как-то так можно. В gtk3 аналогично делается.
Пишет, что argument image: Excepted Gtk.Widget, but got gi.repository.GdkPixbuf Pixbuf
Пробовал: b = Gtk.Button(label="button",image=px), но не даёт.
Пробовали и: b.set_image(Gtk.image_new_from_pixbuf(px)), но тоже не даёт.
О, заработало.
В универе быдлокодил на пхп-4. Даже без ооп, просто такой самый быдлокод из быдлокодов.
Потом была пиздатая карьера в сфере далёкой от айти - уволили в 2012. С 12го вяло восстанавливаю карьеру, но с учётом крымнаш и прочей хуйни - решил взяться за старенькое что бы хоть кем-нибудь устроиться смог есличто.
Вот с октября учу питон. Прочитал штук 15 книженций уровня нуб/нуб+, доставили больше всего Think Python, Питон и анализ данных, Core Python Applications Programmig, The Python Standard Library by Example
Всё, в принципе.
В вебдев пытался вкатиться - но что-то не идёт, а пока могу находить вещи которые туда-сюда интересные и получаются - решил себя не насиловать джангой, которую я не понимаю совсем, хотя думаю рано или поздно придётся вникать и в неё.
Переезжать куда-нибудь не могу, в целом. А в моей мухосрани ничего нету.
К слову русская контора это было бы замечательно, но не обязательно. Английский знаю туда-сюда.
Не переживай, из русских контор тут (ДС) скоро останется мылорушечка и все что она успела накупить и отжать, и может быть яндекс. А я вот сейчас наблюдаю за происходящим банкротством уже второй компании, в которой довелось поработать. Хуево все, короче. Надо переквалифицироваться в индуса.
Да не, в ДС дохуя контор. И крупных и мелких.
Мелкие часто банкротятся и раньше банкротились и новые появляются, это нормальный процесс.
>map, apply, reduce
Явное лучше неявного и простое лучше сложного.
Чем каждый раз городить одну и ту же плохую реализацию на генераторах проще добавить в стандарт.
Незачем. Если тебе надо одну функцию применить, то map бывает удобней иногда типа map(str.strip, list_of_strings)
Или filter(None, somelist)
apply вообще Deprecated since version 2.3
reduce редко бывает нужен совсем.
Ты же утрируешь? Скажи что утрируешь! У меня ёбанная паника от твоего поста. Серьезно, хуёво стало. Парни и девочки, он же неправ, да?
Тебе все советовали перед любым языком программирования выучить английский. Выучил бы - похуй бы было. Апворк или удаленка и ебись оно все конём
Айти не самодостаточно, оно живет за счет вливаний из реального сектора. Прямых или косвенных. Сейчас реальный сектор страдает и в первую очередь экономит на айтишых выебонах, рекламе (которая тоже в этих наших интернетах) и потом уже своих работниках.
Кто бы спорил. Работать вообще не самое пиздатое в жизни
Да и reduce тоже убрали и в functools закопали.
> Какую структуру лучше использовать?
trunk/
branches/
tags/
https://ariejan.net/2006/11/24/svn-how-to-structure-your-repository/
ps = Popen('ls', stdout=PIPE, stderr=PIPE)
out, err = ps.communicate()
Какой тип будет у out, string или [string], если это массив то есть ли там символ перевода строки?
Как в общем случае такую информацию получить?
str
> Как в общем случае такую информацию получить?
1) читать документацию
2) запустить это в интерактивном режиме и посмотреть какой type(out)
у питона отличная документация ты видимо не сталкивался с проектами где документация действительно говно или вообще отсутствует.
Плюс есть docstring`
Беру свои слова обратно, я смотрел онлайн документацию
Мне надо к самому какому-либо аппарату прикрутить сайт и базу данных. Парсер, очевидно, не подходит для этих целей. А пилить имиджборду на питоне, как в одном гайде, мне западло.
Двачую, документация что надо. Еще и собрана в одном месте и рассортирована по версиям.
А все разобрался, ебать я наркоман.
>>689517
Алсо на гитхабе дизайн сменился, где там поиск теперь?
Там же где и был, строка сверху.
DRF же + django-mailing, gunicorn, fabric (или какой-то его форк для 3.x, забыл название).
Не мастхэв, но часто приходится юзать django-push-notifications, python-social-auth/django-allauth, drf-nested-routers.
Логика подсказывает что можно. В чем проблема то? И по пакетам пайшарма пройдись.
В том что синтаксис у ренпая другой. По пакетам прошелся, и в гугле прошелся.
Хочу помесить кнопку в нижний правый угол дива, сделал:
position: relative;
bottom: 0px;
right: 0px;
При "position: absolute;" как и ожидается, кнопка едет в нижний правый угол страницы, но при "relative" эта ебала не работет, и вопрос не почему, а кто придумал эту ебучую даунскую ксспарашу?
Фронтенд - свалка исторических костылей, где ни одна технология не оказалась по причине своей годноты. Используешь технологии фронтенда - жрешь говно.
В последний раз верстал чего руками году эдак в 2006м, и тогда жс был нужен ровно в объёме 5 строк просто что бы переключать картинки бля.
А сейчас влез и охуел. Прям реально опизденел с этого всего куда оно скатилось.
А схуяли они должна ехать в угол при относительной позиции? Ты доки хоть осилил? Сдаётся мне,
>ебучая даунская параша
Это не технология, а твоя необучаемость.
Шалом. Учусь кодить на пистоне и параллельно пытаюсь писать скрипт для вк. Столкнулся с проблемой: мне необходимо получить "списки" типа "user: group, group, group, group; user1: group, group, group, group; etc". Как это можно реализовать?
Я использую https://pypi.python.org/pypi/vk/2.0.2
Смотри что я пытаюсь сделать:
import vk
session = vk.AuthSession(app_id='', user_login='', user_password='')
api = vk.API(session)
listOfMembers = api.groups.getMembers(group_id='1', count=500)
testUsers = api.groups.isMember(group_id='2', user_ids=listOfMembers['users'])
i = 0
for element in testUsers:
test = testUsers
if test[u'member'] == 1:
print test[u'user_id']
if i < 499:
i = i + 1
else:
break
На выходе получается список пользователей группы 1, которые также состоят в группе 2. Так вот, я хочу сделать такую же проверку по десятку группу и на выходе получить список:
user: group, group, group, group;
user1: group, group, group, group;
etc
и не могу сообразить каким образом это сделать. То-есть я понимаю как сделать проверку, но не могу сообразить как сохранить информацию в нужном мне формате.
Я использую https://pypi.python.org/pypi/vk/2.0.2
Смотри что я пытаюсь сделать:
import vk
session = vk.AuthSession(app_id='', user_login='', user_password='')
api = vk.API(session)
listOfMembers = api.groups.getMembers(group_id='1', count=500)
testUsers = api.groups.isMember(group_id='2', user_ids=listOfMembers['users'])
i = 0
for element in testUsers:
test = testUsers
if test[u'member'] == 1:
print test[u'user_id']
if i < 499:
i = i + 1
else:
break
На выходе получается список пользователей группы 1, которые также состоят в группе 2. Так вот, я хочу сделать такую же проверку по десятку группу и на выходе получить список:
user: group, group, group, group;
user1: group, group, group, group;
etc
и не могу сообразить каким образом это сделать. То-есть я понимаю как сделать проверку, но не могу сообразить как сохранить информацию в нужном мне формате.
http://ideone.com/NbeXBO
Я нихуя не понял. Чего ты хочешь добиться? Получить список пользователей, каждый из которых состоит в списке заданных групп?
В общем я хочу очистить группу от людей подписанных на мдк, падик, и прочий ЗШ.
Несусветная хуйня какая-то, откуда ты такое вообще нарыл? В чём проблема d['x'] += 1 сделать?
Для статик метода лучше декоратор использовать, ты кошернее.
Создаешь словарь с user id в качестве ключа, значения - пустые списки, проходишься по по списку нужных групп, вызывая эту хуйню api.groups.isMember, проходишься по результату, добавляя в словарь номер группы, если test['member']==1, вроде result[id].append(group_id). Понел? (я эту либу не юзал, если че)
Но в словаре у ключа может быть только одно значение или нет?. Во всех примерах что я нахожу записывается так:
>>> d
{'server': 'mpilgrim', 'uid': 'sa', 'database': 'master', 42: 'douglas', 'retrycount': 3}
А у тебя список значением будет. Хуле нет? Значение может быть мутабельным, ключ -- нет.
Бля, ты даже основ не знаешь, а лезешь в васянские либы. Нахуй так жить?
>Бля, ты даже основ не знаешь, а лезешь в васянские либы. Нахуй так жить?
Если я не практикуюсь - то мгновенно всё забываю.
>А у тебя список значением будет. Хуле нет?
Всё равно я нихуя не понял. Сделай пример кавычками.
Я дочитал Доусона, т.е. более или менее ознакомился с базовыми вещами, и пришло время практиковаться. Поскольку я хочу катиться в сторону бекенда - решил в качестве практики попробовать начать делать какие-нибудь вебстранички, начиная с простеньких. И понял что не знаю как вообще соединять питон и веб.
Что прочитать по питону в веб и как вообще начать?
Документацию по tornado, aiohttp.
Сажи за омерзительный оппик.
Удваиваю. ОП-хуй.
До веба тебе имхо рановато, после одного Доусона-то. Но дело житейское, конечно.
"2 Scoops of Django" и "Test-Driven-Development for web programming" по Django - годнота из годнот
Ещё мне понравилась глава о джанге в "Core Python Applications Programming"
Туториалы годные - официальный и Django Girls. Возможно с последнего стоило бы и начать, что бы сразу получить представление что за хуйню ты собираешься в итоге получать ковыряясь в джанго.
По веб2пу (который возможно бы имело смысл глянуть после питона до джанго) всё совсем просто, прямо на уровне прошёл туториал - вкатился.
По фласку специальной литературы я немного видел, но не трогал. После веб2пу наполовину интуитивно вкат идёт.
не пробовал с 1ЭСкакрусская, а с птичкой отлично работает, нужно pip install fdb и установить клиент firebird с оффсайта, если в PyCharm хочешь базу подключить, то еще нужно драйвер jdbc скачать, опять же с офф сайта firebird
Перепробовал все шаманские способы из стака, ничего не помогает. Как это можно разрулить?
И годы боли и унижений.
Нужно использовать мультитрединг, pyqt + quamash + asyncio или поочереди вызывать лупы гуя и сети.
>>666666
Рабист закукарекал.
Раби как всегда на дне, даже ниже чем обычно.
>чужое понимаю
Лол. Я свое понять бывает не могу.
Вбей в гугл regular expression online и поиграйся. Можешь еще дописать типа database или snippets и тоже полистать. Это точно работающий путь.
Еще в Core Python Programming их туда-сюда объясняли, мне понравилось но выучил я их до этого
Ну, не то, чтобы понимаю, как это работает, но понимаю, что нужно скопипастить, чтобы сделало что-то.
Нет.
Ясно.
Я не пойму, ты клоун или клоун?
Дополню как только приду.
Пиздец, не знал что у нас столько страниц в вики. Я думал только одна.
Бамп
Отсидел два доклада из трех. Ничего инновационного, интересного. Первый доклад обзорного типа, второй реклама юпитера.
Написал один скрипт, крутится в бесконечном цикле, отсылает инфу на сайт. Как принято заворачивать всё это дело, шоб можно было мониторить там нормально, при падении самовосстанавливать и всё такое?
Братишка, я всё равно нихуя не понимаю. Чому он полностью переписывает словарь, вместо его обновления?
http://dpaste.com/0R2D46R
Так его нужно использовать не только для добавления значения к уже существующему ключу, но и для добавления нового ключа:значения?
А нет, с добавлением у тебя все верно, это я тупанул. У тебя просто словарь переписывается (строка 29) в каждой итерации for element in testUsers, т.е. для каждого юзера
Попробуй так - http://dpaste.com/3KHM462 будет полный словарь по всем группам и юзерам
Или воткни zashquaredList = {} после for element in zashquaredGroups, будет после каждой группы сбрасываться.
Алсо, что у тебя там за пустые айдишники? group_id=''? Мне vk на них еггогами сыпал, пришлось мдк воткнуть.
>Алсо, что у тебя там за пустые айдишники? group_id=''? Мне vk на них еггогами сыпал, пришлось мдк воткнуть.
listOfMembers = api.groups.getMembers(group_id='', count=500, offset=offset)?
Это айди группы из которой происходит выгрузка пользователей. https://vk.com/dev/groups.getMembers
Бамп вопросу.
Сделай systemd unit же. Там ini-like файл в 5 строчек получится. Он и запускать будет, и мониторить, и логгировать, и перезапускать в случае падений.
В общем то всё хорошо кроме ЕБУЧИХ РАЗРЫВОВ СВЯЗИ. ААААААААААААААААААААААААААААААА АААААААААААААААААААААААААААА БЛЯТЬ!!! АААААААААААААААААААААААААА
скрипт на шелле, который при падении заново запустит:
#!/bin/bash
while :; do
python3 run.py
done
ну а чтоб мониторить, внутри своего питоновского скрипта пиши в log.txt что хочешь
Мой код
import vk,logging
logging.getLogger('vk').setLevel(logging.DEBUG)
session = vk.Session(access_token='here it goes')
api = vk.API(session, v='5.35', lang='en', timeout=10)
print api.messages.getHistoryAttachments(peer_id=wow, media_type='photo')
зато при переносе на машину клиента не нужно всякие мониторщики объяснять как настраивать. я с заебался, так проще
Дистрибутивы, в которых systemd установлен по умолчанию:
Debian GNU/Linux версии 8
Ubuntu 15.04 и позже
Fedora 15 и позже[13]
Mageia 2[14]
Mandriva 2011[15]
Rosa
openSUSE 12.1 и позже[16]
Arch Linux 12.11[17][18][19] (предоставляет возможность использования как самописной системы инициализации (более не поддерживается[20]), так и любой другой (также без официальной поддержки со стороны дистрибутива))
Sabayon 13.08[21]
Не вижу цетоси и красношапки, а должны быть. Но даже в оплоте анти-systemd - генте - теперь systemd. Короче, везде.
Обязательно:
- уверенное знание Python (будет использоваться Python3);
- уверенное знание Django;
- общий технический бекграунд, представление о работе сервера, опыт развертывания каких-либо web-проектов (включая учебные или любительские), cli, сетевые протоколы.
Плюсом будут знания:
- знание Django REST Framework;
- общее представление о том как устроены сайты, что такое Интернет, веб-браузеры и т.п.
- знакомство с Celery, Virtualenv, Supervisor, uWSGI, Nginx, Tornado, Redis, Memcached, Ansible;
Вкатываться сюда: https://goo.gl/jLY5ff
Ты тут хуй.
Меня мама в детстве заставляла колготки носить, поэтому теперь я ношу только ШИРОЧИ
Но от той бирюзовой жопы слева внизу я бы не отказался.
А нормально аргументировать за недостатки, перевешивающие преимущества, можешь?
Я привожу аналогию. Что за systemd - то я, как юзер, вообще не заметил разницы.
Debian Jessie.
Ну а кому он нужон?
Поставил себе vk api через pip, в интерпретаторе все заебись импортируется и запускается, а когда запускаю тот же код из скрипта, то все валится на второй же строке, сообщая мне о том, что у vk нет метода Session(). Как пофиксить?
import vk
session = vk.Session()
Да, стоит Anaconda x64 с python 3.5.1
Замени на
session = vk.AuthSession(app_id='', user_login='', user_password='')
api = vk.API(session)
Покупай по размеру, аутист.
Такая же ошибка, только уже с AuthSession.
Повторю, что пошагово через сосноль все работает: dir(vk) возвращает атрибуты, в числе которых Session, API и прочая хуйня. А вот скрипт возвращает только стандартные атрибуты.
Ты блядь даже не знаешь что запилить, а уже спрашивашь. В твоей голове пустота и рак, чернь ебаная, черви, двачинки нахуй, о чем мне с вами говорить, вы же все мрази блядь, с вами невозможно по-человечески. Запилим проект блядь, а стартпачик тебе не намутить, может переписать на тебя потом долю в IPO? Да ты же раковать на двощах только и умеешь, выблядок сраный, пользуешься чужим говном и ничего сам не создаешь, при первом же случае кинешь нахуй, в пизду такое отношение блядь, никогда я нахуй больше не буду иметь с такими дело, никакой блядь ответственности и головы на плечах, лишь бы пораковать и поугорать, да пошел ты нахуй, червь-пидор, я не для тебя учился программировать, запилить проект он блядь хочет, охуеть теперь.
Вы кто?
Пили перекат
Переполз.
В общем, есть примитивный код: http://pastebin.com/wcEhadUm
И, собственно, какого чёрта импорт pybrain'а влиет не только на существующие, но и вообще на все новые логгеры? Как так-то, блин?!
Там в нём есть напрямую вызовы logging.warn(...), которые, вроде как, и есть проблемные места (в рут логгер, что ли, добавляется дефолтный хендлер, который вызывается всегда, так как является "родителем" всех логгеров полученных через менеджер). Но что это за бред-то, блин? Единственный способ получить чистый, личный логгер - это напрямую l = logging.Logger('mojo'), но тогда он в менеджер не запишется и я из другого модуля не смогу его через getLogger получить никак (создастся новый).
Что я не так делаю-то, как мне быть? Хочу логгер через getLogger, но без "чужого" мусора в нём.
Вот за это я и люблю лжедвач!
Собственно, вот это можно запустить для иллюстрации проблемы (на идеоне не работает logging) — http://ideone.com/8p6md2
Нет. Пиши вопрос и тебе, возможно, ответят. Тут не биржа личных консультантов.
Понял, сча всё будет
Сделал однопоточную версию программы, она думала его генерировала порядка 30 минут (300 Мб).
Прочитал, что операция записи на диск дорогостоящая по времени, чтоб записывать по одной строке, поэтому стал добавлять по блоку в 2Мб в файл.
Стало быстрее...Немного.
Решил использовать пул потоков, для создания этих блоков.
Но, написанный код всё равно выполняет их по очереди, и по этой же очереди записывает профита нет.
Что в этом участке надо пофиксить, чтоб оно генерировало одновременно в нескольких потоках, а потом записывало в файл?
быстрофикс:немного неполная картинка
количество блоков гораздо больше количества процессов в пуле. Количество процессов я поставил = 10.
Во-первых, стоит сначала найти проблемное место. Что-то мне подсказывает, что это не запись занимает полчаса, а генерация. Threading для cpu-bound задач не подходит, тут multiprocessing нужен.
Какой бы дорогостоящей операцией запись ни была, даже 100 вызовов никак не будут влиять на общее время, если оно у тебя в минутах исчисляется, а быстрее скорости диска писать, естественно, ни треды, ни процессы не помогут.
http://pastebin.com/EqzMd02K
Total time: 6.567
Chars: 62914560
File size: 251658240
Generation time: 2.931
Writing time: 3.618
Ну а затем замечаем, что генерация занимает меньше времени, чем письмо, и тут-то уже мультитрединг и можно подрубить: пока генерируется новая часть, предыдущую пишем.
http://pastebin.com/9W6nYz4e (могут быть мелкие ошибки, перепечатывал вручную, т.к. запускал на другом компьютере, без доступа к двощам)
Total: 6.332
Generation time: 2.910
Writing time: 6.125
А, ну и от multiprocessing'а толку уже никакого тоже не будет (в моём случае, по крайней мере), т.к. ~97% занимает запись на диск.
Если у тебя сэсэдэ, можешь поиграться.
Впроче, если у тебя ssd, То и процессор вряд ли core2duo, лол.
Простите за получившийся односторонний чятик.
Что кодить? Как побороть апатию и уныние?
Соус?
Господа, у меня вопрос.
В питоне и джанго я новичок. Но умею программировать на си++( не полный нуб в программировании, короче).
Собственно, вопросов у меня даже два.
1) Какую иде поставить для питона+джанго на убунту?
2) Какие есть хорошие учебники, желательно на русском?
Жду ответов.
1. Заходишь в форму для регистрации.
2. Регаешься.
3. Жмёшь на один из активных островов(Home/Elementary, там простые задания)
4. Выбираешь задание(палочками, с правой стороны, показана сложность).
5. Читаешь задание(в самом низу есть подсказки\пояснения), если оно тебе нравится - переходишь к выполнению.
6. Собственно окно в котором ты пишешь код\вставляешь готовый. Try It - проверка твоего кода с заданным значением. Run&Check - проверка твоего кода с различными данными из задачи, ну и вывод результата:
___1. Всё хорошо.
___2. Ошибка в строке %name%
___3. Ошибка при проверке результа %value%
7. Если всё хорошо.
1. PyCharm Community Edition (https://www.jetbrains.com/pycharm/download/#section=linux).
2. Саммерфилд и\или Лутц(4-ое издание) - это по пайтону.
Вы видите копию треда, сохраненную 9 апреля 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.