Бюджетно GPS решение

May 31st, 2010

0. Какво очакваме от такова решение.
Не очаквам рутиране. Трябва да може да ми показва къде съм, гледка от птичи поглед. Да може да пази маршрути и тракове. Да ме насочва към контролни точки (waypoints). Трябва цялата система да е компактна и да се събира в джоб. Трябва да работи с телефона, който в момента имам (Sony Ericsson K800i), т.е. софтуера да е Java. Естествено, трябва да има карти (включително импорт от картинка) и възможност сам да си ги правя лесно.

1. Телефон (Java/Symbian)
Трябва ви какъвто и да е телефон с поддръжка на MIDP-2.0 и CLDC-1.1. Телефона ви трябва да има поне 500KB оперативана памет и доста повече за карти. В момента карта на регион с размери 3 на 3 км (Пловдив) с приближение от 11 до 18 заема 16МВ на телефона ми. Карта на цяла България с приближение от 8 до 13 заема 55МВ.

2. GPS приемник
Всякакъв приемник, който се свързва по Bluetooth е подходящ. Доста разпространен и евтин модел е Holux M-1000. Нов струва около 80лв, а моя го взех от Ebay за 20. Малък е (като кибритена кутия), събира се във всякакви джобове. Батерията му държи към 10+ часа (из нета пишат за 20+ часа) и приемането му е добро, дори когато сте в кола, влак и т.н. MTK чипсет. В комплекта има зарядно за кола и USB кабел, който може да се използва пак само за зареждане на батерията. Батерията е Nokia-съвместима, така че за под 10 лв може да си вземете втора от руския пазар. Скоростта не се дава много коректно – разлика от до 5 km/h е допустима във кола. Във влак, където няма неравномерни ускорения като че ли е малко по-точно. За пешеходци текущата скорост варира между 0-10 km/h и не може да се гледа. Но ако правите трак накрая може да видите средна аритметична скорост.
3. Софтуер
- MapNav – http://mapnav.spb.ru/site/download.php?list.3 – изисква регистрация (става бързо и безплатно) – това се инсталира на телефона ви.
- mobile map creator – http://mapnav.spb.ru/site/download.php?list.4 – също – това се инсталира на компютъра ви (дори работи с Wine)
- Ozi Explorer – http://www.oziexplorer.com/ – програмата струва $95, но който държи да си пиратства – има я из торентите. Програмата служи за калибриране на растерни карти и не е необходима, ако не мислите да правите това. Също се инсталира на компютъра (и пак работи с Wine)

MapNav
1. Features
- език на интерфейса – руски, английски, български и др.
- 18 нива на приближение, като на най-високото разделителната способност е около метър на пиксел.
- правене на трак, като слага точките по изминато разстояние, минало време или при промяна на посоката. Без проблеми прави трекове с 3000+ точки, като има опция за олекотяване да показва само последните 100 точки. Дава профили на на пътя по височина и по скорост. Траковете могат да се експортват/импортват в GPX, KML или Ozi формат.
- компас, който показва посоките релативно на посоката на движение.
- водене по маршрут или контролни точки – waypoints.
- заключване на клавиатурата
- затъмняване на екрана – върши добра работа за пестене на батерия
- смяна на картите по време на работа.
- използване на ваши карти (в MNO формат – правят се с mobile map creator, виж по-долу) или онлайн такива (ако имате мобилен интернет).
- спортен режим на засичане на обиколки – не съм го пробвал.
- в основния екран се показват картата, текущата позиция на нея, координати, скорост, надморска височина и др.
- слагане на измерителна скала върху картата
- ръчно задаване на път
- слагане на белязки, които после може да ползвате за waypoints или Points Of Interest
- импорт и експорт на трaкове, waypoints, маршрути и др. Поддържа GPX формат и няколко други.
- настройки за всичко, което можете да се сетите.
- правене на скрийншот
- описание на mapnav на английски – http://mapnav.spb.ru/site/page.php?15 и на руски – http://mapnav.spb.ru/site/page.php?10

Карти
1. Калибриране с Ozi
1.1. В Ozi Explorer (бих пуснал снимки, ако притежавах програмата)
File -> Load and Calibrate Map Image
Избиране на растерната карта.
Избиране Point 1 -> клик в единия ъгъл на картата; в дясно на Degrees & mins се попълват координатите на точката
Избиране Point 2 -> клик в друг ъгъл на картата; попълват се новите координати
Point 3 – по същия начин
Save -> избирате къде да бъде запазен .MAP файла – това е информацията за калибровката на картата и ще се използва в следващата стъпка.
1.2. В Mobile Map Creator
Горе трябва да е избран таба Convertor.
Кликате на първата иконка (текста на нея е нещо като Select map to convert).
mobilemapcreator-1
В нея зареждате .MAP файла, който имате от Ozi-то. Внимание: ако сте свалили МАР файл от нета, отворете го и оправете пътя до растерното изображение да сочи правилно към изображението което имате (C:\Ozi\superdupermap.map при един ще е D:\Documents And Settings\usr\My Documents\plovdiv.map при друг). Пътя до изображението е на третия ред във МАР файла, който се отваря като текстов с Notepad. Ако сам сте си направил МАР файла, няма нужда от подобна манипулация.
Зареждате МАР файла и избирате къде да запазите крайните карти. Ще получите два файла с разширения MNM и MNO. Този с разширението MNМ се използва като вътрешна карта, която може да вградите в самата програма MapNav, но авторите й препоръчват да не се прави така. Използвайте MNO файла и си работете с външна карта.
2. Сваляне на уеб карти (Virtual Earth)
Горе трябва да е избран таба Map.
mobilemapcreator-2
Първия плъзгач е за zoom level-a на избраната карта. Картата източник се избира от падащото меню. В момента са налични VirtualEarth, Google, OSM и др. Могат да се добавят още с директно редактиране на maps.ini. В прозореца с картата можете да влачите докато намерите областта, която ви интересува. Кликате на Set to map и избирате с мишката района. Трябва да се появи с инвертиран цвят. Под този бутон се намира Map Zoom – стойността вътре показва какво приближение ще имате в получената карта накрая. С бутона “+” добавяте селекцията в компилацията. Внимание: изберете всичките приближения, които искате да имате после в MapNav-a! Примерно ако искате да имате от ниво 11 до ниво 13, задавате ниво 11, кликате “+”, задавате ниво 12, кликате “+”, задавате ниво 13, кликате “+”.
mobilemapcreator-3
Цифрите ви показват колко плочки (tiles) ще се свалят от нета. Това е и горе долу показател за размера на картата накрая. Когато сте доволни от селекцията, кликате Compile Map и избирате къде да се запазят двете карти MNO и MNM.

Инструменти за визуализиране на трекове
1. Онлайн
http://www.everytrail.com/
- може да ъплоудвате тракове в GPX формат – public (всеки може да гледа трака) и private (само вие можете да го гледате) режими
- дава профил на терена по скорост и по височина
- ъплоудване на снимки и геотагване
- пътепис
- търсене и браузване на тракове
2. Десктоп
- Google Earth – да се провери какво става там. Вероятно трябва да работи с KML.

Празници

December 28th, 2009

Чудех се какво да блогна този месец. Темата с празниците никога не остарява, та видях този пост от преди една година и продължавам да си държа на своето – тъпи празници :)
Цялата истерия покрай шопинга и преместването на гигантски маси хора от точка А до точка Б докарва повече негативни емоции отколкото празниците правят позитивни.
Реших да си направя новогидшното ходене на кино, а то се оказа че за “Аватар” в IMAX за дни напред всички места са запазени. Нищо – за сега гледам на ново Firefly и продължавам да му се кефя :)

Готин Bash хак за изтриване на път

November 24th, 2009

Забелязъл съм нещо интересно, което може да се прави в csh, но работи по друг начин в bash.
Да речем че съм написал някакъв дълъг път:

/mnt/storage/mp3/Manowar

… и се сетя че всъщност не съм имал предвид “Manowar” като последна директория, а “rammstein”. Единия начин да оправя това е като набия 7 backspace-а и да изтрия всяка буква поотделно, докато стигна до наклонената черта. Ами ако се сетя че “rammstein” не е в “mp3″, а в “/mnt/storage/Music”? Тогава чаткането по backspace става още повече.
В csh това става елементарно с CTRL-W – комбинацията изтрива всичко от командния ред до предната наклонена черта.
Така

/mnt/storage/mp3/Manowar

става

/mnt/storage/mp3/

с един CTRL-W. Следващия CTRL-W ще махне “mp3/”, следващия ще махне “storage/” и т.н.
Гугъл върна един резултат на това търсене – тук в Shallow Thoughts.
На кракто решението е следното:
Това отива в ~/.inputrc:

set bind-tty-special-chars Off

А това отива в ~/.bash_profile:

bind '\C-w:backward-kill-word'

Шела се рестартира (logout -> login) и трябва да работи.
Обяснение на дълго защо се случва това – в горния линк.

GIMP – прекалено сложна за ползване

November 22nd, 2009

Тези две новини от два различни сайта пристигнаха в RSS четеца ми една след друга:
GIMP няма да е в Ubuntu 10.04 по подразбиране
50% от завършващите гимназия са неграмотни
Мисля че новините идеално се допълват в контекста на една друга.
GIMP заемала прекалено много място. Инсталаторът е цели 14МВ, докато Photoshop архивите в дата-та са към 300-400MB.
Интерфейсът на GIMP бил прекалено сложен. Има-няма 20 инструмента.
GIMP била алтернатива на Photoshop, а Photoshop не била включена по default в Windows, за това GIMP не трябва да е в Ubuntu. О… Боже… Мой…

Регулярни изрази в C (PCRE)

November 19th, 2009

Предполагам че на всеки, който пише код рано или късно му се налага да парсва низове. В случай че низът не е нещо кратко, точно и ясно, се налага използването на regex. В различните езици регулярни изрази се ползват по различен начин. Общото е че върху изследвания низ се налага шаблон и според това дали низът попада в шаблона (match-ва) се предприемат някакви действия или части от низа се прехвърлят в други променливи. В Perl това става лесно – има си езикова конструкция:

  1.  
  2. $string = "The lazy dog jumped over the quick brown fox.";
  3. if ($string =~ /(\w{3}\./){
  4. $match = $1;
  5. do_something_on($match);
  6. }
  7.  

Кракто и ясно – ако низът попада в /шаблон/ – да се направи еди какво си. Няма да се спирам точно върху синтаксиса на шаблоните, понеже самия факт че четете това тук предполага че сте на ясно :)
Все пак ако не сте на ясно, ето ви един плашещ шаблон, за да се откажете още тук:
/^([\d\.]+?)\skill\s+(\d+)\s+([\w\s]+?)(\d+?)\s+([\w\s]+?)\w+$/
Това използвам за парсване на тези редове от логовете на Unreal Tournament:
175.48 kill 1 Sniper Rifle 5 Sniper Rifle Decapitated
В PHP няма езикова конструкция, но има доста функции за Perl Compatible Regular Expressions, които работят на същия принцип.
Сега да видим как е положението в С.
От много време търсех как мога да ползвам регулярни изрази, но все удрях на камък. Когато ми се е налагало да парсвам низове съм ползвал sscanf или разбиване на символи, броене, чакане Х-тия символ да е точно ‘А’, Y-тия да е точно ‘B’ и т.н. Неприятна работа включваща жонглиране с цикли, if-ове, strcmp и двадесет нива индентация на кода.
Днес открих че в С има поддръжка на PCRE и ми се дощя да се самоубия :)
Ако работите на нормална операционна система, то може да видите много информация с man pcre и man pcreapi. Ако сте наистина щастливци, някъде из дистрибуцията ще имате файл pcredemo.c, който нагледно показва как се работи с PCRE функциите.
Ако не сте от тези щастливци можете да си намерите файла от тук.
Използват се две основни функции: pcre_compile и pcre_exec. Първата поема съставения шаблон от потребителски низов вид и го превръща във вътрешното представяне, което компилатора използва. Втората функция налага шаблона върху тествания низ и връща съвпаденията във вид на масив от вектори, сочещи началните позиции на съвпаденията. Можете да прочетете за функциите в съответните man страници. И най-добре вижте pcredemo.c