Thursday, October 25, 2012

CDN, безопасность

​Продолжение предыдущего поста.
Для обеспечения возможности безопасной работы нужно обеспечить возможность подписывания пакетов ключом и размещения узла, обеспечивающего взаимосвязь классический протокол - пириговая сеть, в подконтрольном базовому сайту узле с возможностью иметь два канала: 
  • первый непосредственный для связи с базовым узлом. Максимально защищенный с возможность проверки корректности, этот канал необходим для передачи ключей и других данных для проверки и преобразования классический url в хеши;
  • и второй канал для передачи данных - полностью открытый, но можно проверить целостность пакетов по информации с первого канала.

Tuesday, October 23, 2012

​CDN, общие идеи

Это описание абстрактной реализации, 
не имеющей ничего общего с реальными реализациями.

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


Общая логика работы: 
  • при получения запроса от клиента ближайший узел к клиенту ищет сервер который является наиболее близким к исходному узлу назначения; 
  • после нахождения наилучшего пути, узел с первого уровня получает контент с конечного узла и генерирует хеш от данных и другие идентифицирующие контент данные и передает на третий уровень; 
  • если у третьего уровня нет подобных данных он запрашивает данные с первого уровня, через второй уровень который может быть пиринговой сетью; 
  • все данные при передаче должны быть сжаты и по возможности очищены от не критичных для результата данных, таких как переводы строчек и пробелы. Если возможно то и от описания изображений вида даты создания которые не критичны для пользователя; 
  • внутри сети передачи и на конечных узлах данных идентифицируются по описателям характерным для сжатого контента с сохранением изначальных характеристик - для последующей идентификации изменения исходных данных; 
  • на узлах первого уровня контент хранится также в исходном в виде - чтобы избежать вероятности коллизий хеш функции и позволяет перепроверять данные, при последующем получении подобных; 
  • при новом запросе клиента - делается только дополнительный запрос на первый уровень и если изменений нет, то передается оригинальный заголовок. Данные разбиваются на две части заголовки запроса и контент запроса. Что позволяет кешировать и передавать их отдельно. 

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

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

Thursday, October 11, 2012

CDN

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

Wednesday, October 3, 2012

Android прошивки

​Существуют общность возможно даже недостаток прошивок Android и стабильных версий дистрибутивов и в общем-то любых прошивок - используются старые версии библиотек. Но все же ближе к обычным прошивкам - так как после релиза не вносятся изменения в базовые компоненты. Возможно, что версия библиотек определяется как последняя стабильная версия на момент начала разработок, и основные изменения вносятся только во внутренние части продуктов, разрабатываемых внутри компании и как следствие представляющие наибольший интерес для компании разработчика.
Было бы удобно, если бы бекпортировали изменения в ядре и библиотеках связанных с безопасностью openssl, openvpn и тому подобное. И обновляли все библиотеки у которых не меняется внешний интерфейс, например libxml и bash и sudo. И прошивка для телефонов поддерживающих по каким-то причинам только версию 2.3.* с обновленными ssl библиотеками и браузером, была достаточно полезна. Так же было бы не неплохо иметь возможность устанавливать и обновлять все пользовательские приложения не относящиеся к базовой функциональности в виде пакетов, например обновлять браузер(не html движок)и телефонное приложение, а в базовой обновляющееся только с прошивкой: сервисы, виртуальная машина и все остальные части в отдельном обновляемом разделе, который можно перекрывать как сейчас, когда обновленные версии хранятся в отдельном разделе.
Результатом моей попытки по обновления компонентов которые собираются без проблем со старым abi без изменений в критических компонентах к которым привязаны бинарные библиотеки для поддержки аппаратуры можно посмотреть сдесь.

Saturday, August 18, 2012

iOS и Android


IPhone все же лучше чем Android, из-за дикого разнообразия устройств, даже если не учитывать разнообразие версий Apple очень строго контролирует свою экосистему, и новые устройства хоть и отстают технически по объему памяти и мощности процессора - всегда имеют четко продуманный дизайн и отличный экран и камеру. Благодаря строгому ограничению мощности и компиляции под аппаратуру в бинарном виде и попыткам исключить любые интерпретаторы и бессмысленное выполнение в фоне, они получили продукт который в основном не вызывает недовольства у пользователя своей заторможенностью, имея при этом далеко не передовые аппаратные средства. 

В Android выбран режим виртуальной машины широко распространенного языка Java что конечно дало возможность получить большое количество разработчиков, но добавило проблем с лицензией на использование и патентами на реализацию, которая внутренно не совместимо с изначальной реализацией виртуальной машины. Выбрав как язык виртуальной машины python или другой подобный язык удалось бы возможно избежать некоторых проблем с лицензией, но все-же не решило всех проблем - так лицензионное разбирательство происходило не столько из-за использования языка сколько из-за вопроса реализации виртуальной машины. И никто не может сказать чтобы было выбери они другое решение. А тихое ожидание и скрытые проблемы с лицензиями и патентами только вредят продукту- зная что именно нарушено в 235 патентах, можно реализовать по другому функциональность или добиться решения о аннулировании патентов. И если продолжаются скрытые соглашения о крослицензировании для OpenSourse проекта, разработчиком может не захочется открывать/ сообщать о своих улучшениях, если в какой-то момент окажется, что ты не можешь использовать свои наработки и вынужден за них кому-то платить. 

Благодаря этому продукту Linux смог получить большой рынок и выйти за приделы серверов и встраиваемой техники, что конечно большой плюс. И если добавить возможность принудительного ухода в спящий режим и возможность сохранения состояния программы по запросу от системы - в режиме слушаем фоновую музыку и открыт только текстовый редактор- мы получим громадное сокращение потребления энергии, так как проигрыватель может сохранить состояние своего интерфейсного окна и оставить рабочим только звуковой модуль, также как тестовый редактор может сохранить состояние других документов и только оставить рабочим модуль с текущим документом, или вообще выгрузится полностью. Но как я знаю ни Gtk ни qt - не поддерживают сигнал на сохранение состояния ни на восстановление оного. Подразумевается именно событие на сохранение, а не обычный сигнал закрытия окна. 

P.S.: Я не владелец iPhone. Поэтому мое мнение сугубо субъективное.

Saturday, August 11, 2012

Samsung ML-1861

Очень хороший достаточно быстрый принтер, но имеет одно неудобство, для его поддержки в  Linux нужно поставить универсальный драйвера Samsung, которые не имеют исходников. Если его не установить (или opensource аналог о котором пойдет дальше речь), то в Ubuntu 12.04 будет установлен драйвер для ML-1750 и при попытке напечатать что либо - печаталась страница:
position: 0x0(0)
system: h6fw_5.49/xl_op
line:180
Version: SPL 5.49 10-20-2010
Сообщая, что переданный документ не соответствуют формату и нужно использовать другую версию языка описания страниц SPL.

Свободной реализацией этого языка занимался проект SPLIX, который является проектом по реверс инжинирингу этого языка и достиг значительных успехов в поддержке принтеров, но вот уже долгое время не развивается и о новых принтерах ничего не знает. Именно через него происходит вывод на печать в Ubuntu, но так как выбрана не правильная версия драйвера - используется не правильная версия языка. Для решения этой проблемы нужно зайти на CUPS и поменять драйвер на принтер о котором бы знали драйвера, как о поддерживающем именно эту версию языка, Samsung CLP-310, правда он цветной, но нам никто не мешает его использовать для черно-белой печати. (Возможно нужно кроме cups доставить splix.)

Шаги установки для проверки работоспособности:
  • Ставить бинарные драйвера с сайта samsung не нужно, все и так работает и обновляется вместе с системой.
  • Проверить установлен ли cups(можно через dpkg-query -l или synaptic), если нет устанавливаем через sudo apt-get install cups
  • Установить драйвера для поддержки языка разметки понимаемого принтером через sudo apt-get install printer-driver-splix
  • Зайти на CUPS (http://localhost:631/admin), и добавить новый принтер выбрав как модель Samsung CLP-310. (Administration->Add printer -> выбрать принтер подключенный по usb)
  • Попробовать напечатать что-нибудь и узнать поняли ли друг друга принтер с компьютером.

Sunday, August 5, 2012

Желания и мечты

​Не все желания выполнимы, после того как google официально объявило, что больше не будет поддерживать nexus one он же htc desire, htc объявило что запланированное обновление для desire hd тоже не выйдет - оно планировалось на июль-август - о чём как раз и было объявлено под конец этого срока. Пользователи уже создали петицию с просьбой выпустить еcли не полное обновление - то хотя бы код ядра и драйвера. В общем именно то чего не хватает альтернативным прошивкам для работы. С остальными устройствами в общем-то та же история - в основном прошивки сейчас есть только для последних устройств идущих с новым андроидом. Что будет с остальными устройствами не понятно, часть будет уже сейчас официально не поддерживаться в cyanogenmod 9+ версии, как не удовлетворяющая минимальным требованиям для андроида, так как на этих устройствах скорее всего будет проблемы с новыми приложениями рассчитанными на большие аппаратные возможности, и чтобы не создавать продукт которые вызовет только рост недовольных отзывов - решили официально не поддерживать. Относительно устройств которые удовлетворяют этим требованиям, но компании производители не хотят по своим внутренним причинам выпускать обновление прошивок, ответ похоже скорее всего - возможно, если смогут портировать драйвера с других устройств или через какие-то дополнительные абстракции, чтобы работали старые драйвера. Что в общем-то близко, но всё же отличается от обычных дистрибутивов линукса, где с большой вероятностью пользовательские устройства с более менее широкой распространённостью все же с большой вероятностью поддерживаются. Ноутбуки все же в большой степени остаются функциональными из-за широкой общности устройств и использования для удобства пользователя различных ухищрений с возможностью автоматической настройки устройств(USB, Plug and Play) - и скорее всего устройство как-то себе идентифицирует при загрузке, но всё же остаются различные проблемы вида сложностей обновления прошивок, так как производители не сообщают спецификацию и эта процедура может сильно отличаться между моделями, а может и нет - так как для прошивки используются приложения поставляемые производителем BIOS, а не устройства. Но всё же полной спецификации нет и CoreBoot может использоваться не на всех устройствах. Также есть проблемы когда производитель не поставляет драйвера или не обновляет их под новые ядра - но в основном это решается если устройство популярно.

Tuesday, July 17, 2012

DSL-модем

История мелкого разбора протокола

Решил немного проверить свои знания Linux/GNU философии. По идее все что создано руками человека может быть другим человеком понято и изменено, не будем рассматривать вариант разрушено, оставим на волю природы разрушать и очищать от неудачных творений человеческой разумности. И так есть устройство гордо именуемое как ADSL роутер обладающее очень важной особенностью признанной людьми в развитых странах осуществлять важнейшую потребность людей в глобальной общении и обладающий гигантским недостатком это изобретено не нами, нужно обязательно изучить и понять как же оно работает и восполнить жажду новой интересной, но совершенно не нужной информацией. Оно базируется на разработках которые вот уже лет десять воплощаются в серии устройство состоящих из множества интересных возможностей и технологий созданных на базе RISC архитектуры используемой во многих высокопроизводительных компьютерах.

Устройство содержит созданный на базе референсного дизайна adsl модема содержащего процессор с поддержкой usb, pci, rs232 портов, jtag дебаг интерфейсом, eth/wlan сетевым интерфейсом, adsl/vdsl модемами(отдельный DSP процессор). Система обычно содержит, если судить по известной мне информации вне процессора дополнительные сетевой маршрутизатор на 4 порта, внешний wifi модуль того-же производителя и дополнительный логику преобразования сигналов для dsl(ADSL2+ 5V Line Driver - похоже на каку-то трансформаторную развязку). Производители модемов в разной степени меняют эту реализации под свои нужды - но без значительны изменений между моделями различных производителей, и прошивку от одного модема при желании можно поставить на другой. Состав поддерживаемых интерфейсов/реализация элементов(внутри основного чипа/вне) изменяется между сериями, но тоже не значительно - в основном, как обычно, по пути расположения в основной чипе всей логики.

Из этого списка компонентов только dsl интерфейс не поддерживаться сторонними прошивками остальные части достаточно стандартные и благодаря открытой документации или реверс-инженерингу поддерживаются. Основным недостатком является отсутствие существенных обновлений прошивки даже самые новые прошивки одного производителя используют ядро 2.6.9 и для сборки требуют старые дистрибутивы (на fedora 9 - можно собирать DSL-2650U, 2640 - RedHat 9.0).

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

Но сначала нужно посмотреть что происходит на реальном оборудовании, когда мы пытаемся получить информацию о соединении, для случая с модема с usb это просто - на флешку отформатированую в fat32 скидываем откомпилированый strace и смотрим что происходит. strace выводит что adslcrl открывает файл устройства со стандартными флагами без каких-то нестандартных особенностей открытия и через ioctl передает первым параметром какую-то магическую константу, вторым параметром что-то похожее на адрес. Ничего туда не пишет и не читает. Делаем несколько запусков и убеждаемся что он всегда делает одни и те же действия с одинаковой константой и близкими значениями адреса.

Дальше мы уже можем переключиться на эмулятор чтобы получить больше подробностей.

Непосредственно брать образ файловой системы из образа прошивки не нужно - формат опять таки закрытый, но есть частичная документация получения реверс-инженерингом, можно поступить проще и взять этот образ из дерева исходных кодов при сборке. Он представляет собой обычный образ сжатой файловой системы Squashfs(targets/DSL-2650U/rootfs.img) старой версии(version 2.0) поэтому непосредственно открыть на новых дистрибутивах его нельзя, они уже эту версию не поддерживают - поэтому нужно создать образ с использованием более распространенной файловой системы:

  1. dd if=/dev/zero of=empty.img count=32768 
  2. mkfs.ext3 empty.img 

и перенести на нее содержимое первого образа. В этот образ уже можно добавлять нужные нам дополнительный средства busybox нужной нам версии с включенной поддержкой всех команд и strace и т.д. в общем все что захочется.

Далее качаем, если еще этого не сделали образ дебиана для mips мальта. И запускаем с нашим новым пользовательским окружением.

Если почитать блог можно подтвердить предположение, что для других модемов тоже используется магическая константа и адрес. Значит нужно создать модуль для того чтобы посмотреть что же все-же передается. В ранее указанном блоге делается подмена системных функций - более похожая на создании вируса c сокрытием процессов. Проще создать модуль который будет выдавать все что ему приходит и пробует вернуть похожее на реальный ответ назад. В ранее указанном блоге используется дамп 256 байт области переданной как второй параметр. Дампим пока этот объем - и видим что по этому адресу расположены выравненные по слову числа похожие на 3 адреса и пара констант. Далее пишем программу которая создает такой буфер с тремя выделениями памяти и смотрим, что записалось по этим адресам, если запустить программу на реальном оборудовании - сначала ставим размер буферов в 256 байт - видим что память по всем адресам изменилась, память выделенная под входные параметры не изменилась. Пробуем увеличивать размеры буферов до 512, 1024, 2048 - видим что значения записываемые модулем ядра на реальном оборудовании не влазят в буферы меньше 2k байт - похоже нужно использовать буферы в 2048. И сделав так видим что заполняется только первый буфер и так как мы используем выделение данных в куче адреса у нас немного отличаются от оригинальной программы. Поэтому предполагаем что она выделяет память в стеке, и мы просто видим дамп стека.

Далее инициализируем память для первого буфера в 0, смотрим на дамп, инициализируем в -1 смотрим в дамп и видим что в реальности меняется только примерно 1.5k байт, можем предположить, что это и есть реальный размер. Смотрим в дамп переданных ядру данных, и видим что одна константа совпадает с полученным размером, можно предположить, что именно так передается размер выделенной памяти. Уменьшаем размер передаваемых данных до 0x20 и видим что ничего не поменялось - можно предположить что это есть примерный размер входного буфера.

Меняем наш модуль чтобы он выдал этот массив, пробуем в эмуляторе наша программа работает, но оригинальная программа все равно пишет, что что-то не так. Похоже в выданных данных должна быть какая-то зависимость от входных данных или состояния системы - логику я пока не уловил. Но какую-то статистику получить из полученных нами данных можно, так как в этом буфере есть числа совпадающее со статистикой, значит программу для получения данных использовать можно. А модуль пока не может выполнять роль проверки что эти числа значат в выходном дампе(если подсовывать измененные числа и смотреть что изменилось в в выводе).

Это конечно нас не приблизило к осознанию как все работает, так как это протокол проприетарный и скорее всего может меняться в зависимости от прошивки/модели. Более перспективным является понимание как оно внутри работает, а у нас получился шаг в строну - но все же позволяющий потренироваться на простых вещах.

Sunday, June 3, 2012

Qemu и сеть(tap)

По умолчанию qemu создает свою виртуальную сеть(SLIRP) до которой не возможно достучаться извне, что очень удобно так как не требует повышенных привилегий.

Если нужен доступ внешней сети можно использовать Tap вариант - при этом нужно создать виртуальный мост объединяющий реальный интерфейс с виртуальным. В этом случае есть 2 варианта сделать чтобы он всегда создавался при старте системы или создавать его ручками. Второй вариант мне кажется лучше - нужно всего пара команд и в системе не висит лишний интерфейс. Последовательность запуска:
  1. sudo brctl addbr virbr0
  2. sudo brctl addif virbr0 eth0
  3. sudo ifconfig virbr0 up
  4. sudo dhclient virbr0
  5. sudo qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda debian_squeeze_mips_standard.qcow2 -append "root=/dev/sda1 console=tty0" -net nic -net tap

Sunday, May 27, 2012

Компиляция busybox под mips

  1. tar -xvf ../cross-compiler-mips.tar.bz2
  2. tar -xvf ../busybox-1.20.0.tar.bz2
  3. cd busybox-1.20.0/
  4. CROSS_COMPILE="$PWD/../cross-compiler-mips/bin/mips-"
  5. LDFLAGS="--static" make CROSS_COMPILE="$CROSS_COMPILE" defconfig
  6. LDFLAGS="--static" make CROSS_COMPILE="$CROSS_COMPILE" all
  7. LDFLAGS="--static" make CROSS_COMPILE="$CROSS_COMPILE" install
P.S.: Образ для виртуальной машины, чтобы проверить можно скачать здесь.

Sunday, May 20, 2012

bootchart и ubuntu

Маленькое не соответсвие докуметации bootchart в ubuntu - в документации указано, что им нужно заменять init процесс, в Ubuntu он прописывает при установке себя в демоны и хранит результаты в /var/log/bootchart.

Saturday, May 5, 2012

Компиляция strace под mips

  1. tar -xvf ../cross-compiler-mips.tar.bz2
  2. tar -xvf ../strace-4.7.tar.xz
  3. cd strace-4.7/
  4. export PATH=$PATH:../cross-compiler-mips/bin/
  5. CFLAGS=-I../cross-compiler-mips/include/ CC=mips-gcc LDFLAGS=-static ./configure --host=mips-linux && make LDFLAGS=-static
  6. mips-strip -v --strip-unneeded strace -o strace-stripped ; ls -l strace-stripped; file strace-stripped

Wednesday, May 2, 2012

va_list и gdb

Хорошая штука va_lixt, но под gdb нужно делать страшные комбинации чтобы посмотреть в чем ошибка:
#0  g_logv (log_domain=0x0, log_level=<optimized out>, 
    format=0x406368 "Can not create directory '%s': %s", args1=0x7ffff03a73b8)
    at /build/buildd/glib2.0-2.32.1/./glib/gmessages.c:765
#1  0x00007f483b167172 in g_log (log_domain=<optimized out>, 
    log_level=<optimized out>, format=<optimized out>)
    at /build/buildd/glib2.0-2.32.1/./glib/gmessages.c:792
#2  0x0000000000404e50 in ?? ()
#3  0x0000000000402f38 in ?? ()
#4  0x00007f483ab5f76d in __libc_start_main (main=0x402f20, argc=1, 
    ubp_av=0x7ffff03a7608, init=<optimized out>, fini=<optimized out>, 
    rtld_fini=<optimized out>, stack_end=0x7ffff03a75f8) at libc-start.c:226
#5  0x0000000000402fe9 in ?? ()
#6  0x00007ffff03a75f8 in ?? ()
#7  0x000000000000001c in ?? ()
#8  0x0000000000000001 in ?? ()
#9  0x00007ffff03a7d19 in ?? ()
#10 0x0000000000000000 in ?? ()
(gdb) p *(char **)(((char *)args1[0].reg_save_area)+args1[0].gp_offset)
$8 = 0x113b720 "/var/lib/lightdm/.config/dconf"
(gdb) p *(char **)(((char *)args1[0].reg_save_area)+args1[0].gp_offset+8)
$12 = 0x113c000 "Permission denied"
Но может это просто я неправильный вариант просмотра нашел?

Sunday, April 29, 2012

Минимизация страницы Python

​Аналогичный по задачам, но реализованы по другим принципам на Python код минимизации страницы. Продолжение предыдущего поста с реализацией на php. Главное отличие от предыдущей версии здесь мы разбиваем потоковый парсером html и на обрабатываем содержимое тегов. Для сжатия стилей и скриптов используется внешний код для минимизации из webassets.

Sunday, March 18, 2012

Erlang?

Правильное описание Erlang. Единственное может конечно уже подправили, но очистка памяти у него - иногда он не может освободить память и зависает не отвечая на внешний мир. И так получается что вроде жив - но ни ничто не реагирует.
Я года три назад использовал yaws для проксирования запросов к основной логике плюс часть бизнес логики внутри erlang. Так при большой нагрузке задень он зависало - а когда убиваешь его - куча потоков ждущих записи в логи и очистки памяти. Процесс принудительной очистки вызывался - самым последним в функции после отдачи результата yaws и это не помогало. И я сомневаюсь, что можно даже если память независимо выделяется - избежать ее фрагментирования и эффективной очистки - ссылки то на глобальные структуры создание ранее по коду остаются и их пока поток полностью не выйдет очищать нельзя.
Но все могло уже поменяться, или мы чего-то намудрили.

Saturday, March 17, 2012

Ice Cream Sandwich on Desire HD

Решил проверить как продвигается CM9 - пока не очень.

Используя версию чистого CM9 на основе инструкции- не загрузилось :-( Анимация при загрузке зациклилась, а как смотреть лог загрузки для андроида не понятно. Если есть желание повторить нужно загрузить: repo init -u git://github.com/CyanogenMod/android.git -b ics и добавить в system/.repo/manifests/default.xml репозитории:

  1. project path="device/htc/ace" name="CyanogenMod/android_device_htc_ace"
  2. project path="device/htc/common" name="CyanogenMod/android_device_htc_common" revision="refs/heads/gingerbread"
  3. project path="device/htc/msm7x30-common" name="CyanogenMod/android_device_htc_msm7x30-common"
  4. project name="koush/proprietary_vendor_htc" path="vendor/htc"

Версия собранная специально для этой модели запустилась - единственное отсутсвует приложение для радио и при записи видео приложение вылетает.

Обновление exif

Обновление информации о снимке на основе имени файла используя exiftool. Устанавливает коментарий на основе имени каталога, даты на основе имени файла и устанавливает имя устройства с которого сделана фотография.
Более простая версия использующая jhead - может устанавливать только даты и коментарий.

Saturday, February 18, 2012

MESH телефончик

Идея для маленькой программки - полурация - полуmesh сеть :-) В принципе уже есть аналог http://www.servalproject.org/ - вобщем-то, если верить описанию всем хорош - можно звонить без сети, можно передавать файлы, слать SMS. Программа может сама управлять сетью, но она мне кажется не удобной - слишком много функционала или мне просто хочется создать свой велосипед - единственное, что не удобно для отправки SMS используется, как я понял, внешняя сеть и SMS будет отослан через http://code.google.com/p/websmsdroid/ веб-сайты. Основной проблемой как по мне является не возможность аутентифицировать звонящего - так как можно спокойно менять свой номер. Другим аналогом может быть http://sipdroid.org/ - все хорошо - но нужно постоянное соединение с интернетом и регистрация SIP аккаунта.

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

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

Saturday, February 4, 2012

OpenWRT

Интересная сборка OpenWRT:-) Прям мечта...

  1. svn co svn://svn.openwrt.org/openwrt/branches/backfire backfire
  2. wget http://downloads.openwrt.org/backfire/10.03.1/brcm63xx/config
  3. mv config backfire/.config
  4. cd backfire 
  5. make
  6. смотрим каталог bin/brcm63xx/


И все:-) Конечно можно зайти и по настраивать: make menucofig

Но куда уже проще:-) Ставить пока не пробовал, ADSL функционала что-то все нет.... 

Sunday, January 15, 2012

Fastboot

Есть маленькая особенность при прошивке через fastboot - идентификатор устройства в режиме fastboot не совпадает с идентификатором после загрузки поэтому adb видит устройство после загрузки, но если не прописать правильные идентификаторы udev - fastboot не увидит устройство. Потому желательно поискать телефон через lsusb(телефон должен быть в режиме fastboot) - там должна быть строка вида: 
Bus 001 Device 016: ID 0bb4:0fff High Tech Computer Corp. Android Fastboot Bootloader 




И 0fff - нужно записать в '/etc/udev/rules.d/11-android.rules' в виде строки: 

SUBSYSTEMS=="usb", ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0fff", MODE="0666", OWNER="mylogname" 

После этого телефон должен появиться в списке fastboot devices, в том случае если телефон поддерживает этот режим прошивки,  я пробовал только на Nexus One и HTC Desire HD. Другие производители я думаю не используют High Tech Computer в идентификаторах. Причем Nexus One точно можно разблокировать прошивку через fastboot( fastboot oem unlock ), на Desire не пробовал.