LINUX.ORG.RU

Сообщения eagleivg

 

Не было печалей - апдейтов накачали

https://www.theverge.com/2019/1/31/18205774/nio-ota-update-traffic-china-es8
Для не умеющих в англицкий - клиенты на тест-драйве китайского электромобиля Nio ES8 тыркнули на экране установку обновлений, машина на оживленной магистрали отрубилась полностью на час, ни дверей открыть, ни даже стекол опустить.

 ,

eagleivg
()

S.T.A.L.K.E.R. Зов припяти завезли в линукс

Свершилось, теперь ЗП запускается под линуксом. Собирать отсюда:
https://github.com/OpenXRay/xray-16
Инструкция по сборке там же, инстукция по запуску в вики.

Нужны тестеры и баг-репорты.

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

 ,

eagleivg
()

C++ и аллокаторы std::vector

Нужен направляющий пинок. Имеется вектор, с переопределенным аллокатором tbb::tbb_allocator. Переопределены операторы new и delete на использование scalable_malloc/free из того же tbb. И со всем этим добром творится непонятная хрень: push_back в этот вектор приводит к сегфолту, но не всегда, и каждый раз в разных местах. Подозреваю, что есть некая гонка в разных потоках, но понять где именно, не могу. Минимальный пример для воспроизведения тоже не смог сделать - 1М элементов в 8 потоков прекрасно добавились и ни разу не упали. Подскажите, куда еще можно копать, у меня идеи кончились вообще, а понимание происходящего кончилось еще раньше.

 ,

eagleivg
()

Чудесный код С++

Хотите поржать?

BOOL ShaderElement::equal(ShaderElement* S)
{
    if (nullptr == S && nullptr == this)
        return TRUE;
    if (nullptr == S || nullptr == this)
        return FALSE;
    return equal(*S);
}
Как вы думаете, для чего оно?

( читать дальше... )

 

eagleivg
()

использование using и возвращаемые типы

Есть 2 класса: B.h:

#pragma once

class B
{
public:
	B();
	virtual ~B();
};
и A.h, в котором класс B используется как поле.
#pragma once

#include "B.h"

class A
{
public:
	using bns = B; // И вот если мы обявим его через using, то начинаются чудеса
private:
	bns* m_Bclass;
public:
	A();
	virtual ~A();

	bns* get_b();
	void set_b(bns* b);
};
И собственно A.cpp
#include "A.h"

A::A()
{
	m_Bclass = nullptr;
}

A::~A()
{
}

void A::set_b(bns* b) // тут всё нормально
{
	m_Bclass = b;
}

bns* A::get_b() // а тут error: ‘bns’ does not name a type
{
	return m_Bclass;
}
Я понимаю, что чего-то не понимаю. Почему публично обявленный через using тип можно принимать, но нельзя возвращать?

 

eagleivg
()

Будь проклят тот день #3 [С++ template hell]

Снова MSVC против g++ :

template <typename TIndex>
struct CVertexManagerFixed
{
    template <typename TPathBuilder, typename TCompoundVertex>
    class CDataStorage : public TPathBuilder::template CDataStorage<TCompoundVertex>
    {
    public:
        using CDataStorageBase = typename TPathBuilder::template CDataStorage<TCompoundVertex>;
        using Vertex = TCompoundVertex;
        using Index = TIndex;

    public:
        inline CDataStorage(const u32 vertex_count);
        inline virtual ~CDataStorage();
        inline Vertex& get_node(const Index& vertex_id) const;
    };
};


#define TEMPLATE_SPECIALIZATION                           \
    template <typename TIndex> \
    template <typename TPathBuilder, typename TCompoundVertex>

#define CFixedVertexManager \
    CVertexManagerFixed<TIndex>::CDataStorage<TPathBuilder, TCompoundVertex>

TEMPLATE_SPECIALIZATION
inline CFixedVertexManager::CDataStorage(const u32 vertex_count)
    : CDataStorageBase(vertex_count)
{
}

TEMPLATE_SPECIALIZATION
inline typename CFixedVertexManager::Vertex& CFixedVertexManager::get_node(const Index& vertex_id) const
{
    VERIFY(vertex_id < m_max_node_count);
    VERIFY(is_visited(vertex_id));
    return *m_indexes[vertex_id].m_vertex;
}

Лог ошибок:

../src/test_cpp.cpp:54:34: error: non-template ‘CDataStorage’ used as template
     CVertexManagerFixed<TIndex>::CDataStorage<TPathBuilder, TCompoundVertex>
                                  ^
../src/test_cpp.cpp:63:17: note: in expansion of macro ‘CFixedVertexManager’
 inline typename CFixedVertexManager::Vertex& CFixedVertexManager::get_node(const Index& vertex_id) const
                 ^
../src/test_cpp.cpp:54:34: note: use ‘CVertexManagerFixed<TIndex>::template CDataStorage’ to indicate that it is a template
     CVertexManagerFixed<TIndex>::CDataStorage<TPathBuilder, TCompoundVertex>
                                  ^
../src/test_cpp.cpp:63:17: note: in expansion of macro ‘CFixedVertexManager’
 inline typename CFixedVertexManager::Vertex& CFixedVertexManager::get_node(const Index& vertex_id) const
                 ^
../src/test_cpp.cpp:54:59: error: expected unqualified-id before ‘,’ token
     CVertexManagerFixed<TIndex>::CDataStorage<TPathBuilder, TCompoundVertex>
                                                           ^
../src/test_cpp.cpp:63:46: note: in expansion of macro ‘CFixedVertexManager’
 inline typename CFixedVertexManager::Vertex& CFixedVertexManager::get_node(const Index& vertex_id) const
Я не понимаю, почему объявление возвращаемого типа метода get_node дает такую ошибку. Ведь CDataStorage - это только шаблон, нигде как класс он не объявлен?

 ,

eagleivg
()

Будь проклят тот день #2 [С++ template hell]

Снова код с винды:

template <typename _param, //  shadows template parm ‘class _param’
    typename _param_ptr = _param*> // shadows template parm ‘class _param_ptr’
class CTest
{
public:
    typedef _param CParam;

    struct STest
    {
    	_param_ptr m_operator;

        inline STest(_param_ptr _param) // declaration of ‘_param_ptr _param’
            : m_operator(_param)
        {
        }
    };
};

Как я понимаю, основная засада в инлайновом методе внутри структуры - он воспринимается как новое объявление класса. Как же тогда передать туда параметр шаблона?

 ,

eagleivg
()

Будь проклят тот день...[С++ template hell]

Портирую код с винды на линукс.

struct CDestroyer
{
...
    template <typename T>
    struct CHelper4
    {
        template <bool a>
        static void delete_data(T& data)
        {
            CHelper2<T>::delete_data<object_type_traits::is_pointer<T>::value>(data);
        }

        template <> // explicit specialization in non-namespace scope ‘struct CDestroyer::CHelper4<T>’
        static void delete_data<true>(T& data) //error: template-id ‘delete_data<true>’ in declaration of primary template

        {
            CHelper3::delete_data(data);
        }
    };

    template <typename T> 
    static void delete_data(T& data)
    {
        CHelper4<T>::delete_data<object_type_traits::is_stl_container<T>::value>(data);
    }
};
Получаю ошибки написанные в комментариях. Гуглинг показал, что частичная спецификация для функций недопустима по стандарту (ну а MSVS традиционно на это кладёт).

Вопрос: как это обойти?

Я в кресты не умею, только в си, так что при ответе пожалуйста учитывайте. Ну или ткните носом в доки, каким образом можно делать условный выбор шаблонов в целом.

 ,

eagleivg
()

Возможно Deus Ex: Mankind Divided выйдет на линуксе и маке.

Не могу не поделиться радостью.
Пруф:
https://steamdb.info/app/337000/depots/
Пока под мак и лялих нет DLC, вангую что задерживается именно из-за этого.

Думаю, надо брать как выпустят, вроде тогда статистика по линуху засчитается. И да, есть надежда, что Denuvo на другие платформы портировать не будут.

 , ,

eagleivg
()

ЭлектроМагнетизм и электро-магнитные волны - как это работает?

Электромагнитные волны возбуждаются попеременным движением электронов в проводнике в противоположных направлениях, т.е. переменным током. Движение же электронов в одном направлении возбуждает просто магнитное поле, без волн.
Изменения магнитного поля способно двигать электроны, т.е. возбуждать токи. Но что такое ЭМ-волна в вакууме - там же нет электронов, чтобы цепной реакцией возбуждались токи и далее менялось магнитное поле?

Правильно ли я понимаю, что если просто помахать магнитом в вакууме, то ЭМ волны не возникнет? Ведь тогда сам термин «электро-магнитная волна» некорректен?

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

В общем, я совсем запутался, может кто-нибудь пролить свет на это темное дело?

P.S. Эфиродинамщиков прошу не беспокоиться.

 магнетизм, ,

eagleivg
()

Выпустили HTC Vive

Видео здесь: https://www.youtube.com/watch?v=qYfNzhLXYGc

Вопрос к специалистам: кроме игрулек это на что-то годится? По идее, можно устроить что-то вроде CAD-Wall для конструкторов, но не за лярды долларов, а всего за восемьсот бачинских. Ещё на ум приходят биологи - там вроде есть задача визуализации белков и ручная корректировка цепочек. Всякие программеры в пролёте - тексты в этом шлеме видны отстойно.

Для чего ещё полезного можно такое использовать?

 cave, ,

eagleivg
()

Feral портирует Tomb Raider

Обещают до лета выпустить приключения сисек на линукс. Пруф.

Для Ъ: порт игры от 2013 года.

 ,

eagleivg
()

Arma 3 доступна для скачивания в Steam

Сабж. Бинари добавили для лялеха (эх, Саныч не дожил) и для мака.

Подробности: http://dev.arma3.com/post/sitrep-00120

 arma iii, ,

eagleivg
()

ФАС требует патентовать софт

Российское программное обеспечение должно попасть в специальный реестр отечественного софта только после того, как права на него будут зарегистрированы в Роспатенте, считает Федеральная антимонопольная служба (ФАС). Подготовленный Минкомсвязи проект постановления правительства, описывающего механизм ведения реестра и запрета закупок иностранного софта, передан в правительство с замечаниями антимонопольного органа


http://www.vedomosti.ru/technology/articles/2015/07/31/602953-fas-trebuet-pat...

 ,

eagleivg
()

Brocken Age Act II на подходе

Появился Backer branch, под паролем, для кикстартеровцев. Есть тут такие, как оно там, годно получилось?

 ,

eagleivg
()

Локальная и основная маршрутизация

Итак, есть 2 сетевые карты, и 2 интерфейса, eth0 и eth1.

Хочется мне погонять трафик через роутер, подключенный ланом к eth1, а ваном к eth0, пусть это будет ping. На eth1 ip 192.168.0.100 (получен по dhcp), на eth0 - 10.90.90.1, поднят dhcp сервер, раздающий адреса в 10.90.90.0/24

Указываю маршрутом для 10.90.90.1 устройство eth1, трассирую - он идет через интерфейс lo напрямую. Гуглю - оказывается, есть 2 таблицы, main и local, так пакет, попадая в ядро, проверяется сперва в local и радостно идет в eth0, мимо роутера.

Что посоветуют гуру? Что-то мне подсказывает, что если удалю запись для 10.90.90.1 из local, тогда пакет вообще никогда на интерфейс не придёт. Можно ли как-то маршрутизировать в зависимости от источника? Т.е., дефолтно пакет пихать его в eth1, а если извне от роутера (из 10.90.90.0/24), то в eth0. Или это в принципе невозможно?

 ,

eagleivg
()

Qualcomm LTE Direct позволит совершать звонки без подключения к базовым станциям

Я ДЖВА ГОДА ЖДАЛ!! Более полная новость: http://habrahabr.ru/company/gttf/blog/239669/

Сбылась мечта идиота - теперь с мобилы на мобилу можно будет звонить напрямую. Обещают к концу 2015-го. Правда, как я понял, только при отсутствии сигнала БС, но и это уже огромный шаг вперед.

Оригинал новости: http://hothardware.com/News/Qualcomm-LTE-Direct-Allows-Calls-Between-Devices-...

 

eagleivg
()

Не могу сообразить регулярки для замены

Дано, местный номер телефона из 5, 6 или 7 цифр. Нужно в зависимости от числа цифр подставить в начало номера код города.

Например, номер 123456 плавно превращается в 8(4912)123456, а 12345 в 8(49133)12345

В голову не приходит ничего умнее, чем искать начало строки перед 6-ю и 5-ю цифрами соответственно: ^(?=\d{5}) , но не прокатывает.

Протупив 2 часа, я вообще засомневался, решаема ли задача с помощью регулярок?

 ,

eagleivg
()

Cisco, ssh и нестандартный порт

Есть такая проблема: начиная с некоторого времени попытки достучаться на работу по ssh на порту 222 стали отваливаться по таймауту.

Экспериментально установил, что блочится трафик на 222-й порт на циске, причем только для мак-адреса. Смена мака дает некоторое время попользоваться ssh, но через 5 минут соединение отваливается и более не устанавливается.

ТП (во всех смыслах) с завидным упорством отвечает, что «у нас проблемы нет, и вообще, купите сперва белый ip, стопудово дело в нем»

Из вариантов обхода я вижу 2 пути: а) Смена мака скриптом каждые 5 минут. б) смена провайдера на более вменяемого

Но хотелось бы решить проблему менее радикально. Есть кто из цисковиков, знакомый с таким поведением? Как хоть такая технология называется?

 ,

eagleivg
()

Пустить устройство в рабочую сеть

Есть писюк с двумя сетевухами, eth0(инет) и eth1. На писюке поднят openvpn туннель до работы, соответственно имеется устройство tun0.

Есть тонкий клиент, который нужно завести в рабочую сеть через openvpn.

Я рассуждал следующим образом: создаем бридж, добавляем туда eth1 и tun0, втыкаем тонкий клиент, PROFIT.

Но на практике получается следующее, бридж создается, eth1 туда добавляется, а вот tun0 фигушки:

$brctl addif br0 tun0
can't add tun0 to bridge br0: Invalid argument
Так что я понимаю, что что-то не понимаю, вопрос что?

Вызов strace оканчивается вот чем:

socket(PF_FILE, SOCK_STREAM, 0)         = 3
access("/proc/net", R_OK)               = 0
access("/proc/net/unix", R_OK)          = 0
socket(PF_FILE, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 4
ioctl(4, SIOCGIFINDEX, {ifr_name="tun0", ifr_index=6}) = 0
close(4)                                = 0
ioctl(3, SIOCBRADDIF, 0xbfc8567c)       = -1 EINVAL (Invalid argument)
ioctl(3, SIOCDEVPRIVATE, 0xbfc8567c)    = -1 EINVAL (Invalid argument)
write(2, "can't add tun0 to bridge br0: In"..., 47can't add tun0 to bridge br0: Invalid argument
) = 47
exit_group(1)  

Как быть? Или, есть ли другие способы завести тонкий клиент в сеть предприятия? cast blind_oracle

eagleivg
()

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