Спасибо за наводки, но, на мой взгляд, не хватает ссылки на проект-пример целиком (с приложенным примером template.docx) и инструкцией по сборке и запуску.
Неудачная попытка сэкономить на спичках в ущерб понятности кода. Для собеседований годится только разве что для того, чтобы дать ответ на вопрос «знаком ли кандидат с эффектами падения производительности из-за случайного доступа к памяти». К применению джавы в реальном мире имеет очень слабое отношение, как и к квалификации кандидата. Если, конечно, работа по предлагаемой вакансии не состоит в тюнинге и пропатчивании джавского JIT-компилятора.
Вы пишете, что использовали девайсы Avermedia. Они ведь не поддерживают запись видео защищенных с HDCP, а у устройств Apple, насколько мне известно, он включен. Или он включается избирательно ( например, при стриме фильмов через кабель HDMI)?
Получается, что в первом примере шаблонная функция difference может быть выбрана для типа, имеющего difference_type, но не имеющего перегруженного оператора вычитания, и будет ошибка при компиляции тела функции?
По-моему, новые версии .NET от Microsoft не особо влияют на стабильность моно ) Да и ядро моно давно уже стабилизировалось, в частности, я знаю программистов, которые доверяют ему и делают на нём даже веб-приложения. Вообще изначально я писал это для Windows. Но потом решил, что нельзя пренебрегать важным Linux-направлением, и добавил поддержку Mono. Тем более что такого рода инструменты в nix-среде хотя бы могут быть востребованы по сравнению с Windows, где это вообще никому не нужно. А вариантов нет, можно конечно попробовать написать на пайтоне, но я его не знаю ) По-моему, моно для этого вполне адекватный вариант. Поставить моно для работы нужной программы — это вообще не проблема для прагматически настроенных людей. Попробовали — работает — все довольны. Не работает — почистили, удалили моно, ждём фиксов.
Моно занимает немного, мегабайт 20 всего в «базовой комплектации». Плюс в некоторых дистрибутивах (если я ничего не путаю) оно уже установлено по умолчанию. Gnome Do, например — это же моно-приложение.
Некоторые программы имеют сложные конфиги. Например, ядро Linux. Обычно его конфигурируют из menuconfig. Думается, что и для других сложноконфигурируемых вещей (веб-сервера, почтовые службы) такие штуки найдут применение.
Морально устаревшее API. Но для С/С++ наверное пока лучше всё равно ничего нет. Для C# я потихоньку пишу удобную библиотеку, там можно будет описывать интерфейсы в XAML, и компоновать контролы как в WPF. Но пока ещё не готово (хотя для маленьких программ уже можно использовать). Описание окна будет выглядеть примерно так:
<Window Name="window2" Title="Очень длинное название окна">
<GroupBox Title="Title">
<ScrollViewer VerticalAlignment="Stretch">
<ScrollViewer.HorizontalScrollEnabled>false</ScrollViewer.HorizontalScrollEnabled>
<ListBox>
<ListBox.Items>
<item>Длинный элемент 2</item>
<item>Длинный элемент 3</item>
<item>Длинный элемент 4</item>
<item>Длинный элемент 5</item>
<item>Длинный элемент 6</item>
<item>Длинный элемент 700</item>
</ListBox.Items>
</ListBox>
</ScrollViewer>
</GroupBox>
</Window>
А само окно так:
Data binding, нормальная система layout'ов, поддержка Win32 и Linux (с использованием Mono) — всё будет в комплекте.
Этот интерфейс не предназначен для конечного пользователя-потребителя. Зато он отлично подходит для упрощения работы админам. Всё же проще запустить такую программу и быстро всё настроить, чем разбираться в синтаксисе и допустимых комбинациях параметров различных конфигурационных файлов. Тем более такие программы можно спокойно запускать удалённо по ssh.
Для обработки пользовательского ввода можно использовать удобную библиотеку libtermkey. А для создания цикла обработки ввода, который бы поддерживал возобновление по разным сигналам (не только по завершении getch()) использовать eventfd.
// Немного надоедает использовать .call каждый раз. Может воспользоваться bind?
// Точно! Давайте привяжем функцию call к контексту slice.
slice = Function.prototype.call.bind(Array.prototype.slice);
неплохо бы добавить ещё один — эквивалентный переход от
// Но мы можем использовать apply и call, они позволяют нам передавать нужный контекст
slice.call([1,2,3], 0, 1); // => [1]
Про «симпотично», наверное, к автору.
А само окно так:
Data binding, нормальная система layout'ов, поддержка Win32 и Linux (с использованием Mono) — всё будет в комплекте.
неплохо бы добавить ещё один — эквивалентный переход от
к
Без него непонятно, что происходит при вызове bind().