Немного программёрской практики. Программа навигатор для КПК

Кроссплатформенность. Завязываясь на технологии Microsoft, получим 9001-ю софтину Windows-only.

Это меня сейчас меньше всего беспокоит. :slight_smile:

Зато это очень беспокоит нас. Хотя, судя по всему, вы просто хотите попрактиковаться в программировании. :3

Я когда-то тоже кодил на шарпе и считал его мега крутым языком и вообще платформой.
Помнится мне нравилось там быстро формы делать, всякие модные фитчи студии в этом очень помогали… кодить удобно)
Но политика майкрософта и запуск этого IL-кода на виртуальной машине мне очень не нравились. Скорость выполнения нативного кода + возможность контролировать все руками + столь же удобный кодинг при использовании сторонних либ типа буста и Qt + полная кроссплатформенность… ИМХО все это переплевывает все фишки связки шарпа+студия и оставляет её далеко позади)) ИМХО от архитектуры приложения многое зависит, можно и на шарпе написать нормально, и на можно С++ написать тормознутую хрень, но в целом нативный (не для .NET) С++ значительно быстрее.

На мой взгляд шарпом нужно просто “переболеть”))

На самом деле скорость выполнения такая же, как и у кода C++.
Другое дело скорость запуска, когда должен сначала загрузиться фреймворк. Это особенно важно для КПК. Хотя там и compact framework. :3

Обожаю тезисы, начинающиеся словами “на самом деле” :stuck_out_tongue:

Нужно не путать назначение этого средства программирования… .NET это аналог-конкурент Java, а главная ниша продуктов написаных под виртуальные машины это монстроподобные энтерпрайз-приложения. … никогда бы раньше не подумал, пока не столкнулся с банковским софтом…раньше тоже казалось что весь серьёзный софт пишут на C и Cpp …ан нет…

И нет идеального языка, к которому надо придти “переболев” неправильными :slight_smile:

Я например, волею судьбы, выучил язык 1С 7.7 … у меня после этого кардинально мнение поменялось в отношении его (а ведь очень многие его считают бейсиком на русском языке)

Для каждой задачи есть свой инструмент… и если C++ выбирать только потому что “он быстрее работает”…то это просто странно.

А с Вашей точки зрения для данной задачи какой инструмент стоит выбрать?

Ну я не сильно то профессиональный программист :slight_smile: И опыта написания программ для КПК у меня нет. Поэтому мне сложно чтото посоветовать.

Что касается меня, С++ в решении данной задачи привлекает потому, что

  1. Я с ним 10 лет маюсь :slight_smile:
  2. Пероносимость
  3. Таки я полагаю, что на нем можно сделать не менее быстрый софт, чем на других языках, а в обратном - я не уверен.
    А вот что плохо - опыта в написании для КПК тоже нет :frowning:
    Кстати, что думает общественность насчет рендеринга на OpenGL? в этом может быть какой-то смысл, или не стоит даже думать об этом?

Да, Garikk, С# как раз для “монстроподобных энтерпрайз-приложений” (с)
Несколько лет назад работал кодером, как раз подобные штуки писали… соединялки с базами данных, редактирование базы товаров, распечатка отчетов и т.д. Куча форм, талиц… и минимум нагрузки. Чтение/запись в базу данных, проверка вводимых значений и т.д. никаких сложных вычислений. Для 1С тоже скрипты простенькие писал… ввод/вывод, печать отчетов…
Для этого шарп подходит как никто другой, но вот рисовать на нем графу и писать приложения с шустрыми расчетами я бы не стал)

“Кстати, что думает общественность насчет рендеринга на OpenGL? в этом может быть какой-то смысл, или не стоит даже думать об этом?”

Ivan Komarov, мы не думаем… мы проверяем! http://forum.openstreetmap.org/viewtopic.php?pid=40833#p40833 )))

В случае с векторным отображением, для простой навигации в основном нужно только отображение статичной графики… это можно делать очень быстро используя VBO… практически без нагрузки на CPU. Главное что буфферы пересчитывать время от времени не нужно как в случае с редактором.

А что касательно растровых тайлов + векторный путь для маршрута, то тут все еще проще. Не знаю чем тайлы рисовать собираются, но вобще вывести текстуру из памяти видюшки намного быстрее чем тащить ее из оперативки. ИМХО в памяти видюшки держать небольшой кеш для тайлов довольно просто и очень полезно. Нарисовать маршрут оттуда-сюда можно одним VBO… пока считали граф, собрали все точки в кучу… запекли их в буффер, сгенерировали дополнительные точки и индексный буффер если хотим “дорожку”, а не линию. Дальше все в видюшке и она все делает сама… очень быстро.

Дык то на ББ, а что на КПК? На сегодняшний день, как я понимаю, с видеоускорителями дело швах, но могут скоро и появиться.

А мне он запомнился своей неторопливостью. Впрочем, нужно посмотреть ещё… Судя по коду, если это то, что лежит в src/Render, то там есть простор для оптимизации. Кстати, кто тут говорил, что в коде меркартора разбирался?

Если не на КПК в традиционном понимании, то на всяких айпонтах, продвинутых ноклах и прочих модных гаджетах с функцией телефона встроенные видеоускорители весьма мощны. И что ещё немаловажно, они позволяют ускорять отрисовку 2D векторной графики (OpenVG). А Qt данную фичу с недавних пор уже использует.

У меня на телефоне вообще весь интерфейс через OpenGL ES рендерится.

liosha, можно ли где-то почитать про алгоритмы. Википедия - это какое-то зло, тысячу ссылок приходится открыть чтобы дойти до сути…
Пока что самый внятный текст, что я нашел с точки зрения хранения (а может и формирования) дорожного графа, это описание формата kiwi, вроде глава 10.A1 теплее всего… Конкретно интересует вопрос разрежения графа; формирование верхних, разреженных слоев из нижних, более детальных.
Еще понравилась идея OpenLR от томтома, практически открытый стандарт на передачу геоданных. В общем чтива много, но то что интересует - цельной картины нет. Заранее спасибо !

Кхм, вот я в своем HTC T4242 искал-искал видеускоритель, да так и не нашел. Общественность склоняется к мысли, что зажали :frowning: Про Qt и OpenVG знаю, ага :slight_smile:

Интересный факт, спасибо. А что за телефон?

n900

По вопросам из первого поста складывается впечатление, что автор темы - программист с не очень большим опытом. Какая переносимость?? Человек просто хочет освоить программирование под WM, ему нравится .NET и C#. Получится у него поделка, которой сможет пользоваться только он сам, это в лучшем случае. Потому что пишется ради практики программирования.

По сабжу:

  1. Не очень понятны требования, какой функционал хочется реализовать. Я бы начал с простого: Slippy Map на osm-тайлах и выводить поверх пиктограммку с текущим положением пользователя. Можно глянуть в исходники OSMTracker (сам их не смотрел). Писать свой рендерер - ну-ну… :slight_smile:

  2. Для реализации рутинга так и так придётся хранить рутинговый граф в каком-то внутреннем представлении в памяти. Почему-то мне кажется, что он будет отдельной структурой независимо от того, рисуется карта тайлами или рендерится из вектора. (Поэтому карту лучше рисовать тайлами - так проще.) Для начала можно загружать граф из стандартного xml (придётся мириться со скоростью загрузки и объёмом карты на карте памяти). Реализовать Дейкстру для поиска маршрута. Потом уже думать над оптимизацией, A*, запретами поворотов… если до этого дело дойдёт.

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

PS. Автор, как оказывается, студент. Могу сказать, что даже простейший навигатор, написанный с нуля (а не скомпиленный проект с codeplex-а :)) потянет на дипломный проект для трёх человек, причём это должны быть очень неплохие студенты с технически грамотным руководителем. Если найдёте готовые компоненты, дело упрощается, но всё равно работы много.

Ну началось. Начали меня оценивать. :slight_smile:

Это заявление, кстати, не имеет под собой никаких 100% гарантий, хотя не спорю, что в большинстве это так. И уж никак эти два предложение ни следуют друг из друга во всех случаях.

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

Да, спасибо. Народ мне уже дал понять, что не всё так просто в этом королевстве. :wink:

Гы. :slight_smile: Интересно, как это из моих сообещений следует, что я студент?
Заканчиваешь, значит ВУЗ, устраиваешься на работу, делаешь (читать - запускаешь) несколько проектов (часть - в одиночку) (разного уровня, на разных языках), завершаешь с практикой программирования и переходишь на другую ступень IT-индустрии, устраиваешься в компанию уровня MS … а потом приходит человек и потому что ты что-то не знаешь, называет тебя студентом. :)))
Мне не обидно. Мне смешно. :))

Real 3L0, ты пиши программу знай)) а мы прикроем)