В блоге:

2008-10-31

GoogleMaps Location API: общий принцип работы

Просто резюмирую доступную информацию относительно определения положения в мобильной версии GoogleMaps без GPS.

Определение заключается в получении координат по значениям MCC, MNC, LAC и CellID через сервер http://www.google.com/glm/mmap.

MCC - код страны (для России - 250).
MNC - код сети (МТС - 01, Мегафон - 02, Билайн - 99 и т.п.)
LAC - код локальной зоны (т.е. совокупности базовых станций, обслуживаемым одним контроллером)
CellID (CID) - идентификатор, состоит из номеров базовой станции и сектора.

База на сервере динамическая, реально строится и модифицируется по данным, которые предоставляют пользователи мобильной версии GoogleMaps с GPS.

Протокол взаимодействия с сервером Google не разглашает, но его вскрыли. Примеры работы с сервером через этот протокол:
На Python: http://forum.netmonitor.ru/about4470-0-asc-15.html#37336
На Python для S60: http://blog.jebu.net/2008/07/google-cell-tower-mapping-with-python-on-s60/
На C#: http://maps.alphadex.de/datafiles/fct0e1b11782832f02.cs
На Java для Android OS: http://davanum.wordpress.com/2007/12/01/android-much-better-geo-location-from-just-cellidlac/

Этого достаточно для написания собственного кода работы с сервером.

Да, стоит отметить, что ключевыми являются значения LAC и CellID. MCC/MNC важны только при наличии в базе на сервере нескольких значений пар LAC, CellID.

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

Для получения реальных значений поставил на Nokia S60 FieldTest (хакерски довольно). Хотя можно и без этого. Если мобильная версия GoogleMaps умеет на телефоне определять положение без GPS, то можно пойти в "Справку", там вызвать "Общие сведения" и в самом конце информации будет строка вида myl:MCC:MNC:LAC:CellID


2008-10-29

Honda Mercr-v

Народная японская забава:





А это Honda CR-V в мегатюнинге "хочу быть мерседесом".


Изображения из альбомов:

2008-10-27

Эзотерический язык программирования Oroogu

Эзотерических языков программирования существует весьма много. Некоторые из них известны, а некоторые - совсем нет. Один из достаточно полных списков эзотерических языков программирования расположен здесь: http://esolangs.org/wiki/Language_list, там же есть краткие описания.

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

Среди всех языков мне показались интересными языки, построенные на концепции очереди. Основных их нашлось два: Q-BAL и Oroogu. Q-BAL более сложный, а вот Oroogu имеет весьма простой синтаксис. Но Oroogu настолько малоизвестный, что описание пришлось добывать через http://web.archive.org. Там же были добыты примеры и даже исходные тексты (на Си) компилятора. Идея, заложенная в Oroogu мне понравилась, поэтому я решил вкратце рассказать об основных особенностях этого языка.

Итак, язык программирования Oroogu. Автором языка является Georg Kraml, цель создания языка неизвестна. Основными типом данных в Oroogu является очередь. Работа с очередью происходит в обычной манере: можно добавлять элементы в конец очереди, можно извлекать из начала. При этом механизма доступа по индексу к произвольному элементу очереди нет.

Очереди могут включать в себя только целые числа. Точнее говоря, специально для реализации Ninety-Nine Bottles of Beer была добавлена поддержка строк, но в ограниченном виде (нельзя манипулировать содержимым строк).

Конструктор очереди выглядит просто: (1, 3, 5) создает очередь с элементами 1, 3 и 5. Возможно использование оператора .. для заполнения промежуточных значений. Так, например, (1, 3, 5 .. 7) будет содержать целые числа: 1, 3, 5, 6, 7. Этот оператор работает и в сторону уменьшения: (10 .. 1) будет содержать числа в убывающем порядке от 10 до 1 включительно.

В Oroogu есть переменные, но они могут содержать только очереди. Имена переменных не могут начинаться с цифры, длина их не может быть больше 8 символов. Переменные, начинающиеся с букв d и e, имеют особенность: после окончания работы программы их значения будут выданы в stdout и в stderr, соответственно. Переменные не нуждаются в определении.

Выражений в Oroogu не очень много.

Выражение присваивания d = c полностью копирует очередь c и присваивает d. Справа могут быть как переменные, так и конструкторы очереди. Слева допускается указание нескольких переменных через запятую:

var = (1, 2, 3)
i = var
k, m = i


После выполнения все упомянутые переменные (а именно var, i, k, m) будут содержать очереди (1, 2, 3).

Выражение объединения d / c объединяет очереди d и c и результат присваивается d.

var1 = (1, 2, 3)
var2 = (4 .. 6)
var1 / var2


В результате var1 будет содержать (1, 2, 3, 4, 5, 6)

Аналогично оператору присваиванию слева допускается указание нескольких переменных.

Выражение пересечения d \ c удаляет из d элементы c, если они есть.

v \ (2) удаляет 2 из очереди v, если 2 там есть
v \ v полностью очищает очередь v

Доступ к данным очереди и арифметика могут осуществляться только в конструкторе очереди. Доступ к значению из начала очереди осуществляется по имени переменной, в которой эта очередь находится. Запись var извлекает значение из начала очереди var и подставляет его в конструкторе. Запись <var просто подставляет значение из var, не извлекая его из очереди. Из арифметических операций поддерживаются традиционные +, -, /, * и оператор возведения в степень ** и оператор остатка от деления (либо %, либо mod - в разных документацих Oroogu указаны разные варианты).

(1, 2, 1 + 2) определяет очередь со значениям 1, 2, 3.

var = (1, 2, 3)
i = (var - 1, <var, var)


В результате var будет (3), а i - (0, 2, 2).

Стоит отметить, что выражения var = f и var = (f) имеют разный смысл. Первое выражение создает полную копию f, а второе выражение - извлекает из f первый элемент, который будет единственным значением очереди i.

В Oroogu нет оператора if в явном виде, но есть условный цикл. Он состоит из двух выражений, записанных подряд. Первое выражение - это заголовок цикла, а второе выражение - это тело цикло, причем тело цикла пишется обязательно в скобках, но может включать в себя несколько выражений.

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

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

Пример: i = (1..100) (dump / (<i * i)) собирает в переменной dump квадраты чисел от 1 до 100 включительно, после завершения программы dump (поскольку начинается с буквы d) будет выведен в stdout.

Заголовок цикла i = (1..100) присваивает переменной i очередь, содержащую значения от 1 до 100 включительно. Эта же очередь и будет очередью заголовка цикла. Поскольку первоначально она содержит элементы, то выполняется тело цикла: (dump / (<i * i)). В теле цикла (<i * i) берется значение из начала i, но без извлечения его из очереди, затем берется опять это же значение, но с извлечением. Эти значения (а они равны) перемножаются. Затем dump объединяется с получившейся очередью из одного элемента. Поскольку в теле цикла есть извлечение из очереди i, то цикл конечный. Он пройдет по всем значениям i от 1 до 100, после чего завершится.

Таковы вкратце основные конструкции. Еще стоит отметить, что в Oroogu нет функций, но есть возможность включать куски кода на стадии компиляции из файла.

Важным является то, что язык Oroogu является полным по Тьюрингу. Автор языка доказывает это неформально через сравнение с Т-полным языкомFloop.

Еще примеры.

Вывод Hello, world!:
d / ("Hello, world!")

К очереди d добавляется строка "Hello, world!", после завершения работы значение очереди d выводится в stdout, поскольку имя начинается с буквы d.

Вывод первых 10 чисел Фибоначчи:
buf = (0, 1)
i = (1 .. 10) (d, buf / (buf + <buf) null = (i))


Первоначально buf содержит очередь (0, 1). Затем организуется цикл. В заголовке цикла определяется очередь i, которая первоначально будет содержать значения от 1 до 10 включительно.
В теле цикла конструкция (buf + <buf) извлекает из buf значение и прибавляет к нему следующее значение из buf (но уже не извлекая его). Получившаяся очередь из одного элемента добавляется к очередям d и buf. Выражение null = (i) служит для простого извлечения значения из очереди i (тем самым исключая зацикливание и организуя 10-кратное выполнение тела цикла).
Таким образом, в d накапливается результат (все подсчитанные числа Фибоначчи), а в buf всегда держатся два значения, второе из которых - это последнее подсчитанное на данной итерации число Фибоначчи, а первое - предыдущее значение, точнее значение, которое будет использовано для вычисления следующего числа Фибоначчи.

Не совсем корректный вариант "Ninety-nine Bottles of Beer":
b = (99 .. 1)
(
d / (<b, "bottles of beer on the wall, ")
d / (<b, "bottles of beer.\n")
d / ("Take one down and pass it around, ")
d / (b - 1, "bottles of beer.\n\n")
)


Простой пример, в котором организуется цикл по перебору значений от 99 до 1 включительно. В теле цикла несколько раз используется первое значение из b без извлечения (конструкция <b), а затем под завершение тела цикла первое значение извлекается для организации последовательного прохождения по всем значениям b. Особенностью этого примера является разве что использование строк.

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

2008-10-26

Народное творчество: Бу Гага

Сегодня видел, как ушлая молодежь из дорожного знака "Бульвар Гагарина" путем замазывания букв сделала надпись "Бу Гага".

2008-10-23

Путепровод на M55 (станция "Глубокая")

Хорошая новость: на федеральной дороге М55 открыли путепровод через Ж/д пути в районе станции "Глубокая" взамен старого переезда.

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

Теперь дорога стала быстрее и безопаснее, чем я рад.

2008-10-22

Восстановление флешки Transcend V10 на 16ГБ

Флэшка Transcend V10 на 16ГБ сказал привет и отказалась работать.

Попытки реанимировать при помощи AlcorMP приводили к ошибке 30700. Пришлось задать в настройках AlcorMP руками одноканальный режим. Низкоуровневый формат прошел, но, естественно, осталось только 8ГБ.

Но хоть это, ибо гарантийный талон валяется неизвестно где.

2008-10-19

Гугл замахивается на форумы?

Заметил, что в результатах поиска google стал для ссылок, ведущих на форумы, показывать дополнительную информацию.

Например: "Сообщений: <количество>", "Авторов: <количество>", "Последнее сообщение: <дата>". Возможно такое уже давно, но заметил только сейчас.

Т.е. явно идет обработка информации с форумов с учетом структуры сообщений. Увидим, чем это грозит в дальнейшем. Как для ищущих, так и для владельцев форумов.

2008-10-18

Немного историческое (цены сотовых телефонов 2000-2001)

Нашел "прайс-лист" сотовых телефонов одной иркутской фирмы. Год примерно 2000-2001.







Изображения из альбомов:

2008-10-17

Устаревший термин "Автомагнитол"

Вообще, конечно, автомагнитол (т.е. умеющих работать с аудиокассетами) сейчас конечно осталось не так много, а среди новых - совсем мало. Но по привычке все равно хочется называть эти агрегаты автомагнитолами. Можно называть их более правильно или общим термином "головное устройство". Или уточненным "CD/DVD/MP3-ресивер", но, как говорится, "привычка - не рукавичка..."

2008-10-16

Магнитола Sanyo: установка времени (через кнопку DISP)

Просто памятка: на некоторых двухдиновых "автомагнитолах" Sanyo время настраивается через DISP+"громкость вверх" и DISP+"громкость вниз". Кое-как нашел комбинацию без документации.

2008-10-15

Effective Java, Second Edition

Книга "Effective Java, Second Edition" от Joshua Bloch. Оформлена в виде набора советов, объединенных по темам. Отражает современное состояние Java, т.е. используются enum, аннотации, generics. Ни в кое мере не является заменителем документации: бОльший упор на концепцию использования тех или иных конструкций.

Книга полезная, хотя и написана несколько занудновато. Чайникам читать будет сложновато, поскольку требует наличия определенного опыта. Профессионалам читать будет скучно, поскольку многие вещи покажется банальными, хотя, скорее всего, полезные вещи они для себя найдут. Наиболее полезно, как мне, кажется, людям, которые уже накопили опыт, но пока еще не имеют четко установившегося стиля программирования на Java.

В целом книга хорошая.

2008-10-14

"Конструкторы": пошлина на кузов

==
Постановление от 10 октября 2008 г. N 745 О временной ставке ввозной таможенной пошлины в отношении кузовов отдельных видов транспортных средств

Правительство Российской Федерации постановляет:
1. Утвердить сроком на 9 месяцев ставку ввозной таможенной пошлины на кузова для транспортных средств товарной позиции 8703, прочие (код ТН ВЭД России 8707 10 900 0), содержащиеся в Товарной номенклатуре внешнеэкономической деятельности Российской Федерации, утвержденной постановлением Правительства Российской Федерации от 27 ноября 2006 г. # 718 "О Таможенном тарифе Российской Федерации и товарной номенклатуре, применяемой при осуществлении внешнеэкономической деятельности", в размере, равном 15 процентам таможенной стоимости, но не менее 5000 евро за 1 штуку.
Для целей применения ставки ввозной таможенной пошлины товары определяются исключительно кодом ТН ВЭД России, наименование товаров приведено только для удобства пользования.
2. Установить, что действие пункта 2 постановления Правительства Российской Федерации от 22 октября 1997 г. # 1347 "Вопросы таможенно-тарифной политики" не распространяется на ставку ввозной таможенной пошлины, утвержденную настоящим постановлением.
3. Настоящее постановление вступает в силу по истечении одного месяца со дня его официального опубликования.
http://www.government.ru/content/governmentactivity/rfgovernmentdecisions/archive/2008/10/10/6345332.htm
===

"Конструкторам" привет!

2008-10-09

LPD: Midland GTX500

Обзавелся наконец-то LPD-радиостанциями (LPD - это маломощные станции на 433МГц). Модель: Midland GTX500. Интересно, что продавцы активно взамен "впаривают" G7, вроде как продолжение GTX400, но с поддержкой еще PMR.

С родными аккумуляторами решил не связываться, практичнее использовать AA-аккумуляторы. Но вылез интересный момент. Как оказалось, комплект Ansmann Photo 2400 очень заметно проигрывает по времени работы какому-то дешевому Samsung 2100, хотя покупались они пару лет назад одновременно. Что-то сильно стали AA-аккумуляторы Sanyo и Ansmann разочаровывать.


Еще по этой теме:

Рейка хайджека вместо рычага

Человек выехал на Suzuki Jimny в бревно, сломал продольный рычаг (фиксирующий передний мост от продольных перемещений). Вместо рычага приколхозили рейку от домкрата ХайДжек и поехали дальше. http://www.suzuki-club.ru/forum/showpost.php?p=396396&postcount=1 (с фото)

Отлично, я считаю.



Еще по этой теме:

2008-10-08

Подсветка домена в адресной строке (для Firefox)

Если нравится способ показа адреса в адресной строке Google Chrome с выделением домена черным цветом, а остальных частей URL - серым, то для Firefox есть соответствующий адд-он: https://addons.mozilla.org/en-US/firefox/addon/4014

По умолчанию он, правда, поддомены показывает серым, но это в настройках отключается. Есть и пара дополнительных вещей (переход по части адреса).

Asus Eee PC 900: качество корпуса, сравнил с 901

Все таки корпус Eee PC 900 явно менее практичный, чем 701 из-за своей блестючести. Всего-то ничего использовал, а уже заметные потертости на крышке и аккумуляторе. На 701 был более матовый и устойчивый к потертостям корпус.

Посмотрел живьем Eee PC 901. Настораживает еще большие, чем у 900 размеры. Особенно заметно, если сравнить с 701. 901 какой-то весь пухлый. А так нормально. Очень уж хочется продолжительного времени работы, 701 и 900 в этом плане совсем уж слабые.

Еще посмотрел Acer Aspire One 8.9". Вообще не понравился. Здоровый, с бликующим (в соответствии с современным тенденциями) экраном, да еще и Acer. Вычеркиваем.


Еще по этой теме:

2008-10-05

GlobalSat BT-359: проблемы продолжаются, сервис GPSHome

Пользуюсь bluetooth gps-приемником GlobalSat BT-359, но его работа в последнее время не очень нравится. В основном претензии к холодному старту. Очень медленный и ненадёжный старт. Если делать холодный старт при движении, то задержка определения координат может достигать многих десятков минут, а в отдельных случаях вообще не получается определить координаты даже через очень долгое время ожидания. Такое чувство, что прибор сходит с ума и замыкается в себе. Иногда помогает вытаскивание аккумулятора на время. И вообще, ощущение, что сильно упала чувствительность. Иногда в весьма тепличных условиях видит от силы 3 спутника. Не очень нравится такое поведение.


Полез я на сайт globalsat в поиска полезной информации по этому вопросу. Ничего полезного не нашел, но наткнулся на их сервис GPSHome. Фактически, это сервис поддержки их GPRS/GPS трекеров TR-серии, но дается возможность потестировать в связке мобильный телефон с GPRS + bluetooth GPS-приемник при помощи Java ME программки.

Вообще, подобных сервисов довольно много, но посмотреть этот сервис было тоже интересно.

Java ME программа довольно простая и дубовая. Ничего не умеет кроме показа основных данных и передачи их на сервер. Увы, оказалось, что наименьший период передачи данных - 30 секунд. Многовато для отдельных задач. Зато данных передается довольно мало, экономится трафик. В автоматическим режиме, конечно, оставлять эту Java ME программу работать ненадежно, даже если решить проблему с питанием телефона и GPS-приемника.

Веб-интерфейс просмотра данных тоже простой. Фактически используются google maps карты и спутниковые снимки с наложением поверх данных: либо последнего положения, либо записанных треков (с выбором временного промежутка). Для треков выводятся точки с возможность просмотра кратких данных по ним (время, скорость).

Для трекеров есть поддержка управления через SMS, через некий "конструктор SMS", но проверить не удалось.

Какие-то выводы делать не буду, в основном GPRS/GPS трекеры мне интересны в применении к автоохранным системам, а здесь довольно простая обычная система. Да и проверять надо с их TR-трекерами, а не на суррогате в виде мобильного телефона.

2008-10-01

Asus Eee PC 900: саморазряд и нагрев

Что на 701, что на 900 Asus Eee PC зверский разряд аккумулятора в выключенном состоянии. Примерно за одну-две недели садится в ноль, и Eee PC не может даже включится.

Это первое.

А второе, замечаешь после долгого неиспользования Eee PC 701/900, что корпус довольно ощутимо греется во время работы. Все таки мобильный целерон та еще гадость.

И вообще, хочется трекпоинт на такой мелком ноутбуке, а не тачпад.


Еще по этой теме:

Blog Archive