Задать вопрос
  • Как написать простую 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. код не отлаживал! могут быть апшибки
    Ответ написан
    Комментировать
  • Выбор файловой системы для сервера с видео?

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    Ну, про XFS (и тем более SSD) вам уже написали... Я же немного с другой стороны подойду. Как обычно, подозреваю, что стоит веб-сервер, который это видео раздает на сайт, а со стороны клиентов стоит браузер с flash или подобное. Другими словами, у вас стриминг видео. Что делает плеер со стороны клиента, кроме того, что проигрывает видео? А он ещё его и кеширует! А как он его кеширует?! А кешируют эти сволочи на сколько у них ресурсов хватит, спользуя весь объем диска и всю полосу пропускания!!!
    Объясню на пальцах, клиент сморит ролик с битрейтом 3000килобит, а кешируется у него этот ролик на скорости клиентского подключения (100мегабит к примеру) и будет продолжать кешироваться до полной закачки всего файла. Теперь у нас 10 клиентов, которые тут же сожрали все ресурсы сервера и пропускной способности, на короткое время конечно, но пользователи прибывают например раз в 3 секунды, и вот они уже никаких ресурсов не получают вообще, пока первые 10 не докачают. А теперь представим, что первые 10 клиентов посмотрели только первые 3 минуты ролика и переключились на другой. Но мы то им отдали за эти три минуты двухчасовой ролик!
    Что делать? Да очень просто, ограничить скорость на клиента двойным максимальным битрейтом. Это можно сделать как iptables/tc , так и политиками на nginx например. Ну или отдавать в формате HLS или подобном, или ставить ПО видеосервера, что в общем почти одно и тоже...
    Вот как раз даже в примере есть (не просто так поди) www.nginxtips.com/how-to-limit-nginx-download-speed
    location ^~ /videos/ {
    ...
    limit_rate_after 1m;
    limit_rate 150k;
    ...
    }

    PS. И да, кодируйте видео в CBR для раздачи. VBR для этого не очень подходит...
    Ну, кажется все военные тайны раскрыл... Ну и дополнительно на HLS уходите!
    Ответ написан
    2 комментария
  • Как можно сделать таймер?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Вот так можно на твистед www.saltycrane.com/blog/2008/10/running-functions-...
    Ну и в официальной документации twistedmatrix.com/documents/13.2.0/core/howto/time.html
    На твистед и всю игру можно забацать.
    Ответ написан
    Комментировать