metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2009-05-09 09:13 pm

Показательные выступления на льду.

Но надо сказать, что последние пляски с Qt, glibc и дебианами, а так же закономерная реакция линукс-френдленты на описание оного хорошо демонстрируют почему с софтом под линукс все так "хорошо".
Софт для end-юзеров и прочие приземленные вещи далеко не всегда пишут отмороженные гики с десятилетним опытом решения бессмысленных безумных проблем. Достаточно походить по форумам по .NET например - там огромное количество вопросов, показывающих, что в ИТ работает много _начинающих_ людей. И вот оным начинающим развлечения, подобные тому, чем я занимался вчера - совершенно ни к чему. Не должен обобщенный "программист кульных прог для бухгалтерии Вася Пупкин" сразу разбираться в тонкостях библиотек, порядка их поиска, версий компиляторов и прочей хреновине. Это должно идти потом, когда софт уже заработал, был продан и надо его улучшать, выпускать новую версию и есть на этот бабки, полученные от продажи первой версии.

Я так понимаю, не всем очевидна конечная цель работы: "написать софт, внедрить клиентам, получить бабки". И что чем меньше времени уйдет на это - тем больше бабок в единицу времени получится. И что время на "чтение гугла и манов", "пересборку QT", "изучение тонкостей поиска shared objects" - это все кем-то должно оплачиваться. Я не знаю, по моему, видеть во всем в первую очередь бизнес-смысл и енд-юзеров - достаточно полезная вещь, хорошо вправляет мозги и компенсирует техно-гиковские перегибы.

Не говоря уже о факапах вроде "приехали показывать софт тендерной комиссии, а там НИЧЕГО не запустилось, потому что линукс не той системы" - такое вообще недопустимо, между прочим.

[identity profile] zamotivator.livejournal.com 2009-05-11 12:04 pm (UTC)(link)
struct CompareScheme
{
	bool operator()( const impl::Scheme< qd::common::eChar >& a_left, const impl::Scheme< qd::common::eChar >& a_right ) const
		{
			return a_left.size() == a_right.size();
		}
	bool operator()( const impl::Scheme< qd::common::eVarchar >& a_left, const impl::Scheme< qd::common::eVarchar >& a_right ) const
		{
			return a_left.size() == a_right.size();
		}
	bool operator()( const impl::Scheme< qd::common::eDecimal >& a_left, const impl::Scheme< qd::common::eDecimal >& a_right ) const
		{
			return ( a_left.precision() == a_right.precision() ) && ( a_left.scale() == a_right.scale() );
		}
    template< qd::common::EType dataType >
    bool operator()( const impl::Scheme< dataType >& , const impl::Scheme< dataType >& ) const
    {
        return true;
    }
    template< qd::common::EType leftDataType, qd::common::EType rightDataType >
    bool operator()( const impl::Scheme< leftDataType >&, const impl::Scheme< rightDataType >& ) const
    {
        return false;
    }
};

typedef qd::dsd::Function< bool, const CompareScheme&, 
qd::mpl::vector< const qd::pplan::Scheme&, const qd::pplan::Scheme& > >
CompareSchemeFunction;

namespace
{
	CompareSchemeFunction g_compareSchemeFunction;
}

bool operator==( const qd::pplan::Scheme& a_left, const qd::pplan::Scheme& a_right )
{
	return g_compareSchemeFunction( CompareScheme(), a_left, a_right ); 
}