LINUX.ORG.RU

Сообщения Chaser_Andrey

 

Генерация классов на основе декларативного описания

Я хочу реализовать генерацию over9000 классов/структур на основе их декларативного описания. Пример описания (формат произвольный):

Action1
    int ac1member1
    string ac1member2
    int ac1member3

Action2
    int ac2member1
    int ac2member2

Action3
   string ac3member1
   string ac3member3

На основе этого я хочу сгенерировать классы, которые содержат в себе:

  • функции инициализации (или конструкторы)
  • enum с перечнем всех member'ов
  • статический массив строк с названием member'ов
  • геттеры/сеттеры с валидацией (все входящие данные - строки, нужно проверять их корректность, чтобы программа не вывалилась при ошибке преобразования строки в число

Частично мне помогло обмазывание X Macros'ами:


#define MEMBERS \
    X(int, =0, member1) \
    X(int, =0, member2) \
    X(string, , member3)
    
enum
{
    #define X(a, b, c) E_##c,
    MEMBERS
    #undef X
    NUM_MEMBERS
};

static constexpr const char* names[NUM_MEMBERS] =
{
    #define X(a, b, c) #c,
    MEMBERS
    #undef X
};

#define X(a, b) a c b;
MEMBERS
#undef X


//==================
// сгенерирует мне няшное:

enum
{
    E_member1,
    E_member2,
    E_member3,
    NUM_MEMBERS
};

static constexpr const char* names[NUM_MEMBERS] =
{
    "member1",
    "member2",
    "member3",
};

int member1 =0;
int member2 =0;
string member3;


//подобным образом можно генерировать и геттеры/сеттеры
//так же можно и добавить ещё одно необязательное поле для валидатора

Как сгенерировать заготовки классов — тоже ясно.

Но вот как в зависимости от класса генерировать нужные внутренности?

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

P.S. Я понимаю, что было бы очень легко всё это сгенерировать на Perl. Но хотелось бы побольше задействовать нативных средств C/C++.

 , , x macros, ,

Chaser_Andrey
()

QxtWeb и HTTP-сервер в отдельном потоке

Пытаюсь заставить работать HTTP-сервер из QxtWeb в отдельном потоке — ничего не получается, поток начинает жрать целое ядро, на HTTP-запросы не отвечает.

Когда оно работает в основном потоке — всё отлично работает.

class HTTPServer : public QObject
{
    Q_OBJECT
public:
    HTTPServer(const HTTPServer&) = delete;
    HTTPServer operator=(const HTTPServer&) = delete;
    
    explicit HTTPServer(QObject *parent = 0);
    virtual ~HTTPServer();
    void responseCheckDonglesStatus(int status, const QString &message, int requestID);
private:
    QxtHttpServerConnector *m_Connector         = nullptr;
    QxtHttpSessionManager *m_Server             = nullptr;
    QxtWebServiceDirectory *m_RootService       = nullptr;
    ServiceChecker *m_ServiceChecker            = nullptr;

signals:
    void initError();
    void checkDonglesStatus(int requestID);
    void sigThreadPong();
    
public slots:
    void init();
    void onThreadPing();
private slots:
    void onCheckDonglesStatus(const int requestID);
}

HTTPServer::HTTPServer(QObject *parent) :
    QObject(parent)
{
    m_Connector = new QxtHttpServerConnector(this);
    m_Server = new QxtHttpSessionManager(this);
    m_Server->setConnector(m_Connector);
    m_RootService = new QxtWebServiceDirectory(m_Server, this);
    m_ServiceChecker = new ServiceChecker(m_Server, this);
    m_ServiceSendSms = new ServiceSendSms(m_Server, this);
    m_RootService->addService("check", m_ServiceChecker);
    m_Server->setStaticContentService(m_RootService);

    connect(m_ServiceChecker, SIGNAL(checkDonglesStatus(int)), SLOT(onCheckDonglesStatus(int)));
}

void HTTPServer::init()
{
    //FIXME: Qt5 - change to localhost
    m_Server->setListenInterface(QHostAddress::Any);
    m_Server->setPort(8000);
    if(!m_Server->start()) {
        Utils::logger(LogCritical, "HTTPServer: start failed");
        emit initError();
        return;
    }
    Utils::logger(LogInfo, "HTTPServer: start success");
}

void HTTPServer::onCheckDonglesStatus(const int requestID)
{
    emit checkDonglesStatus(requestID);
}

void HTTPServer::responseCheckDonglesStatus(int status, const QString &message, int requestID)
{
    m_ServiceChecker->responseDonglesStatus(status, message, requestID);
}

void HTTPServer::onThreadPing()
{
    emit sigThreadPong();
}
class ServiceChecker : public QxtWebServiceDirectory
{
    Q_OBJECT
public:
    explicit ServiceChecker(QxtAbstractWebSessionManager *sm, QObject *parent = 0);
    void pageRequestedEvent(QxtWebRequestEvent *event);
    void responseDonglesStatus(int status, const QString &message, int id);
signals:
    void checkDonglesStatus(int requestID);
};

ServiceChecker::ServiceChecker(QxtAbstractWebSessionManager *sm, QObject *parent) :
    QxtWebServiceDirectory(sm, parent)
{
}

void ServiceChecker::pageRequestedEvent(QxtWebRequestEvent *event)
{
    qDebug("ServiceChecker: request %s", qPrintable(event->method));
    if(event->method == "GET") {
        syslog(LOG_DEBUG, "SCGI URL %s", qPrintable(event->url.toString()));
        syslog(LOG_DEBUG, "SCGI ORIGINAL URL %s", qPrintable(event->originalUrl.toString()));
        syslog(LOG_DEBUG, "SCGI URL %s", qPrintable(event->url.path()));
        syslog(LOG_DEBUG, "SCGI ORIGINAL URL %s", qPrintable(event->originalUrl.path()));

        QString object = event->url.queryItemValue("object");
        if(object == "dongles")
            emit checkDonglesStatus(event->requestID);
    }
}


void ServiceChecker::responseDonglesStatus(int status, const QString &message, int id)
{
    QVariantMap m;
    m["status"] = status;
    m["message"] = message;
    QJson::Serializer s;
    QByteArray page = s.serialize(m);
    postEvent(new QxtWebPageEvent(0, id, page));
}

Собсно, запуск такой:

_httpServer = new HTTPServer;
_threadHTTPServer = new QThread(this);
_threadHTTPServer->setObjectName("HTTP Server");
_httpServer->moveToThread(_threadHTTPServer);

connect(this, SIGNAL(sigStartHTTPServer()), _httpServer, SLOT(init()));
connect(_httpServer, SIGNAL(initError()), SLOT(onInitError()));
connect(_httpServer, SIGNAL(checkDonglesStatus(int)), SLOT(onRestfulCheckDonglesStatus(int)));

_threadHTTPServer->start(); 
emit sigStartHTTPServer();

Я проверяю, вроде все объекты нормально создаются в другом потоке, и стартует сервер в другом потоке, но всё равно, просто не отвечает.

 , libqxt,

Chaser_Andrey
()

Тестирование процессора на стабильность

Чем вы порекомендуете тестировать процессор на стабильность работы под постоянной 100% нагрузкой?

cpuburn-1.4a катит? Сколько оптимально времени?

Chaser_Andrey
()

Старейшее казино Лас-Вегаса начало принимать биткоины

The D Las Vegas и Golden Gate — старейшее казино Лас-Вегаса — стали первыми в мире казино, принимающими биткоины. Об этом сообщается в совместном пресс-релизе игорных заведений.

Совладелец обоих заведений Дерек Стивенс (Derek Stevens) рассказал, что решение о включении биткоинов в список разрешенной валюты было принято в связи с интересом постоянных клиентов.

http://lenta.ru/news/2014/01/22/casinos/

 ,

Chaser_Andrey
()

Протокол Asterisk Management Interface (AMI) — ASCII или UTF-8?

Для второй версии AMI (AMIv2), который в Asterisk 12, явно указано, что «AMI is an ASCII protocol».

Стало быть, это значит, что AMI можно и нужно обрабатывать, как ASCII?

Для первой версии AMI (во всяком случае, для AMI 1.1) никаких конкретных указаний, что это именно ASCII, не нашел.

Почему я спрашиваю? Дело в том, что уже больше года мой демон интерпретирует AMI как строки в UTF-8, и пока проблем нет.

Более того, в полных логах AMI было выяснено, что там действительно пересылаются в некоторых полях не-ASCII символы, например

AppData: SMS_MOD=Я пытался(лась) Вам дозвониться

Я не уверен, правильное ли это поведение и использование AMI?

Может, действительно надо воспринимать строки в AMI как ASCII-строки, а уже отдельные поля (в случае необходимости) интерпретировать как UTF-8 строки?

При переходе с UTF-8 на ASCII значительно упадет нагрузка клиента AMI, которому приходится перемалывать много данных.

UPD: речь идет о самописном клиенте AMI на плюсах.

 ,

Chaser_Andrey
()

Юзеры MacOS и их butthurt от Linux на железе Apple

В последнее время наблюдаю butthurt у макинтошников, когда они видят, как их горячо любимую MacOS X сносят в пользу Linux на разных там макбуках и маках.

Но почему?

 , , , ,

Chaser_Andrey
()

Настройка аудио 5.1 в Linux

С помощью speaker-test установил, что сейчас у меня обычное стерео, которое распределяется так:

1. FrontLeft - идет на FrontLeft, Center и RearLeft.

2. FronRight - идет на FrontRigh, LFE и RearRight.

$aplay -L
null
    Discard all samples (playback) or generate zero samples (capture)
default:CARD=SB
    HDA ATI SB, ALC889 Analog
    Default Audio Device
sysdefault:CARD=SB
    HDA ATI SB, ALC889 Analog
    Default Audio Device
front:CARD=SB,DEV=0
    HDA ATI SB, ALC889 Analog
    Front speakers
surround40:CARD=SB,DEV=0
    HDA ATI SB, ALC889 Analog
    4.0 Surround output to Front and Rear speakers
surround41:CARD=SB,DEV=0
    HDA ATI SB, ALC889 Analog
    4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=SB,DEV=0
    HDA ATI SB, ALC889 Analog
    5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=SB,DEV=0
    HDA ATI SB, ALC889 Analog
    5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=SB,DEV=0
    HDA ATI SB, ALC889 Analog
    7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
iec958:CARD=SB,DEV=0
    HDA ATI SB, ALC889 Digital
    IEC958 (S/PDIF) Digital Audio Output
$lspci
00:14.2 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] SBx00 Azalia (Intel HDA) (rev 40)
        Subsystem: Gigabyte Technology Co., Ltd Device a002
        Kernel driver in use: snd_hda_intel

Изъезженная тема, много гуглил, но есть ряд вопросов:

1. Как правильно распределять стерео на 5.1? Чтобы и сабвуфер задействовать для обоих каналов, а не только для FrontRight.

2. Как при этом корректно воспроизводить 5.1 (в фильмах, например), чтобы из-за предыдущего пункта в сабвуфер не подмешивались звуки из FR и FL? Т.е., чтобы был полноценный 5.1?

 , , , ,

Chaser_Andrey
()

Статическая инициализация классов в C++

Передо мной встала задача сделать некие манипуляции с конкретным классом (классами) до создания первого объекта.

Рассмотрим частный случай необходимости статической инициализации классов.

Как известно, в Qt для того, чтобы можно было передавать пользовательские типы между сигнал-слотами при Qt::QueuedConnection, необходимо предварительно зарегистрировать данный тип в мета-объектной системе Qt с помощью qRegisterMetaType<Foo>(«Foo»).

В одном из проектов есть базовый класс BaseEvent и несколько десятков наследуемых (например, EventFoo, EventBar). Мне нужно сделать регистрацию типа до вызова любого из сигналов, которые передают объекты данных классов между потоками.

Почему не регистрировать тип непосредственно перед созданием connect или в конструкторе класса, который создает connect'ы? Потому что типов много, как я написал выше, несколько десятков. Если забыть зарегистрировать тип, то об этом я узнаю только в процессе работы, так как наличие зарегистрированного типа проверяется в runtime.

Найденные решения:

1. Регистрировать в конструкторе [плохо]

class BaseEvent
{
public:
    explicit BaseEvent() { qRegisterMetaType<BaseEvent>("BaseEvent"); }
}


class EventFoo : public BaseEvent
{
public:
    explicit EventFoo() { qRegisterMetaType<EventFoo>("EventFoo"); }
}

class EventBar : public BaseEvent
{
public:
    explicit EventBar() { qRegisterMetaType<EventBar>("EventBar"); }
}

class 
Недостатки очевидны: накладные расходы в runtime.

2. Статический member с конструктором-инициализатором

class BaseEvent
{
public:
    explicit BaseEvent() {}
private:
    class Initializer
    {
    public:
        explicit Initializer() { qRegisterMetaType<BaseEvent>("BaseEvent"); }
    } static const _init;
}
 

class EventFoo : public BaseEvent
{
public:   
    explicit EventFoo() { }

private:
    class Initializer
    {
    public:
        explicit Initializer() { qRegisterMetaType<EventFoo>("EventFoo"); }
    } static const _init;
}
 

class EventBar : public BaseEvent
{
public:
    explicit EventBar() { }

private:
    class Initializer
    {
    public:
        explicit Initializer() { qRegisterMetaType<EventBar>("EventBar"); }
    } static const _init;

}

Преимущества: минимальные накладные расходы по памяти (один int на весь класс), отсутствие накладных расходов при создании объекта

Недостатки: много дублирующего кода, так и хочется как-то заменить на шаблоны и/или макросы.

Что посоветуете?

Меня устраивает второй вариант, но хотелось бы избавится от тонны копипасты. Можно как-то сделать подобное на шаблонах? В идеале хотелось бы видеть что-то такое на шаблонах:

class EventFoo : public BaseEvent
{
public:
    explicit EventFoo() { }

private:
    static const Initializer<EventFoo> _init;
}

Или хотя бы на макросах:

class EventFoo : public BaseEvent
{
public:
    explicit EventFoo() { }
 
private:
    EVENT_INIT(EventFoo)
}

 , ,

Chaser_Andrey
()

Open Source ноутбук Novena почти готов к производству

Известный хакер, автор книги “Hacking Xbox” Эндрю Хуанг (Andrew “bunnie” Huang) в июне 2012 года вместе с коллегами начал разработку свободного ноутбука Novena на процессоре Freescale iMX6. Идея в том, чтобы у сообщества была открытая платформа, с открытой документацией и руководством по программированию, так что каждый может собрать из комплектующих себе ноутбук/маршрутизатор на свой вкус.

В декабре 2012 года автор получил первые образцы материнских плат для тестирования совместимости компонентов и опубликовала дизайн платы. В дальнейшем кропотливая работа по подбору компонентов продолжилась и вот сейчас — в январе 2014 года — проект наконец-то вплотную приблизился к успешному завершению.

В журнале Make: опубликована статья с фотографиями прототипа ноутбука, который уже практически готов к массовому производству.

Все компоненты ноутбука гарантированно освобождены от сложностей NDA и сопровождаются документацией. Найти такие было очень непросто, Freescale оказался единственно подходящим вариантом для SoC. Разработчики не смогли подыскать GPU, соответствующий требованиям open source, поэтому аппаратное видеоускорение на этом ноутбуке осуществляется через бинарный блоб. Программное видеоускорение работает нормально.

Ноутбук предназначен для всяческих модификаций и универсального использования. Он оснащается двумя портами Ethernet (1 Гбит/с и 100 Мбит/с), портом USB OTG и Spartan 6 FPGA. На материнской плате есть 8 разъемов для приема аналоговых данных и 8 цифровых портов ввода-вывода.

По техническим характеристикам ноутбук напоминает планшеты высшего уровня: Freescale iMX6 — это четырехъядерный ARM Cortex-A9 на частоте 1,2 ГГц. Оперативной памяти можно добавить до 4 ГБ, внутренний разъем SATA-II подходит для хорошего SSD-накопителя, LCD-адаптер подключается к 13-дюймовой панели 2560×1700. Система энергопитания должна быть модульной, с использованием комплектов RC Lipo.

Полные спецификации см. в вики.

В феврале-марте, скорее всего, будет готов финальный прототип и запущена краудфандинговая кампания по сбору средств на массовое производство устройств.

Источник

Немного картинок из оригинальной статьи:

http://makezineblog.files.wordpress.com/2014/01/novena_full-e1389122192543.jpg

http://makezineblog.files.wordpress.com/2014/01/novena_atwork.jpg

http://makezineblog.files.wordpress.com/2014/01/novena_lab.jpg

http://makezineblog.files.wordpress.com/2014/01/novena_edge.jpg

http://makezineblog.files.wordpress.com/2014/01/novena_quarterview.jpg

 

Chaser_Andrey
()

Секс улучшает работу мозга, а порнография отрицательно действует на память, интеллектуальные способности и мультитаскинг

Ученые из США и Южной Кореи, проведя ряд экспериментов на крысах и мышах среднего возраста, пришли к интересным результатам.

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

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

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

Группа исследователей из южно-корейского университета Конкук пришла к выводу, что частый секс успешно противодействует негативному воздействию стресса на мозг.

Именно стресс является главным ингибитором воспроизводства нейронов в мозгу, а половые акты восстанавливают эту функцию,

Вместе с тем, согласно новейшим исследованиям психологов из Университета Дуйсбурга-Эссена в Германии, порнография отрицательно действует на память смотрящих, в особенности ухудшая их способности к мультитаскингу, выполнению нескольких задач одновременно.

Ученые протестировали умственные способности людей до и после показа непристойных картинок и видеофильмов. Большинство из них продемонстрировали ухудшение интеллектуальных показателей после просмотра порнографии.

Источник

P.S. Линукс притом, что секс.

Chaser_Andrey
()

Копипаста авторских новостей

Дозволено ли здесь автору ПО при анонсе новой версии полностью копировать свою же оригинальную новость (с оформлением в LORCODE, естественно), а не заниматься словоблудием, переписывая новость с нуля?

Chaser_Andrey
()

Тем временем математик из Казахстана заявил, что решил одну из задач тысячелетия

Казахстанский ученый Мухтарбай Отелбаев заявил, что решил одну из семи главных математических задач – уравнения Навье-Стокса.

http://naked-science.ru/article/sci/matematik-iz-kazakhstana-zayav

Chaser_Andrey
()

Софт для мониторинга CPU при разгоне (аналог Windows-only CPU-Z)

Чем мониторить текущий вольтаж, частоту CPU, частоту шины и т.д.? Как в известной на платформе Windows утилите CPU-Z (скриншот).

Может, у кого будут советы про особенности разгона и мониторинга железа под Linux?

Планирую после прихода нового кулера разогнать свой Phenom II X4 965 BE (или обменять на 970 у знакомого).

 

Chaser_Andrey
()

Занести в eax единицу, уложившись в 3 байта кода

Как занести в eax единицу, уложившись в 3 байта кода, на x86_64?

С x86 всё просто:

xor eax,eax
inc eax

эквивалентно в hex

31 C0 40

Но c x86_64 засада. Согласно докам от AMD, однобайтовые INC и DEC были выпилены из 64-битного режима.

mov 1, eax

не подходит, потому что в 32-битном режиме оно уже занимает 5 байт, а в 64-битном ещё больше.

 ,

Chaser_Andrey
()

Фич-реквест: список ответов на конкретный комментарий

Фич-реквест заключается в том, чтобы возле каждого комментария был линк на список ответов. Что-то вроде дерева, но не обязательно иерархия. Например, чтобы быстро в многостраничном треде глянуть, а были ли ещё ответы на какой-то комментарий.

Chaser_Andrey
()

Firefox и управление сохраняемыми данными (cookies, local storage и т.д.)

Что посоветуете из расширений?

Требования:

  • Возможность ручного или интерактивного занесения сайтов в белые/черные списки.
  • Плюсом будет поддержка регекспов или масок для доменных имен
  • Возможность управления каждой кукой отдельно, включая возможности сохранения и изменения
  • Управление доступом к сайту local storage
  • Возможность установки политики по-умолчанию «запрещено всё, что явно не разрешено»
  • Возможность разрешения на сессию

Раньше просто в настройках браузера указывал «спрашивать при сохранении каждой куки», но слишком оно не гибкое.

Local storage сейчас вообще вырублен, но он может оказаться необходимым иногда, было бы хорошо иметь возможность разрешать доступ отдельному сайту на сессию.

Chaser_Andrey
()

Ищу нищебродский корпус FullTower под ATX на территории Украины

Хочу заменить свой MidiTower, в котором уже становится тесновато, на более просторный FullTower для своего уютного десктопа.

Из требований:

  • ATX
  • Возможность установки 5-6 винтов 3.5" с хорошим охлаждением
  • Чтобы влез такой кулер http://hard.rozetka.com.ua/81570/p81570/
  • Рассчитан на внутренние вентиляторы диаметром 120 мм (а ещё лучше — под 140 мм)

Мне не нужны новые брендовые за пару косарей. Ориентировочная стоимость — до 60$ (без учета доставки). Наличие БП и самих кулеров также не обязательно.

Кто знает модели, которые можно искать на всяких aukro.ua и других барахолках?

P.S. Если у кого-то завалялся в серверной старый пыльный ненужный корпус, подходящий по требованиям — ябкупил)

 fulltower, серверный корпус

Chaser_Andrey
()

Мощный сервер + десяток мощных PC в школе и Linux

Здравствуйте, ЛОРчане. Удивительно, что среди всех происходящих событий в Украине я ещё успеваю иногда появляться на ЛОРе. Но всё же, нужны советы на светлое будущее.

После НГ должны в одну из обычных провинциальных районных школ притащить новое оборудование. Пока ещё не известно, какое именно (выработка тендера в процессе), но один из вариантов:

Брендовый сервер (например, HP)

  • 2x8-core CPU
  • 386 GB RAM
  • 4-головая гигабитная сетевуха
  • HDD неизвестно, но дохрена

Второй возможный вариант
Два сервака из десктопного железа с характеристиками:

  • 8-ядерный AMD (FX-8350) или какой-то Core i7
  • 32-64 Гб RAM
  • Обычные гигабитные сетевухи Intel (по 2 шт)
  • HDD дохрена
  • на сдачу возьмем дополнительные L3-свитчи (что-то из Cisco, или EdgeCore, или.. пока ещё не определились).

Также будет закуплено около десятка (к дополнению к обычным нескольким компьютерным классам) обычных рабочих компов с:

  • Core i3 3220 или FX-8320
  • 4 Гб RAM
  • GPU: сначала предполагались NVidia GT640, но, наверное возьмем что-то из AMD для потенциальных числодробилок

Это только приблизительные оценки. Я не составляю тендер на закупку, я лишь могу дать им несколько советов и в свободное время всё настрою, а так же (тоже в свободное время) буду админить, из добровольных побуждений.

==================
==== ВОПРОСЫ =====
==================

1. Что бы заюзать для организации шлюза на базе Linux? Нужно минимум: привязка MAC+IP, шейпинг трафика, очень желателен QoS (но в крайнем случае, можно его и вручную настраивать). Нужна админка (или через консоль), чтобы местные учителя информатики могли легко добавить новый комп, просмотреть списки, ограничения скорости, группы компов.

Я не хочу ставить туда очень навороченные биллинговые системы с разными радиусами, ldap'ами и прочим.

В очень крайнем случае можно и написать всё своё, написать обертки для tc и iptables, небольшую админку, но мне этого не хочется делать, я бы лучше посмотрел существующие варианты.

2. Что ещё можно там развернуть полезного для общества и в рамках закона? Неплохие простаивающие мощности серверов и десктопов согласны отдать под BOINC и научные криптовалюты (primecoin, curecoin).

 , , , ,

Chaser_Andrey
()

netstat 666

НЕТСТАТ ПОКАЗАЛ ШЕСТЬ ШЕСТЬ ШЕСТЬ  
ОДМИНУ ЯВИЛАСЬ ЖУТКАЯ ВЕСТЬ
ЗНАМЕНИЕ АДА В ТУСКЛОЙ КОНСОЛИ
ГЛАЗА ОТ ШРИФТОВ РЕЖЕТ ДО БОЛИ

В СЕРВЕРНОЙ СТОЙКИ ВОСПЛАМЕНИЛИСЬ
ИЗ ПРЕИСПОДНЕЙ ВРАТА ОТВОРИЛИСЬ
ПЕЧАТЬ ОТКРЫЛА ПУТЬ В ЦАРСТВО ТЕНЕЙ
ДЬЯВОЛ ЯВИЛСЯ СО СВИТОЙ СВОЕЙ  

ПЫХКОДЕР ИЗДАЛ ОТЧАЯННЫЙ КРИК  
ВСПЫХНУЛ ОГНЕМ И СТИХ В ТОТ ЖЕ МИГ
ВЕТЕР РАЗНЕС ЕГО БРЕННЫЙ ПРАХ
ПО ВЕНАМ РАСТЕКСЯ ЖИВОТНЫЙ СТРАХ

ВСЕХ КОДЕРОВ ГРЕШНЫХ ПОГЛОТИЛ АД
ЗА БЫДЛОКОД НЕТ ИМ ДОРОГИ НАЗАД  
В ВОЗДУХЕ БЛЕСНУЛ ПРИЗРАЧНЫЙ КЛЫК    
В ЗЛОВЕЩЕЙ УЛЫБКЕ РАСТАЯЛ ДЬЯВОЛА ЛИК

СРЕДИ РАСКИДАННЫХ СТОЕК И ЦАРЯЩЕЙ РАЗРУХИ,
РАСПЛАВЛЕННЫХ ЦИСОК И СГОРЕВШЕЙ ВИТУХИ
СО СКОРБЬЮ ВСЕЛЕНСКОЙ ОДИН-НА-ОДИН
В ТЛЕЮЩЕЙ СЕРВЕРНОЙ СТОЯЛ МРАЧНЫЙ АДМИН
Chaser_Andrey
()

Глубина Тартара

Предисловие: залез я на вики луркать имена древнегреческих богов, дабы подобрать рабочее название для ещё одного проекта. Случайно наткнулся на описание Тартара, и понеслась...

Согласно древнегреческой мифологии, Тартар — это глубочайшая бездна.

Это тёмная бездна, которая настолько же удалена от поверхности земли, насколько от земли небо: по словам Гесиода, медная наковальня летела бы от поверхности земли до Тартара в течение 9 дней.

С самым Тартаром я давно был ознакомлен, но вот факт про медную наковальню и 9 дней для меня оказался новостью.

Путем нехитрых расчётов, принимая во внимание, что ускорение свободного падения не меняется и равняется ~9,81 м/с², то глубина Тартара составляет 2 965 865 932.8 км, т.е., почти 3 млдр. км.

Для сравнения: расстояние до Солнца — «всего лишь» 150 млн. км в среднем. Если бы тело падало с точки расположения Солнца, то оно упало бы аж на Уран!

Древние греки знали толк в эпике!

Но я не учитывал, что ускорение менятся в зависимости от приближения к ядру «Тартара». Поэтому предлагаю потренировать свои мозги лоровцам.

Задача:

Допустим, что Тартат находится прямо в центре, в ядре гипотетической Земли (пусть она называется именем богини земли — Геей).

При свободном падении, чем ближе к ядру, тем величина ускорения свободного падения уменьшается (так ведь?).

Можно отталкиваться от двух вещей: допускать, что начальное значение ускорения свободного падения равняется ~9,81 м/с² (тогда удельная плотность Геи будет значительно меньше плотности Земли), или же допускать, что средняя плотность Геи ~ средняя плотность Земли (тогда начальное ускорение неизвестно).

Нужно рассчитать массу и радиус Геи, при которых медная наковальня будет падать с поверхности 9 астрономических суток.

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

 ,

Chaser_Andrey
()

RSS подписка на новые темы