Задать вопрос
  • Есть ли одноплатный компьютер для управления силовой элеткроникой?

    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
    На твистед и всю игру можно забацать.
    Ответ написан
    Комментировать
  • Как сделать многопоточный парсер URL-ов на Python?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    А вот на любимом twisted - technicae.cogitat.io/2008/06/async-batching-with-t...
    И да, ни одного треда не пострадало, всё в один поток!
    Ответ написан
    Комментировать
  • Что можно использовать в качестве блогосоциального движка а-ля Habrahabr, LiveStreet на python?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Как раз сейчас разбираюсь с mezzanine cms (оно на django). Тоже встал вопрос небольшой социальщины. Вот здесь туториал как повторить reddit на mezzanine - blog.jupo.org/2013/04/30/building-social-apps-with...
    Надеюсь, будет полезно.
    Ответ написан
    Комментировать
  • Как подключить полку дисков без свитча к двум серверам?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Выкручивать руки multipath, та как скорее всего сама система не распознает подключение как одного диска. У нас подобная конфигурация с ds3400, работает без свича напрямую на два сервера...
    Ответ написан
    3 комментария
  • Как научиться Computer Science?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Ну курс вроде бы по заголовку нормальный, дополнительно разве что Кнута прочитать ( настоятельно), только покупайте в бумажном виде!
    Ответ написан
    Комментировать