Задать вопрос
  • Совет начинающему программисту. Как следует подходить к приобритению навыка OOP?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Ну, для начала почитать паттерны проектирования, они изначально были следаны для явы, некоторые к питону прямо не относятся (в силу того, что на питоне можно вообще без классов, и можно вообще в стиле функционального программирования), но дают хорошую базу именно в ООП. С другой стороны, если в яве дизайн именно ООП, то на питоне иной раз не хочется и класс заводить, а пишешь в стиле функциональщины.
    Наверное первое что нужно сделать, изучить области видимости и помечтать как они могут пригодиться...
    Ответ написан
    2 комментария
  • Где взять csrf token для lk.megafon.ru?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Так ведь все просто!
    Фома состоит из трех полей
    CSRF - тип hidden, в значении value как раз и лежит то, что вам нужно.
    j_username: тут все понятно
    j_password: тут тоже

    Нужно:
    1) запросить страницу /dologin/ (запрашивать страницу нужно каждый раз при новом логине)
    2) отпарсить html и выбрать значение value из
    3) Отсылаем все ТРИ поля (CSRF, j_username, j_password) на /dologin методом post.
    4) Получаем ответ и смотрим на куки и прочую фигню..

    Отпарсить
    from HTMLParser import HTMLParser
    import urllib2
    req =  urllib2.urlopen("https://lk.megafon.ru/dologin/")
    data = req.read()
    class MyHTMLParser(HTMLParser):
    	def handle_starttag(self, tag, attrs):
    		attr = dict(attrs)
    		if tag == "input" and attr.get('name', "") == "CSRF":
    			print "Encountered a start tag:", tag, attr["name"], attr["value"]
    
    parser = MyHTMLParser()
    parser.feed(data)

    Encountered a start tag: input CSRF 2c8b2246-6e99-4469-924f-2c8086cd2dae
    Ответ написан
    Комментировать
  • Как написать простую CMS на Python?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Ставьте mezzanine и будет вам уже и базовые документы (с wisywig редактором) и бложик и админка (и виджеты в админке) и наследование темплейтов и сами темплейты и маленькая кучка всего типа вордпресса, и инлайн редактирование, даже магазин есть Ну и это джанго приложение со всеми вытекающими. mezzanine.jupo.org
    Как раз сам сейчас думаю его в проекте использовать.
    Ответ написан
    Комментировать
  • За скорость обработки циклов отвечает процессор?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    За скорость обработки циклов отвечает процессор?

    1. Да. Но, если в цикле присутствуют обращения к диску, сети или чему-то внешнему, кроме памяти и самих регистров процессора, то процессор в периоды этих обращений будет простаивать.

    Если в однопоточном выполнении какого-либо сценария будет 50 тысяч итераций, это нормально?

    2. Нормально, если задачу нельзя разбить на независимые подзадачи. Пример неразбиваемой задачи найти сложно, но например задача комивояжера в классическом исполнении.

    А если поставить всё это дело на машину с высокочастотным процессором?

    3. Будет быстрее, если нет НО из первого ответа.

    А если многоядерный процессор?

    4. Будет быстрее, если нет НО из второго ответа.

    И если программа выполняется в одном потоке, то количество ядер не важно?

    5. Да, неважно.
    Ответ написан
    Комментировать
  • Что такое неклассические модели процессов?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Интересно, это где таким птичьим языком написано?
    В принципе, такие типы процессов могут применяться в реалтайм системах. Но и там, в тех, которые знаю, более-менее используется традиционный подход, процессы и треды. Если только где-то в VTRX или VxWorks, может быть.

    Наверное объяснение такое, когда создаем процесс, то к нему можем передавать кусок общей памяти, но это и так во многих ОС делается через shared memory, события и сигналы, называется IPC.

    С другой стороны, тот же линукс вполне подойдет под данное определение, как минимум частично. Это когда мы форкаем процесс, то данные процесса у нас не сразу копируются для него, а только после первого обращения к нужной странице памяти. Так называемое ленивое копирование. Ну а разделяемые куски кода лежат в *.so файлах.

    Что касается общих ресурсов, то например в OS-9/9000 есть разделяемые библиотеки (модули), в контексте которых есть отдельный стек на библиотеку (модуль). Там могут лежать данные, доступные всем процессам, которые используют данный модуль. С другой стороны, процессы в ней очень даже традиционные, если не линковаться к модулям. Но 0S-9/9000 наверное единственная ОС, которая так может и с которой я работал таким образом.
    Ответ написан
    Комментировать
  • Возможна ли перекодировка файлов "на лету"?

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    Файлы записать в архив на СД/ДВД и перекодировать как написал ShamblerR
    Ответ написан
  • Есть ли одноплатный компьютер для управления силовой элеткроникой?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Как я понимаю, подойдет любой компьютер, хоть одноплатка, хоть расберипи. Весь вопрос в исполнительных устройствах, которые подключаются к портам GPIO и интерфейсам IO.
    Другими словами, я не знаю ни одного компьютера, который был бы специально заточен под силовую электронику, они все заточены на управление разнообразным оборудованием. Но я знаю кучу производителей устройств для силовой электроники, которыми можно управлять с любого компьютера, встроенного, одноплатного или общего назначения.
    Начните с поиска нужных исполнительных устройств (реле, разрядники, и что там еще по вашему профилю), далее по интерфейсам управления подбирайте компьютер с соответствующими портами IO (modbus, profibus, spi, i2c, какие-то частнофирменные протоколы)...

    Приведу пример: у меня есть автомобиль, и куча исполнительных устройств для него, датчики, регуляторы, замки дверей, капота, доводчики. Все они имеют интерфейс CAN (так уж повелось в автомотиве). Ну мне тогда сам бог велел поискать одноплатку с двумя-тремя CAN-шинами и нацеплять исполнительных механизмов и датчиков гирляндами на них.
    Ответ написан
    Комментировать
  • Оптимизация скрипта при большом количестве запросов?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    А не пробовали эмулировать работу скрипта на простом sql? Что получается? Ну и без анализа самих запросов, типов данных и структуры таблиц сказать вообще ничего нельзя.
    Единственное, что можно порекомендовать- кешируйте данные на чтение. И если при работе тормозит процессор, то попробуйте параллелить задачу, а если тормозят диски - ставьте ssd. Другой путь - не сохранять в базу, а сохранять в память, например в redis, mongo, а уже потом перекидывать готовый результат куда нужно.
    И что-то неправильное в консерватории, если индексов на таблицу больше двух, максимум трех... Снесите индексы, проведите массивную вставку, создайте индексы заново. Ну и анализ запросов и explain в помощь.
    Что такого можно делать со 100к запросов?!
    Ответ написан
    Комментировать
  • Как хранить media-файлы, если приложение запущено на нескольких серверах?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Любое распредененное хранилище, mongo, redis, memcached, ceph...
    Ответ написан
  • Как правильно поднять сервер?

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    В обязательном порядке! Файервол, можно встроенный ufw, на просто lamp-сервер этого достаточно. Прикрываем все порты кроме ssh (22) и 80/443, можно ssh перевести на какой нибудь 9922 порт, но это для параноиков.
    Я еще ставлю fail2ban, да, я параноик. Хорошо бы отдельной партицией вторую копию root-раздела держать.
    И сгенерите доступ по ssh только по ключам!
    Дополнительно по вкусу.
    И неплохо nginx фронтоэндом, а можно только им обойтись (без апаша), но тогда нужно еще php-fpm поставить и настроить.
    Ну и memcached по желанию.
    Так в общем все остальное можно докрутить по ходу работы.
    Ах, да! Воткните collectd для сбора статистики.

    И сначала все это на виртуалке попробуйте.
    Ответ написан
    Комментировать
  • Не видна машина на разных сегментах. Что делать? В чём проблема?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Default gateway везде правильно настроен? Подсеть у всех одна? Это один сегмент ethernet? Wifi-клиент это тоже роутер?
    Приведите на рисунке подсети и выделенные сегменты, а то не совсем понятно...
    Ответ написан
    2 комментария
  • Django: SQLite или PostgreSQL?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    postgres конечно! sqlite только для разработки или как встроенная база для малоточного приложения или как замена файлам.
    До кучи
    https://www.digitalocean.com/community/tutorials/s...
    Ответ написан
    6 комментариев
  • Как организовать последовательное выполнение одинаковых запросов для пользователя?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Вариантов несколько: первый - блокировками типа мьютекса, второй очередями с флагом.
    Но, вообще-то это должна сама база данных разруливать своими блокировками и транзакицями!
    запустили транзакцию, делаем работу, закоммитили. если данные внутри транзакции стали невалидные, то база откатит транзакцию, а нам вернет ошибку.
    Ответ написан
    Комментировать
  • Как организовать двойную очередь в Python?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Две очереди, одна для всех сообщений, другая - для ожидающих.
    Воркер:
    1) получает сообщение из общей очереди
    2) проверяет блокировку по devID
    3) если блокировки нет:
    3.1) ставит блокировку на devID
    - делает работу
    - освобождает блокировку на devID
    3.2) блокировка есть:
    - перепубликует сообщение в очередь ожидания, ТОЛЬКО если оно из основной очереди
    4) проверяет очередь ожидания
    - если там сообщение, то возвращается на п2
    - иначе на п1

    Как-то так... Ну и рассмотреть вопрос на счет дидлока, когда сообщение в очереди ожидания блокируется повисшим воркером...
    Ответ написан
    6 комментариев
  • Ключи и триггеры postgresql. Что для чего лучше использовать?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    По моему, триггеры - зло! Если уж и пользовать триггеры, то только для валидации данных. Иначе, при больших нагрузках, можете получить непредсказуемое поведение системы, дидлоки, деградацию производительности.
    В вашем же случае поля last_message_id и message_counter можно вычислять дополнительными запросами и в таблице им вообще нечего делать, просто сделайте индекс.
    Готов к дискуссии!
    Ответ написан
    6 комментариев
  • Как организовать хранение структуры категорий в модели Django?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    В свое время тоже мучились. В результате стали хранить просто в текстовом поле xlm со структурой. Плюсы - очень быстрая работа с вложенностью простым xpath, минусы - нет связанности на уровне базы, новедь есть сингалы для этого. Xml можно заменить на json.
    Ответ написан
    Комментировать
  • Как объеденить кучу Excel файлов в один?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Еще предложу посмотреть на Apache POI poi.apache.org/spreadsheet/index.html , который используют для чтения и генерации excel. Написан на java, есть куча примеров по чтению и сознанию xsl-файлов - poi.apache.org/spreadsheet/examples.html
    Проект зрелый, активно развивается и используется в куче программного обеспечения -
    poi.apache.org/spreadsheet/how-to.html - вопросы/ответы с кодом и ссылками на примеры.
    В свое время, 8 лет назад, использовали его для генерации счетов/формуляров.

    PS. А вот и пример как это сделать - www.coderanch.com/t/420958/open-source/Copying-she...
    Читать всю ветку.
    Ответ написан
    Комментировать
  • Как лучше получить данные удаленно?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Ну, почему же нет, есть. Вариантов масса:
    - поставить на сервер mongodb, elasticsearch или что-то подобное и работать через REST.
    - написать свой REST-сервер, пишется легко на любом языке, от явы до bash.
    - ну и просто изучить эту нехитрую REST-технологию habrahabr.ru/post/38730
    Ответ написан
    Комментировать
  • Можно ли монтировать LUN'ы как NFS?

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    Нет, не увидят. Точнее увидят, но через некоторое время будет каша из данных. Все дело в том, что файловая система живет не только на диске, но и в памяти компьютера, который сделал изменения.
    Вам нужна распределенная файловая система для этого, когда компьютер, сделавший изменения данных, сообщает о них своим партнерам, а партнеры уже обновляют измененные данные.

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

    В вашем случае вариантов несколько.
    1) Развернуть GPFS (IBM, платная) или OCFS (Oracle) - это типы shared FS (используется одно хранилище, об изменениях сообщается всем)
    2) Развернуть Gluster, lustre, CephFS или что-то подобное - distributed FS (используются отдельные хранилища, об изменениях сообщается всем, данные могут реплицироваться).
    3) Если данные не завязаны на файлы - использовать распределенные хранилища/базыданных типа Сeph, S3, Mongo и т.д.
    Ответ написан
    Комментировать
  • Как из другого?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Тавк вроде бы достаточно простая задача. Если все ФИО из первого файла помещаются в память, например в dict, то:
    1) создаем dict с ключём по ФИО из первого файла и пустым массивом
    2) бежим по второму файлу посторочно и проверяем ФИО по ключу, если ключ есть, то добавляем в массив телефон.
    3) Сохраняем все записи из dict, где массив не пуст.

    # stage 1
    all_fio = dict()
    with open('myfiofile','r') as fp_fio:
      for line in fp_fio:
         (_f,_i,_o,_,_)  = line.split(';')
         _fio = _f+' '+_i +' ' + _o
         all_fio[_fio] = []
    
    # stage 2
    with open('mybilphonelog','r') as fp_log:
      for line in fp_log:
         (_t1,_t2,_fio,_)  = line.split(';')
         if all_fio.has_key(_fio):
            all_fio[_fio].append(_t1)
            all_fio[_fio].append(_t2)
    
    # stage 3
    import json
    json.dump(all_fio, open('myresultfile','w'))

    PS. код не отлаживал! могут быть апшибки
    Ответ написан
    Комментировать