Category: it

Category was added automatically. Read all entries about "it".

Этюд по программированию

Ленин писал: "Электрон так же неисчерпаем, как атом". Блестящая формулировка! С языком C++ я работаю уже четверть столетия, но он до сих пор восхищает своей неисчерпаемостью, строгой - как григорианский хорал - стройностью, многогранностью и мощью. Подобно мощи атома, она покоряется лишь тому, кто подходит к ней с должным почтением. И, как энергия атома, в умелых руках способна творить чудеса.
Продолжаю вместо сна делать обработку списков на этапе компиляции. Написанное вчера удалось выразить ещё лаконичнее. Добавил метафункцию partition - она делит список на два: элементы, которые удовлетворяют предикату, и те, что ему не удовлетворяют.

C++ Russia

Привет из солнечного Питера!
Закончилась конференция C++ Russia. Особенно впечатлили доклады об асинхронности, о времени жизни ссылок rvalue, о программировании в функциональном стиле на C++, о спецификаторах и квалификаторах, о разнообразных отношениях между объектами и о тегировании. Еще несколько докладов буду смотреть в записи: они совпали по времени с другими, столь же интересными.
Контакты, завязавшиеся на августовском TechTrain, еще более укрепились, новые завязались.
На очереди - CoreHard в Минске через месяц и C++ Russia в Москве в апреле.
Коллеги, вы непревзойденны!

Этюды по программированию

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

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

Нашёл изящное и компактное решение.



UPD. https://github.com/vadimvinnik/compile_time_utils

И снова будни переводчика

Англ. string в контексте программирования - это цепочка символов. В русском языке давно и прочно устоялся термин "строка". Но ведь line - это тоже строка, только уже в полиграфическом смысле: ряд знаков, напечатанных на странице в одну линию. Вот и думай теперь, как употребить слово "строка" в двух разных смыслах в одром предложении: "The algorithm counts the number of lines in the input string".
Впрочем, мне ещё повезло, что в этом же предложении не попалось ещё слово row в значении "строка таблицы".

Я сотворил Ничто

Небрежный плод моих забав №2 прошу любить и жаловать здесь: http://hackage.haskell.org/package/empty-monad-0.1.0.0

Если кратко - то это структура данных, в которой нет данных. Этот контейнер сразу забывает значение, которое в него засовывают. Обладает свойствами аппликативного функтора и монады, Foldable, Traversable и др.

О сколько нам открытий чудных

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

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

Конец цитаты. И вообще конец. Отсюда

Калькулятор возвращается

Оказывается, в Новосибирске выпускают обновлённые, сильно усовершенствованные, но сохранившие полную совместимость с предшественниками модификации советских программируемых калькуляторов МК-52 и МК-61! Почти 20 лет назад начинал программировать на 52-й.

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

Хочу себе такую ЭВМ!

Вот еще ссылки: раз, два

Word+COM+Qt

Приветствую, коллеги!

Дано: из Qt-приложения (4.1.4) работаю с Wordом, невидимым или в собственном окне Wordа -- здесь всё элементарно.

Нужно: для вордовского документа, который уже обёрнут в QAxObject, создать также обёртку в QAxWidget -- чтобы отобразить документ в окне моего приложения. Как?

Теперь это же, но подробно.

Создаю интерфейс к MSWord:

QAxObject *word = new QAxObject( "Word.Application" );

Получаю интерфейсы к его подобъекту "коллекция открытых документов":

QAxObject *docs = word->querySubObject( "Documents()" );

Создаю новый документ:

QAxObject *docAsIface = docs->querySubObject( "New()" );

до этих пор всё работает превосходно. Нужно теперь как-то на основе docAsIface построить виджет. У класса QAxWidget есть конструктор, у которого единственный параметр -- указатель на COM-интерфейс. А у класса QAxObject есть метод queryInterface, который позволяет получить любой интерфейс COM-объекта. Я пытаюсь сделать так:

IUnknown *unk = NULL;
docAsIface->queryInterface( XXXXXXX, (void**) &unk ); // здесь самое главное!
QAxWidget *docAsWidget = new QAxWidget( unk );

Основной вопрос: какой же интерфейс запрашивать у документа, чтобы из этого интерфейса можно было построить виджет?

Т.е. какой IID подставлять вместо XXXXXXX?

Попутно. Кто-нибудь из коллег делал класс виджета для вордовского документа? Я-то свой написал, но меня не покидает ощущение, что кто-то мог это реализовать гораздо изящнее.

Попутно 2. На тролльтеховском форуме кто-то говорил, что вордовский документ вообще не следует пытаться делать  ActiveX-controlом, с вордо якобы можно работать только как с COM-объектом :-(

С другой стороны, следующий код у меня работает:
QAxWidget *docAsWidget = new QAxWidget( "Word.Document" );
docAsWidget->show();