Friday, October 25, 2013

Свободная модель мира

Продукт позволяющий создавать 3d карту мира (аналогичный Google Street View или другим подобным продуктам других компаний), но построенный на принципах OpenStreetMap, когда изменять карту может каждый желающий и может при желании создать свой сервис основываясь на исходных кодах этого продукта, может иметь успех из-за таких достоинств:
  • упрощение навигации в местах которые мало интересны крупным компаниям и интересны волонтерам;
  • навигация с изображением, что предполагается увидеть проще, чем плоская карта с ориентацией по компасу и особенностям расположения дороги;
  • расширения возможностей продуктов 'дополненной реальности' картинку с таких устройств можно анализировать на подобность уже существующим в базе изображений с уточнение координат в условиях недостаточной точности GPS c сохранением этих изображений на основном сервисе для уточнения информации и построение более точной модели. Или иными словами - снимается текущая картинка и вместе с текущими примерными координатами отправляется на сервис - там ищется подобная картинка и уточняется точное направление взгляда относительно карты - эти данные передаются обратно и показывается более точное направление движения, чем достигается более точная навигации по абстрактной пересеченной местности - где две дорожки ведущих примерно в том же направлении или находящиеся близко могут вести в различные места с различными условиями передвижения, что важно при езде на велосипеде или пеших походов - где размер дорожки может быть гораздо меньше чем при езде на автомобиле по городу / трассе, когда расстояние между дорожками минимум сравнимо с десятками метров и ошибка в несколько десятков метров не страшна;
  • как исходные данные можно использовать уже снятые фотографии с гео-тегами, или что даст более точную информацию видео с видео регистраторов или action камер с дополнительными треками положений. Использование продуктов дополненной реальности носимых на голове и закрывающий часть обзора скорее всего будет не удобно так как будет только отвлекать при активных перемещениях.
  • подобную систему можно также использовать для виртуальных экскурсий походов по удаленных или по каким-то причинам не доступным местам. Или создания реалистичных видео игр на основе реальных мест;
  • возможность иметь собственный клон сервиса с собственными данными.

Проблемы данного сервиса подобны проблемам игр с масштабными пространствами и картографических сервисов:
  • удобный формат хранения данных с возможностью четкой привязки к местности и достаточной точностью создания объектов;
  • возможность быстрого отсечения не видимых или не значимых на данной увеличении позиции объектов;
  • большие объёмы хранимой информации;
  • отображение на конечном устройстве: различные виды устройств и не полная поддержка WebGL на устройствах;
  • большой объем информации при передаче на устройство;
  • математическая сложность преобразования изображений в 3d модель;
  • преобразование видео сводиться к предыдущему пункту, но имеет один побочный эффект при качественном преобразовании можно в результате получить новое видео с улучшенным качеством изображения и новый формат видео базирующийся на описании позиции наблюдателя и расположения 3d моделей, где отдаленный объекты если в видео встречается этот объект ближе с большим разрешением или качеством, по всему видео будет обладать этими же качествами, что может несколько улучшить качество визуального восприятия;
  • сложность создания моделей объектов что изменяются или изменяют свою позиции между кадрами.

Sunday, October 20, 2013

Уменьшение нагрузки на оптимизирующий прокси

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

Сервер может поступить после этого следующим образом: 
  • вернуть запрашиваемый контент, если он не превышает лимит на передачу данных;
  • вернуть заголовки о том, что контент не изменился; 
  • вернуть возможные зеркала. 


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

Sunday, September 8, 2013

Gnome shell и клавиатура

В новом гноме отключили возможность менять язык по shift + ctrl, теперь нельзя выбрать такую комбинацию. Чтобы ее установить нужно выполнить:
gsettings set org.gnome.settings-daemon.peripherals.keyboard input-sources-switcher ctrl-shift-l 

Saturday, September 7, 2013

Radeon DPM (Linux 3.11)

В последнем релизе ядра появилась переработанная система управления питанием видеокарт radeon.

Что бы протестировать ее нужно:
  1. загрузить последнее ядро отсюда;
  2. обновить файлы прошивок отсюда, в принципе не обязательно на следующих этапах можно обновить из отдельного репозитория, но я делал в таком порядке;
  3. добавить магическую комбинацию в grub radeon.dpm=1
  4. обновить месу если есть желание из отдельного репозитория
Что это дает:
  • автоматическое управление питанием:
    echo {auto, high} > /sys/class/drm/card0/device/power_dpm_force_performance_level
    Старая комбинация может уже не работать так как поменялся метод power_method.
  • можно посмотреть текущее состояние:
    cat /sys/kernel/debug/dri/64/radeon_pm_info
  • получить двукратное увеличение количества кадров в играх;
  • много положительных или не очень эмоций уж как повезет.



Tuesday, August 27, 2013

Почти идеальный виртуальный CDN

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

Вот несколько неплохих характеристик виртуального CDN:
  • быть посредником между сайтом и конечным пользователем и перепроверять контент, который возвращает сайт пользователю, а действительно ли он поменялся? как поменялся? а можно немного раньше его перезапросить? Может пользователю захочется его загрузить? И заменять все заголовки на правильные полностью зависящие от результата и заголовков клиента;
  • выдавать правильный хеш от контента с адресом куда можно еще обратится про этот хеш;
  • эта отдельная часть может быть как внутри этого посредника, так и дублироваться на клиенте, где указывается хеш контента, откуда он получен и где еще можно поискать;
  • выдавать из каких частей состоит результат, может нам не нужны полный результат, а только его часть, так как все остальное у нас уже есть или у кого-то поближе.

И как результат не весь контент грузится с одного сайта, можно по заголовкам понять может мы это уже откуда-то грузили или можно параллельно погрузить.

Friday, August 23, 2013

Фасеточные фонари

Идея навеяна системой используемой в машинах выше среднего класса когда отражатель вместе с фарой поворачивается чтобы осветить нужные участки дороги и сдвигать луч чтобы не слепить встречные авто или немного сдвигать луч при повороте.

Этого же можно добиться заменив в стандартных фарах лампочки или другой излучающий элемент такую конструкцию:
  1. на излучатель виде фасеточного глаза насекомых, содержащего несколько светодиодов с собственными линзами с отдельным управлением каждым светоизлучающим элементом, что позволит освещать только участки и чем на больше количество зон разбиты такие излучатели тем точнее можно регулировать освещённость. Обратную часть излучателя можно сделать не управляемым или просто обеспечивающим не сфокусированный ближний свет, так как они будут использоваться через отражатель плюс линзы на передней части. Но также нужно учитывать ограничение стандартное оптики фары когда невозможно регулировать полное направление света из-за использования дополнительных линзовых элементов на стекле фары заднего отражателя. Задний отражатель используемый в фарах можно не брать во внимание так как отбивает только обратный свет;
  2. две инфракрасные камеры(по возможности);
  3. одну обычную.

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

Использование не полного комплекта:
  • Можно использовать обычную камеру плюс фасеточные излучатели без объёмного датчика для получения примерно равномерного освещения. Объёмный датчик только дает возможность регулировать освещённость для удаленных объектов с повышением их освещённости и минимальную освещённость как ближний свет для прилежащих, также эти датчики можно использовать для того чтобы снизить скорость перед препятствием.
  • Без обычной камеры мы не можем определить общую освещённость и как следствие учесть другое внешнее освещение.

Основное достоинство такой системы отсутствие двигающихся частей и не нужны датчики положения.

Wednesday, August 21, 2013

Память

Управление памятью всегда является компромиссом между выделением памяти под все объекты с минимизацией изменения в виде cow принципа, что позволяет максимальное не блокируемое взаимодействие потоков с общей памятью и минимизацией утечек памяти. COW подход используется в языках с передачей сообщений и очень легковесными потоками - что позволит получить высокую производительность. Но память не освобождается в таких случаях до полного завершения всех процессов, потенциально имеющих возможность обратится к этой памяти, и нет возможности произвести утряску памяти без остановки всех процессов.

Для минимизации случаев, когда память уже не используется, но она освобождалась не в том порядке как выделялась, что часто бывает, так как память под результат выделяется в конце выполнения подпрограммы. Идея в том чтобы перед выполнением запомнить состояние выделения память или передать в функцию, перед окончанием выполнения, указатели на выделенные в ходе исполнения данные и переместить результат как можно ближе к предыдущей границе выделения памяти как было перед запуском под программы. Это позволяет более экономно использовать память, как пример с минимальными изменениями текущей логики выделения вызвать realloc для результата после освобождения всех ненужных объектов из памяти, что бы она пыталась переместить данные ближе к предыдущей границе (возможно, это потребует изменить внутреннюю семантику функции, так как возможно если памяти достаточно функции реального перемещения не выполняет), также это поможет, если использовалось динамическое увеличение буфера для работы при котором всегда при нехватке памяти выделялось в два раза больше, чем нужно для работы. Такая простая утряска решит проблему когда из-за большого количества повторных выделений и перемещений у нас память занята меленькими не занятыми областями, а результат далеко расположен по сравнению с изначальным выделением.