LINUX.ORG.RU

Избранные сообщения Manhunt

[алгоритмы/либа] Упрощение саморесекающихся полигонов (полилиний). Вычитание/сложение полигонов.

Форум — Development

Мне нужно делать написанное в сабже. Причём так, чтобы из саморесекающихся полигонов (полилиний) получалось минимальное количество несамопересекающихся (как будто мы «закрасили» старый полигон и разъединили его по одиноким точкам, если таковые имеются).

Анимированная картинка: http://rghost.ru/4112069/image.png. Стоит учесть, что может получиться и не одна полилиния (например, из «банта» должно получится 2 треугольника).

Хотел было воспользоваться QPainterPath в Qt, но оказалось, что она мне не подходит — по ссылке два примера использования Qt'шного упрощения саморесекающихся полигонов; первый симплифицируется правильно, второй нет, но это там типа не баг, а фича.

Сложение-вычитание, в принципе, не столько важно, ибо в Qt работает как надо.

Obey-Kun
()

[Слава роботам] Машины учатся видеть

Форум — Talks

http://www.opennet.ru/opennews/art.shtml?num=30177

Ъ

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

http://info.ee.surrey.ac.uk/Personal/Z.Kalal/

Ъ

TLD is an algorithm that simultaneously tracks, learns and detects an unknown object in a video stream. TLD makes minimal assumptions about the object, the scene or the camera's motion. It requires only initialization by a bounding box and operates in real-time. See the project page for videos, download the source code, demo and the TLD data set.

We developed a learning method that optimally combines boosting with bootstrapping and enables efficiently process of large training data sets. Using the method we built a real-time multi-view face detector with state of the art performance. Download the face detector code and test it your self.

 

Manhunt
()

Проприетарная программа

Форум — Development

Здравствуйте. Допустим, я делаю проприетарную программу для Linux. Хочу, чтобы она запускалась на как можно большем количестве дистрибутивов, распространяю в виде tar.gz с каталогом файлов программы. С какими параметрами нужно компилировать программу? При этом её нельзя распространять как статическую сборку, потому что зависит от OpenGL, и потому что тогда она включит в себя старый glibc с уязвимостями безопасности.

Первая проблема - в зависимостях. Вот игра gish: официальный бинарник, и бинарник, скомпилированный мной на основе открытого исходного кода:

zenitur@athlon_neo ~/gish153 $ ldd gish
linux-gate.so.1 => 
libGL.so.1 => /usr/lib32/opengl/ati/lib/libGL.so.1
libSDL-1.2.so.0 => /usr/lib32/libSDL-1.2.so.0
libopenal.so.1 => /usr/lib32/libopenal.so.1
libvorbis.so.0 => /usr/lib32/libvorbis.so.0
libogg.so.0 => /usr/lib32/libogg.so.0
libvorbisfile.so.3 => /usr/lib32/libvorbisfile.so.3
libc.so.6 => /lib32/libc.so.6
libm.so.6 => /lib32/libm.so.6
libpthread.so.0 => /lib32/libpthread.so.0
libXext.so.6 => /usr/lib32/libXext.so.6
libgcc_s.so.1 => /lib32/libgcc_s.so.1
libdl.so.2 => /lib32/libdl.so.2
librt.so.1 => /lib32/librt.so.1
/lib/ld-linux.so.2
libX11.so.6 => /usr/lib32/libX11.so.6
libxcb.so.1 => /usr/lib32/libxcb.so.1
libXau.so.6 => /usr/lib32/libXau.so.6
libXdmcp.so.6 => /usr/lib32/libXdmcp.so.6
zenitur@athlon_neo ~/gish153 $ ldd gish64
linux-vdso.so.1 => 
libSDL-1.2.so.0 => /usr/lib/libSDL-1.2.so.0
libpthread.so.0 => /lib/libpthread.so.0
libopenal.so.1 => /usr/lib/libopenal.so.1
libGLU.so.1 => /usr/lib/libGLU.so.1
libGL.so.1 => /usr/lib64/opengl/ati/lib/libGL.so.1
libSM.so.6 => /usr/lib/libSM.so.6
libICE.so.6 => /usr/lib/libICE.so.6
libX11.so.6 => /usr/lib/libX11.so.6
libXext.so.6 => /usr/lib/libXext.so.6
libvorbis.so.0 => /usr/lib/libvorbis.so.0
libvorbisfile.so.3 => /usr/lib/libvorbisfile.so.3
libpng14.so.14 => /usr/lib/libpng14.so.14
libz.so.1 => /lib/libz.so.1
libc.so.6 => /lib/libc.so.6
libm.so.6 => /lib/libm.so.6
libasound.so.2 => /usr/lib/libasound.so.2
libaudio.so.2 => /usr/lib/libaudio.so.2
libggi.so.2 => /usr/lib/libggi.so.2
libaa.so.1 => /usr/lib/libaa.so.1
libdl.so.2 => /lib/libdl.so.2
libcaca.so.0 => /usr/lib/libcaca.so.0
/lib64/ld-linux-x86-64.so.2
librt.so.1 => /lib/librt.so.1
libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.4/libstdc++.so.6
libgcc_s.so.1 => /lib/libgcc_s.so.1
libuuid.so.1 => /lib/libuuid.so.1
libxcb.so.1 => /usr/lib/libxcb.so.1
libogg.so.0 => /usr/lib/libogg.so.0
libXt.so.6 => /usr/lib/libXt.so.6
libXau.so.6 => /usr/lib/libXau.so.6
libncurses.so.5 => /lib/libncurses.so.5
libXxf86vm.so.1 => /usr/lib/libXxf86vm.so.1
libgii.so.1 => /usr/lib/libgii.so.1
libXxf86dga.so.1 => /usr/lib/libXxf86dga.so.1
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6
libgg.so.1 => /usr/lib/libgg.so.1
libncursesw.so.5 => /lib/libncursesw.so.5
libglut.so.3 => /usr/lib/libglut.so.3
zenitur@athlon_neo ~/gish153 $

Разница есть. Первый бинарник зависит от небольшого количества библиотек, и все они есть в любой системе. Второй запустится только на моей системе.

Часто те библиотеки, без которых никак, но которые есть не у всех, кладутся либо рядом с игрой:

zenitur@athlon_neo /usr/games/braid $ ldd braid
linux-vdso.so.1 => 
libpthread.so.0 => /lib/libpthread.so.0
libCg.so => /usr/games/braid/libCg.so
libCgGL.so => /usr/games/braid/libCgGL.so
libGL.so.1 => /usr/lib64/opengl/ati/lib/libGL.so.1
libSDL-1.2.so.0 => /usr/games/braid/libSDL-1.2.so.0
libstdc++.so.6 => /usr/games/braid/libstdc++.so.6
libm.so.6 => /lib/libm.so.6
libgcc_s.so.1 => /usr/games/braid/libgcc_s.so.1
libc.so.6 => /lib/libc.so.6
/lib64/ld-linux-x86-64.so.2
libXext.so.6 => /usr/lib/libXext.so.6
libdl.so.2 => /lib/libdl.so.2
libX11.so.6 => /usr/lib/libX11.so.6
libxcb.so.1 => /usr/lib/libxcb.so.1
libXau.so.6 => /usr/lib/libXau.so.6
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6
zenitur@athlon_neo /usr/games/braid $

Либо в каталог libs, и игра запускается не бинарником, а скриптом запуска LD_LIBRARY_PATH=./libs game:

zenitur@athlon_neo ~/NewSupaplex $ ldd NewSupaplexX
       linux-vdso.so.1 =>
       libclanApp.so.1 => not found
       libclanGL.so.1 => not found
       libclanGUI.so.1 => not found
       libclanDisplay.so.1 => not found
       libclanCore.so.1 => not found
       libclanSignals.so.1 => not found
       libbass.so => not found
       libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.4/libstdc++.so.6
       libm.so.6 => /lib/libm.so.6
       libgcc_s.so.1 => /lib/libgcc_s.so.1
       libc.so.6 => /lib/libc.so.6
       libGL.so.1 => /usr/lib64/opengl/ati/lib/libGL.so.1
       libpthread.so.0 => /lib/libpthread.so.0
       /lib64/ld-linux-x86-64.so.2
       libXext.so.6 => /usr/lib/libXext.so.6
       libX11.so.6 => /usr/lib/libX11.so.6
       libxcb.so.1 => /usr/lib/libxcb.so.1
       libdl.so.2 => /lib/libdl.so.2
       libXau.so.6 => /usr/lib/libXau.so.6
       libXdmcp.so.6 => /usr/lib/libXdmcp.so.6
zenitur@athlon_neo ~/NewSupaplex $ cat run.sh
#!/bin/sh
export LD_LIBRARY_PATH=./Lib:/usr/local/lib:$LD_LIBRARY_PATH
exec ./NewSupaplexX $*

zenitur@athlon_neo ~/NewSupaplex $ cd Lib/
zenitur@athlon_neo ~/NewSupaplex/Lib $ ls
libbass.so          libclanGL.so.1             libjpeg.so.62
libclanApp.so.1     libclanGUI.so.1            libpng12.so.0
libclanCore.so.1    libclanGUIStyleSilver.so.1
libclanDisplay.so.1 libclanSignals.so.1
zenitur@athlon_neo ~/NewSupaplex/Lib $
Причём библиотеки тоже скомпилированы так, чтобы почти ни от чего не зависеть. И так все игры: Quake, Unreal Tournament, DooM, Heretic II... Как это вообще сделано?! Вторая проблема: ядро и glibc. Я уже давно понял: в любом, даже самом старом, дистрибутиве можно запустить любую проприетарную программу, если обновить glibc, и любое оборудование, если обновить ядро. Ну, ядро ладно: любая программа, собранная в 2.6.x, запустится на нём. А вот если не обновить glibc, то некоторые программы не запускаются. Например, Вангеры 2009 года не запустились в дистрибутиве 2006-го. TeeWorlds тоже не захотел, а перекомпиляция помогла. А теперь внимание: http://www.linuxgamepublishing.com/info.php?id=37
Minimum Requirements	
Operating System: 2.2.x or better Linux kernel with glibc-2.1 or later and X-Windows (XFree86 3.3.x or later)
Processor: 1.0 GHz x86 Processor
Memory: 256 MB
Disc Space: 3.7 GB
CD Rom: 1 x DVD Rom
Graphics Card: Hardware Accelerated 3D Graphics card with 32 MB video memory
Sound Card: OSS or ALSA Compatible
Игра портирована в 2009 году. Похоже, она запускается в любом дистрибутиве. При этом поддерживает ядра 2.2, 2.4, 2.6, и glibc 2.1, даже на древнем Red Hat времён этой игры. Как это сделано?!

Java. Тоже один пакет rpm/deb, и работает везде. Тот что deb не знаю где, а rpm скомпилирован в SuSE 9. В дистрибутиве 2000 года конечно не запустится, но можно сказать, что запускается в любом. OpenOffice.org. Я когда-то заказывал диск с ним, тогда ещё amd64 не был повсеместен, как и deb, и на нём лежал пакет RPM, который работал везде. Сейчас всё так же, только добавились deb и x86_64.

Как вообще это осуществляется? Что почитать? Есть же какие-то статьи, старые и новые, в том числе и на русском языке. Я не нашёл. Решил спросить здесь. Хотелось бы так же попрактиковаться, и сделать сборку какой-либо свободной Linux-овой программы, которая запустится везде. Хочется знать тонкости: когда-то в Mandrake с новым ядром 2.6 у меня сбоили маленькие линуксовые гонки из Интернета (я думал что из-за ядра, хотя я наверное не прав). А недавно в теме про игру Jasper кто-то писал о проблемах с glibc 2.4. Я так понял, что запустилось, но с ошибками в работе. Хочу попрактиковаться: взять исходник Linux-овой программы с определённым набором зависимостей, и сделать из неё бинарник, который запустится во всех дистрибутивах, не применяя статическую линковку. В крайнем случае положить необходимые библиотеки в архив, и я не знаю как это сделать.

ZenitharChampion
()

Указание версии или ревизии при компиляции

Форум — Development

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

Так же приветствуется рассказ о том кто как связывает это системами контроля версий.

visual
()

[C][C++] Графическая библиотека

Форум — Development

Ищется хорошая открытая графическая либа желательно с гуем для работы не только в Linux, Win, MacOSX, но, хотелось бы так же иметь возможность портировать это всё в iOS, андроид, симбиан, короче во всё что шевелится..

Единственный кандидат пока - это SDL, но в нём не гуя, что печально.

 ,

gandjubas
()

Сказ о том, как Игнат-молодец Common Lisp в Ынтерпрайз пихал.

Форум — Development

Наверняка многие читатели интересуются, какова подоплёка моих последних тем о возможности применения Common Lisp в промышленном программировании. Чувствую что обязан рассказать всю историю целиком, как минимум для тех, кто помогал мне ответами. Пользуясь случаем, хочу также всех поблагодарить.

***

Предистория. Некоторое время назад работодатель (крупный производственный концерн) обнаружил пробел в IT-инфраструктуре. Было принято решение в пользу in-house разработки, потому что на рынке подобного готового продукта просто нет, а штат разработчиков у нас довольно большой и квалифицированный. Но разработка исторически ведётся на традиционных, статичных, «слабых» языках, в основном Java и C++.

Но надо отдать должное, к новым перспективным технологиям относятся открыто и с энтузиазмом. Поэтому я предложил рассмотреть в качестве технологии Common Lisp, а мне предложили сделать доклад с обоснованием перед Техническим Комитетом.

***

Вот тут собственно и начинается история. Некоторое время я собирал информацию и готовил доклад, спасибо всем на ЛОРе кто отвечал на мои вопросы о лиспе. Итак, были рассмотрены следующие существенные для промышленного ПО аспекты.

1. Persistence. Общепринятый в современном ПО подход, позволяющий автоматически отображать программные сущности и отношения между ними на таблицы и связи в СУБД. Для Common Lisp индустриальным стандартом де-факто является AllegroCache, хотя это и не «стандарт» в общепринятом смысле, как JPA например. Прозвучал закономерный вопрос «почему надо тратить несколько тысяч $$$ на Allegro, если Hibernate даёт всё то же самое, к тому же оно бесплатно и открыто?» Нет, для холдинга несколько тысяч $$$ - это в общем копейки. Но финансово успешной организацию делает в том числе умение считать каждую копеечку, и тратить деньги обоснованно.

2. Интеграция. Предполагается, что продукт будет состоять из нескольких распределённых модулей, коммуницирующих друг с другом. А также надо будет обращаться к внешней системе через CORBA. Если с коммуникацией CL-CL всё более менее понятно (AMQP, веб-сервисы) то с CORBA оказалось не всё так гладко. Так, стабильного CORBA 3.0 ORB для Common Lisp просто нету. В некотором приближении может устроить ORB, входящий в состав LispWorks. Это ещё несколько тысяч $$$, см. выше насчёт обоснования. Опять-таки, для Java и C++ имеются открытые, бесплатные и стабильные CORBA 3.0 ORBs. Ну и сами лисперы однозначно соглашаются в том, что «Common Lisp и CORBA не предназначены друг для друга», так что тут однозначный неуд.

3. Моделирование. Индустриальный стандарт для моделирования, UML, оказался слабо применим по причине сильных расхождений в семантике между UML/ООП и CLOS. Своих методик моделирования для CL нет. При этом распространено абсурдное мнение, что лучшая модель и документация - это сам код. Боюсь, что происходит оно от незнания UML и непонимания, что подавляющее большинство аспектов, охватываемых UML, в принципе невыразимо ни в каком в тексте. Вообще, наверняка UML можно использовать в некотором приближении, задействуя стереотипы и т.п. Но такой практики просто нет, а в индустрии практика - это всё. Позволить себе наступать на неизвестные грабли можно только в исключительных случаях.

4. Методология. Чётко очерченной методологии разработки для CL как-то тоже не наблюдается. Стандартной IDE у нас считается Eclipse, а для CL стандартом де факто является Emacs+SLIME, что повлечёт переучивание большого числа сотрудников. CUSP для Eclipse оказался довольно сырым поделием, чтобы его реально использовать, придётся инвестировать в его допиливание. Что касается, паттернов проектирования, в принципе многие из них применимы и к Common Lisp. Но практики такой опять же нету. Следовательно, нету опыта и информации.

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

1. DSL. Довод о простоте создания DSL был сразу воспринят скептически. Оказывается, у нас в организации уже давно используется Scala, на которой написание DSL (причём не ограниченных синтаксисом S-выражений, как в Лисп) гораздо проще и гибче.

2. Code-as-data, кодогенерация и метапрограммирование. При всех преимуществах такого подхода, сильно страдает понимаемость кода и, как следствие, общая поддерживаемость системы. Одно дело, когда код пишет энтузиаст-одиночка. Но ситуацию, когда шестиуровневые навороты кода понятны только автору, индустрия допустить не может. К тому же, современная Java обладает довольно развитыми средствами метапрограммирования, такими как StringTemplate или просто генерация кода на поддерживаемом JVM динамическом языке и тут же исполнение его. А принцип «code as data» вообще рассматривается как нарушение основополагающего в проектировании принципа separation of concerns.

3. Динамический язык и инкрементальная разработка. Динамика языка, при понимании преимуществ, тоже рассматривается скорее как негативное свойство. В промышленном программировании от системы в первую очередь требуется устойчивое поведение. Ситуация, когда поведение может измениться непредсказуемым образом в рантайме - недопустима. Грубо говоря из Common Lisp можно, как из пластилина, слепить что угодно. Но если слепить кувалду, то это будет пластилиновая кувалда, с закономерным выводом о её применимости. Кувалда должна быть всё-таки из металла. Теперь что касается инкрементальной разработки. Она безусловно является сильной стороной, но имеет кое-какие негативные последствия для эффективной командной работы с системами VCS. К тому же, современные Java IDE тоже это умеют: например, в отладчике на живой системе изменить код, тут же перекомпилировать и подгрузить обновлённый класс и продолжить отладку с предыдущего фрейма.

4. Производительность труда разработчика. Это то, что всегда относят к главным достоинствам Common Lisp, но я не нашёл возможностей объективно это доказать. Такие вещи может показать только практика. Если опираться чисто на объём кода, то он будет примерно эквивалентным для примерно эквивалентных проектов на CL и той же Java. На Java ещё и возможен выйгрыш за счёт богатой runtime library и отсутствия необходимости изобретать велосипеды. Так, например, QPX (ядро продукта ITA Software) занимает 500 тысяч строк на Common Lisp.

***

Думаю сами догадаетесь какие выводы сделал Технический комитет относительно будующего языка разработки. А лично я для себя сделал такой вывод. Common Lisp в промышленной разработке можно использовать только для программирования сложных алгоритмов, когда может «выстрелить» динамизм и макросистема. Использовать можно двумя способами: внедрять при помощи ECL в программы на С/С++, или запускать standalone SBCL образ и вызывать его через AMQP или веб-сервисы. На самостоятельное плаванье CL неспособен. Лисп - это юркий и быстрый катер, но в неспокойных водах «энтерпрайза» его плаванье будет недолгим. Там нужны тяжеловесные, хоть и неповоротливые, атомные ледоколы типа Java и C++.

Ignatik
()

Правильный MVC для игры

Форум — Development

Есть хитрая настольная игра, хочется сделать её компьютерную реализацию, и хочется сделать её по принцыпам, схожим с MVC - есть модель, описывающая правила и ход игры, есть контроллер, передающий дествия игрока, и есть вид - собственно отображение происходящего в игре. Нужно это чтобы легко можно было менять контроллеры (локальный игрок/удалённый игрок/AI) и виды (GUI/Curses/Web UI, заодно контролировать из модели кому какие данные разрешено видеть). На деле получилось как-то не особо по канонам MVC, в связи с чем следующие непонятки:

1) Взаимодействие модели и контроллера. У игры куча фаз хода игрока, которые могут прерываться другими игроками, и ОЧЕНЬ хочется реализовать это в виде императивного кода, дёргая контроллер когда нужно действие игрока. Т.е.

void Game::Turn() {
  DoFoo();
  m_Controller->AskForAction(SELECT_UNIT);
  DoBar();
  m_Controller->AskForAction(CAST_SPELL);
  DoBaz();
  m_Controller->AskForAction(BUY_STUFF);
  ...
}

допустим, это будет работать с Curses, где в контроллере можно просто ждать нажатия клавиши. Но как быть, например, с GUI, где есть внешний цикл обработки событий? Придётся либо запустить копию цикла в контроллере, что, как мне кажется, криво и скорее всего возможно не во всех тулкитах, либо GUI банально не будет отрисовываться, пока пользователь не нажмёт нужную кнопку. Можно сделать отдельный поток, но это выглядит как костыль. Единственная альтернатива что мне видится - выходить из Turn когда нужно действие и его перезапуск когда действие получено (что-то типа FSM):

RequiredPlayerAction Game::Turn() {
  switch (m_TurnPhase) {
  case 0:
    DoFoo();
    m_Phase = 1;
    return SELECT_UNIT;
  case 1:
    DoBar();
    m_Phase = 2;
    return CAST_SPELL;
  case 2:
    DoBaz();
    m_Phase = 3;
    return BUY_STUFF;
    ...
  }
}

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

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

2) Взаимодействие модели и вида: push или pull? Вроде в классическом MVC вид просит у модели данные и отображает их. Мне же более удобным видится вариант когда модель при изменении данных пинает вид. Второй вариант выгдятит гораздо лучше потому что взаимодействие происходит через жёстко определённый интерфейс вида, что обеспечивает хорошую абстракцию, тогда как в первом случае придётся либо давать виду const-доступ к кишкам модели, либо гененировать структуру данных, представляющую состояние игры (что по сути просто копия тех же кишок), а структура этих кишок может меняться в процессе разработки модели.

Ну тут вроде всё понятно, но на всяких случай спрошу - push модель это в целом нормально?

slovazap
()

Как кросскомпилировать программы С++?

Форум — Development

Понимаешь ЛОРчик есть одни хелловорды и их надо собрать под Ubuntu 32-bit и 64-bit, также под Win32. Вопрос а как в 64-x битной Ubuntu собрать 32-х битное приложение? Под Win32 можно собрать используя i686-w64-mingw32-g++. Т.е. введя i686-w64-mingw32-g++ firts.cpp -o first.exe получу exe-шник. А как получить 32-х битного эльфа на 64-х битной Ubuntu?

И ещё пару вопросов?

1. Чем отличается wineg++ от i686-w64-mingw32-g++?

2. Вообще, с помощью wineg++ можно получить exe-шник?

3. Как вообще собирают Wine и ReactOS.

4. Чем отличается wine1.3-dev http://packages.ubuntu.com/precise/amd64/wine1.3-dev/filelist от mingw-w64-dev http://packages.ubuntu.com/precise/all/mingw-w64-dev/filelist. Почему mingw-w64-dev больше по размеру wine1.3-dev? И почему wine1.3-dev медленно, но верно растёт по объёму? Ведь это же всего лишь h-едеры.

5. Теперь в Debian общий вид gcc компилятора имеет вид: arch-os-gxx. Например, http://packages.debian.org/sid/ia64/g++/filelist есть i64-linux-gnu-g++ т.е. архитектура i64, ос linux-gnu, компилятор g++, или http://packages.debian.org/wheezy/kfreebsd-amd64/gcc/filelist есть файлик x86_64-kfreebsd-gnu-gcc т.е. архитектура x86_64, ос kfreebsd-gnu, компилятор gcc или вот ещё http://packages.debian.org/sid/hurd-i386/gfortran/filelist есть файлик i486-gnu-gfortran т.е. архитектура i486, ос gnu, компилятор gfortran.
Т.е. http://packages.debian.org/sid/amd64/gcc-mingw-w64/filelist есть i686-w64-mingw32-g++. Т.е. архитектура i686, ос w64-mingw32, компилятор g++. i686-w64-mingw32-g++ будет компилировать с C++ даст бинарник оптимизированный под Pentium Pro (i686) и бинарник будет под Windows/Wine/ReactOS. Мои рассуждения верны?

6, В Wine есть 16-ти битной код для запуска Win16 приложений. Чем и как его собирают? Кроме Wine есть ли другие программы под Linux работающие в 16-ти битном режиме, т.е. i286 (защищённый режим работы CPU, с 16-ти разрядными регистрами, сегментной моделью памяти) В Windows есть NTVDM, а в Wine — WINEVDM. В каталоге C:\windows\system32 есть файл winevdm.exe Как собирают winevdm.exe?

Примеры:

# include <iostream>
# include <limits>
int main () {
  int last_digit; 
  int int_number, first_digit, chastnoe, chastnoe2;	
  int a;
  int flag;
  int temp_number2, temp_number,temp_number_max_int;
  int max_int; 
  int last_digit_max_int;
  max_int = std::numeric_limits<int>::max();
  temp_number_max_int = chastnoe2 = max_int;
  flag=0;
  a=10;
  std::cin >> int_number;
  if (int_number < 10 )  {std::cout << "Число должно быть больше 10\n"; goto endprg;}
  chastnoe=temp_number = int_number;
  first_digit = int_number % 10;
  while (chastnoe >=10) {
    last_digit = chastnoe %10;
    temp_number2 = chastnoe %100;
    temp_number2 = temp_number2 / 10;
    last_digit_max_int = chastnoe2 % 10; 
    if (temp_number2 == last_digit) flag++;  
    chastnoe = temp_number / a;
    chastnoe2 = temp_number_max_int / a;
    if (chastnoe<10) break;
    a = a *10;
  }
  if (flag == 0) std::cout << "No\n"; else std::cout << "Yes\n";
  if (first_digit>chastnoe2) std::cout << "Overflow\n"; else {
    std::cout << first_digit*a + 10*((int_number % a)/10) +chastnoe << "\n";
  }
  endprg:return 0;
}

При сборке

alexey@alexey-laptop:~/prg$ i686-w64-mingw32-g++ test.cpp -o test.exe
alexey@alexey-laptop:~/prg$ x86_64-linux-gnu-g++ test.cpp -o test
alexey@alexey-laptop:~/prg$ wineg++ test.cpp -o test1 /usr/bin/ld: Relocatable linking with relocations from format elf32-i386 (test-c0vYza.o) to format elf64-x86-64 (test1.kLZdHP.o) is not supported
winebuild: /usr/bin/ld failed with status 1
winegcc: winebuild failed

alexey@alexey-laptop:~/prg$ file test.exe
test.exe: PE32 executable for MS Windows (console) Intel 80386 32-bit
alexey@alexey-laptop:~/prg$ file test
test: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped
alexey@alexey-laptop:~$ file test1
test1: ERROR: cannot open `test1' (No such file or directory)
alexey@alexey-laptop:~$

Почему wineg++ ничего не собирает?

Или же:


#include <stdio.h>
#include <windows.h>
 
int main ()
{
        SYSTEMTIME lpSystemTime;
 
        GetSystemTime(&lpSystemTime);
        printf("Today is: %d/%d/%d\n", lpSystemTime.wYear,
                        lpSystemTime.wMonth, lpSystemTime.wDay);
        return 0;
}

Собираем: alexey@alexey-laptop:~/prg$ x86_64-linux-gnu-g++ second.cpp -o second
second.cpp:2:21: фатальная ошибка: windows.h: Нет такого файла или каталога
компиляция прервана.
alexey@alexey-laptop:~/prg$ i686-w64-mingw32-g++ second.cpp -o second.exe
alexey@alexey-laptop:~/prg$ wineg++ second.cpp -o second

И здесь куча ошибок такого плана http://pastebin.com/46fwpmKS

alexey@alexey-laptop:~/prg$ file second.exe
second.exe: PE32 executable for MS Windows (console) Intel 80386 32-bit
alexey@alexey-laptop:~$ file second
second: ERROR: cannot open `second' (No such file or directory)
alexey@alexey-laptop:~/prg$ ./second.exe
Today is: 2011/11/5
alexey@alexey-laptop:~/prg$

Для чего вообще нужен этот wineg++?

man wineg++ даёт: winegcc - Wine C and C++ MinGW Compatible Compiler

Так почему это C++ MinGW Compatible Compiler ничего не собирает?

Root-msk
()

Меню приложений Linux

Форум — Development

Как из консоли добавить пункт (например, в Internet) добавить свое приложение?

Заранее спасибо.

brotheroftux
()

Может, кому интересно. Ещё один 3D-принтер.

Форум — Talks

Про RepRap слышали? На http://seemecnc.com/ продают их модель Mendel. 450 долларов за собранную, 350 за конструктор, 100 за конструктор без контроллеров и моторов, 65 за один экструдер.

Правда, все размеры переделали с сантиметров в дюймы.

question4
()

[mingw][C++][python][SWIG] Кросскомпиляция под мастдай - как бы ее ...?

Форум — Development

Есть некая софтинка C++/Python, надо ее собрать под виндвовс ХР.

Точнее есть интерфейс на питоне + ядро на С++, которое в питон цепляется через SWIG. Сделал минималистичную версию (тупо стер все лишнее, в одном каталоге лежит 3 модуля + оболочка сделанная SWIG-ом для питона и кулек хидеров), надо это собрать видимо в .dll (изнчачально оно собиралось в .so).

Дальше кино - ни один из модулей не собирается:

i586-mingw32msvc-g++ -enable-auto-import -mwindows  -O3 -g  -I/usr/include/python -I/usr/i586-mingw32msvc/include/ -DPYTHON -DPYLIKE_PRINT_R -Wall -c impl.cpp
In file included from /usr/include/python/Python.h:58,
                 from indexD.hpp:9,
                 from arrayTD.hpp:8,
                 from impl.hpp:4,
                 from impl.cpp:1:
/usr/include/python/pyport.h:261:24: error: sys/select.h: Нет такого файла или каталога
In file included from indexD.hpp:17,
                 from arrayTD.hpp:8,
                 from impl.hpp:4,
                 from impl.cpp:1:
mystream.hpp:36: error: expected unqualified-id before ‘)’ token
mystream.hpp:36: error: expected `)' before ‘->’ token
...

Допустим псол. ошибки - ей не нравится метод класса fileno(), это я могу исправить (и вообще этот модуль тоже выкинуть). Но чего делать с sys/select.h и вообще со сборкой модуля для питон из под этой mingw???

Сроки - позавчера, все горит синим планменем... ;-(

 , , ,

AIv
()

[C/C++] перетасовка бит в целом числе

Форум — Development

Всех с Новым годом!;-)

Есть беззнаковое целое (64 бита) число. вида ... b3 b2 b1 b0 где bi - бит на соотв. позиции (в двоичной сист счисления). Нужно превратить его в ... b3 0 0 b2 0 0 b1 0 0 b0, те напихать между битами исходного числа некоторое кол-во нулей, число нулей известно на этапе компиляции, результат заведомо поместиться в 64 бита. Производительность решения КРАЙНЕ важна. Исходные числа до 2^20 (чаще ~ 2^8-2^10).

Мне пока придумалось три варианта:

1) в цикле дергать каждый бит по отдельности и двигать его на нужную позицию. Очень долго.

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

3) Промежуточный вариант - завести массив скажем на 2^8 значений, дальше преобразовывать исходное число кусками. Быстрее чем первый, но свои заморочки тоже есть.

У кого нить еще какие нить мысли будут? Может там какие нить хитрые операции есть...

AIv
()

[C++][2D] Поиск движка..

Форум — Development

Здравствуй ЛОР! Нужен актуально разрабатываемый бесплатный графический 2D движок. Что можете подсказать?

 ,

metahondria
()

Смоделировать сеть Петри

Форум — Development

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

Manhunt
()

Книга «Работа с Postgresql: настройка, масштабирование», версия 2

Новости — Документация
Группа Документация

Вышла обновлённая редакция книги «Работа с Postgresql: настройка, масштабирование». В книге исследуются вопросы по настройке производительности Postgresql, репликации и кластеризации. Изобилие реальных примеров позволит как начинающим, так и опытным разработчикам быстро разобраться с особенностями масштабирования Postgresql для своих приложений. Версия книги 2.0.0 beta. Пока что только сконвертирован pdf. Все правки и замечания автор просит указывать на этой странице - https://github.com/le0pard/postgresql...

Книга доступна в электронном виде под лицензией CC-BY-NC.

>>> Страничка книги

 ,

le0pard
()

Информация о распознавании текста, распознавании образов

Форум — Talks

Подскажите, кто знает, что стоит почитать по распознаванию образов вообще и по распознаванию текста в частности.

PS: Гуглить умею, пока не забанили. Но хочется услышать рекомендации от тех, кто с этим сталкивался.

blex
()

Новый академический язычок для графики halide

Форум — Development

http://people.csail.mit.edu/jrk/halide12/

Это реально что-то новое - или опять лисапед изобрели (как мне кажется)? Обещают на днях сырцы выложить...

svu
()

Компилятор языка С для микропроцессора КРОЛИК КМ32 прошел тесты ACE

Новости — Hardware and Drivers
Группа Hardware and Drivers

Широко известный в профессиональных кругах российский разработчик микросхем «Дизайн Центр КМ211» завершил тестирование Си-компилятора для платформы КРОЛИК КМ32 на отсутствие ошибок и соответствие стандарту с использованием «SuperTest compiler test and validation suite» компании ACE. Тесты ACE содержат более 3 миллионов проверок и обеспечивают промышленное тестирование с практически полным покрытием стандарта языка.

Семейство микроконтроллеров КРОЛИК КМ32/16/8 является собственной разработкой компании КМ211 и принадлежит к микроконтроллерам общего назначения для встраиваемых систем. Частота чипа 100 МГц при 90 нм техпроцессе. Контроллер имеет ультранизкое рабочее энергопотребление — менее 34мкВт/МГц. Время реакции на прерывание не более 3 тактов. АЛУ обеспечивает однотактное умножение 8х8/16х16/32х32. Адресуемая память данных и команд до 4Гб.

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

>>> Краткая новость на сайте производителя

 ,

Xintrea
()

Требуется создать кастомную прошивку для ip камеры

Форум — Development

Требуется создать кастомную прошивку для ip камеры d-link dcs-2103, на базе gpl опубликованного самим d-link на ftp://ftp.dlink.ru/pub/Multimedia/DCS-2103/GPL/. Платформа: montavista linux. Исходный код прошивки: частично присутствует. Основная задача: написать демон производящий захват и обработку видео с камеры, предположительно opencv, поддерживающий стриминг видео после обработки, не всегда, а активируемо. Управляется демон по сети: включить передачу видео, передать настройки обработки. Также демон должен постоянно выдавать в сеть мультикаст с данными обработки, а именно поиск координат лазерной точки в видеопотоке, предварительно скорректированном афинно (приведение roi к эталонному прямоугольнику). Стриминг видео нужен для калибровки с ПК. Также демон должен откликаться на мультикаст опрос для обнаружения всех камер в сети, и уметь менять ip адрес по команде через сеть.

Duv
()

mingw с человеческим лицом

Форум — Development

понадобилось вот портировать gtk приложение в Windows.

Не мудрствуя с кросс-компиляцией, решил поселить всё необходимое в виртуалке.

И теперь изыскиваю оболочку (сборку?) mingw с пакетным менеджером и набором необходимых пакетов. Можно конечно следовать заветам Патрика ставить(и обновлять) всё поотдельности и желательно из исходников, но 21 век на дворе - должно быть уже готовое решение.

MKuznetsov
()