В буржунете есть интересный документ по оптимизации SQLite на платформе BlackBerry. Однако, идеи, которые в нем содержатся, вообще говоря, относятся к любой мобильной платформе. Мы решили развить этот список и создать эдакий эталонный текст в рунете с набором полезных, вводных советов для программирования SQLite под мобильными устройствами. Принимаем ваши предложения в комментариях.
Алексей Дубинин @lxyd
User
Быстрая десериализация действительно больших JSON-ответов
6 min
21K
Кроме того, под катом будет ссылка на репозиторий на гитхабе с примером кода. А вот картинок не будет, зато найдётся место для небольшой таблички.
+13
Десятка лучших консольных команд
2 min
198K
+310
Организация памяти в текстовом редакторе
6 min
36KКаждый, кто пытался запрограммировать хотя бы простейший редактор текста на низком уровне, сталкивался с задачей организации памяти для хранения редактируемого текста. Структура данных для хранения текста должна удовлетворять следующим требованиям:
Удовлетворить эти требования одновременно непросто. Если рассмотреть широкоизвестные структуры данных, такие как массивы, списки, деревья, стеки, очереди, кольцевые буфера — то такой структуры, которая бы позволила эффективно выполнить оба требования, не встречается. В случае массива имеем незначительные накладные расходы по памяти, но операция вставки имеет сложность O(n), где n — размер редактируемого текста. В случае списка сложность вставки и удаления составляет O(1), однако накладные расходы по памяти в несколько раз превышают размер собственно текста. Деревья, кучи, кольцевые буфера, ассоциативные массивы и прочие структуры и вовсе неприменимы для хранения текста в редакторе.
Встречаются гибридные решения, когда текст хранится в наборе массивов, которые, в свою очередь, объединены в список. Казалось бы, такой подход позволяет объединить преимущества массивов и списков (быстрая вставка/удаление при низких накладных расходах по памяти). Однако такое решение сложно в реализации. Также оно приводит к фрагментации памяти.
Предлагаю вашему вниманию эффективную структуру данных для хранения редактируемого текста, которая проста в реализации, имеет константные накладные расходы по памяти и быструю вставку/удаление в произвольном месте. Также она позволяет эффективно редактировать файлы, которые целиком не умещаются в оперативную память.
Несмотря на то, что эта структура данных была открыта давно и использовалась в текстовых редакторах на старых ЭВМ в 8-битную эпоху, это тайное знание предков было в значительной мере утеряно и в современных редакторах встречается редко. Попробуйте открыть файл, состоящий из одной строки мегабайт на 10, в Notepad или Far. Вставка и удаление символов будет длиться секундами.
- иметь малые накладные расходы по памяти. Большая часть доступной памяти должна использоваться для хранения текста, а не служебной информации;
- допускать эффективную вставку и удаление в произвольном месте текста.
Удовлетворить эти требования одновременно непросто. Если рассмотреть широкоизвестные структуры данных, такие как массивы, списки, деревья, стеки, очереди, кольцевые буфера — то такой структуры, которая бы позволила эффективно выполнить оба требования, не встречается. В случае массива имеем незначительные накладные расходы по памяти, но операция вставки имеет сложность O(n), где n — размер редактируемого текста. В случае списка сложность вставки и удаления составляет O(1), однако накладные расходы по памяти в несколько раз превышают размер собственно текста. Деревья, кучи, кольцевые буфера, ассоциативные массивы и прочие структуры и вовсе неприменимы для хранения текста в редакторе.
Встречаются гибридные решения, когда текст хранится в наборе массивов, которые, в свою очередь, объединены в список. Казалось бы, такой подход позволяет объединить преимущества массивов и списков (быстрая вставка/удаление при низких накладных расходах по памяти). Однако такое решение сложно в реализации. Также оно приводит к фрагментации памяти.
Предлагаю вашему вниманию эффективную структуру данных для хранения редактируемого текста, которая проста в реализации, имеет константные накладные расходы по памяти и быструю вставку/удаление в произвольном месте. Также она позволяет эффективно редактировать файлы, которые целиком не умещаются в оперативную память.
Несмотря на то, что эта структура данных была открыта давно и использовалась в текстовых редакторах на старых ЭВМ в 8-битную эпоху, это тайное знание предков было в значительной мере утеряно и в современных редакторах встречается редко. Попробуйте открыть файл, состоящий из одной строки мегабайт на 10, в Notepad или Far. Вставка и удаление символов будет длиться секундами.
+112
Получение 3D объекта по 1 фото
1 min
74KНа выставке SIGGRAPH ASIA 2013 (англ.), посвященной компьютерной графике и интерактивным технологиям, представлена разработка 3–Sweep, позволяющая лишь по одной фотографии получить трехмерный объект с текстурой. Хотя речь идет о объектах являющихся наборами примитивов и их растяжений по некоторому пути, но скорость и простота работы впечатляет! Также оценивается и дополняется то, что могло бы быть за объектом, после его вырезания из фотографии, хотя мы уже видели похожий инструмент от Adobe.
+108
Python. Неочевидное поведение некоторых конструкций
4 min
35KРассмотрены примеры таких конструкций + некоторые очевидные, но не менее опасные конструкции, которых в коде желательно избегать. Статья рассчитана на python программистов с опытом 0 — 1,5 года. Опытные разработчики могут в коментах покритиковать или дополнить своими примерами.
+52
Сноуден пролил свет на ситуацию со взломом криптографии. Все плохо
3 min
187K
Сразу в трех изданиях (The Guardian, The New York Times и ProPublica) были выложены выдержки из секретного бюджета АНБ, согласно которым с 2000 года, когда стали массово внедрятся средства шифрования, спецслужбы США потратили миллиарды долларов на взлом криптографии в рамках секретной программы Bullrun (названа в честь первого крупного сражения Американской Гражданской войны, произошедшего 21 июля 1861 года возле Манассаса, штат Виргиния).
Деятельность Агентства не ограничивалась научными исследованиями алгоритмов и строительством дата-центров для взлома коммуникаций методом перебора ключей. Выяснилось, что Агентство давно и успешно работает с IT-компаниями по вопросу встраивания в их продукты закладок для спецслужб США, а также ведет работу по обнаружению уязвимостей в механизмах шифрования и целенаправленному ослаблению международных алгоритмов защиты данных (сообщается о неназванном международном стандарте шифрования, принятом Международной организацией по стандартизации в 2006 году). На одно только встраивание бэкдоров в популярные коммерческие продукты, в рамках программы SIGINT, ежегодно тратится 250 млн. долларов.
Согласно документам, наибольшие усилия предпринимаются для взлома протокола SSL, обеспечивающего безопасность большинства коммуникаций в современном Интернете. VPN и технологии защиты 4G также являются одними из приоритетных направлений. АНБ поддерживает внутреннюю базу данных ключей шифрования, позволяющую мгновенно расшифровывать соединения. Если же необходимых ключей не оказывается, то запрос переходит к специальной «Службе восстановления», которая пытается получить его различными способами.
+195
Python for Programmers
1 min
31KTutorial

Сегодня хочу представить вам интерактивный вариант этой презентации — онлайн мини-курс Python for Programmers, созданный и опубликованный под лицензией Creative Commons с разрешения Алекса. Мы добавили к его презентации интерактивных упражнений, обновили материал с Python 2.5 до Python 3.3, добавили информацию по актуальным библиотекам и разнице между 2 и 3 версиями Питона.
+69
Много бесплатных книг по программированию
7 min
347KTranslation

Списки книг
- 25 бесплатных книг по информатике
- Шпаргалки
- CodePlex: Список бесплатных книг
- Бесплатные технические книги
- Galileo Computing (Немецкий)
- How to Design Programs: An Introduction to Computing and Programming
- Microsoft Press: Бесплатные книги
- MindView Inc
- Проект O'Reilly's Open Books
- TechBooksForFree.com
- Theassayer.org
- Wikibooks: Программирование
- Неплохая подборка, редактируемая сообществом (JIghtuse)
- Книги на Русском (telteron)
Программирование графики
+182
Коды Рида-Соломона. Простой пример
9 min
121K
Давайте возьмем простой пример и попробуем пройти весь путь – от кодирования до получения исходных данных на приемнике. Пусть нам нужно передать кодовое слово С, состоящее из двух чисел – 3 и 1 именно в такой последовательности, т.е. нам нужно передать вектор С=(3,1). Допустим, мы хотим исправить максимум две ошибки, не зная точно, где они могут появиться. Для этого нужно взять 2*2=4 избыточных символа. Запишем их нулями в нашем слове, т.е. С теперь равно (3,1,0,0,0,0). Далее необходимо немного разобраться с математическими особенностями.
Поля Галуа
Многие знают романтическую историю о молодом человеке, который прожил всего 20 лет и однажды ночью написал свою математическую теорию, а утром был убит на дуэли. Это Эварист Галуа. Также он несколько раз пытался поступить в университеты, однако экзаменаторы не понимали его решений, и он проваливал экзамены. Приходилось ему учиться самостоятельно. Ни Гаусс, ни Пуассон, которым он послал свои работы, также не поняли их, однако его теория отлично пригодилась в 60-х годах ХХ-го века, и активно используется в наше время как для теоретических вычислений в новых разделах математики, так и на практике.
+86
Псевдолемматизация, композиты и прочие странные словечки
3 min
12K
Содержание цикла статей про морфологию
• Морфология и компьютерная лингвистика для самых маленьких
• Роль морфологии в компьютерной лингвистике
• Морфология. Задачи и подходы к их решению
• Псевдолемматизация, композиты и прочие странные словечки
• Роль морфологии в компьютерной лингвистике
• Морфология. Задачи и подходы к их решению
• Псевдолемматизация, композиты и прочие странные словечки
Не все задачи успели мы с вами обозреть в предыдущем посте, поэтому продолжать будем в этом.
Часто случается, что в интернете появляется какой-нибудь неологизм. Например, «затроллить». Слово «тролль» в словаре есть, но «затролля» уже нет, а, как мы выяснили ранее, приставка при разборе не отделяется от корня, так что мы понятия не имеем, что это за «затроллить» и как его изменять. Чтобы проанализировать это слово, нам придётся воспользоваться псевдолемматизацией. Для этого мы снова пользуемся так называемым обратным деревом окончаний (записанных справа налево).
+55
Dissent — протокол анонимной связи малых закрытых сообществ
5 min
16KПредисловие
Для понимания работы dissent надо вспомнить классическую работу Дэвида Чаума (основоположника идей практической реализации сетевой анонимности), опубликованную в 1988 году и протокол «обедающих криптографов (dining cryptographers)».
Представим, что три криптографа пришли ресторан пообедать. После того, как они сели за стол, официант сообщает им, что их обед оплатил заранее некий анонимный доброжелатель.
Криптографы знают, что этим доброжелателем мог быть один из них, но, кроме того, им мог быть АНБ. Они хотят выяснить, действительно ли заплатил за обед один из них, или это дело рук АНБ. Но при этом они очень тактичны, Если заплатит кто-то из них, то они будут уважать право на анонимность и не будут выяснять, кто же заплатил. Но им будет интересно получить ответ на вопрос в такой форме: «заплатил кто-то из присутствующих или всё-таки АНБ?». Для этого нужно провести анонимную широковещательную передачу одного бита информации.
Каждый криптограф бросает монету. И показывает результат (орёл или решка) своему соседу справа. Таким образом есть три броска монетки, и каждый криптограф знает результат двух из них. Далее, каждый из них говорит вслух следующую информацию: одинаковые два результата он видел, или разные, но с одним исключением: тот из них, который заплатил за обед говорит наоборот, т.е. если он видит два разных результата, говорит «одинаковые», если видит два одинаковых, говорит «разные».
Если число различий за столом — нечётное, то обед оплачен кем-то из криптографов, если чётное — то АНБ. При этом если обед всё-таки оплатил криптограф, то двое других на основании сделанных всеми заявлений не могут узнать, что это был он.
+51
Скрытые цепи Маркова, алгоритм Баума-Велша
4 min
25KСкрытые модели/цепи Маркова одни из подходов к представлению данных. Мне очень понравилось как обобщается множество таких подходов в этой статье.
В продолжение же моей предыдущей статьи описания скрытых моделей Маркова, задамся вопросом: откуда взять хорошую модель? Ответ достаточно стандартен, взять неплохую модель и сделать из нее хорошую.
Напомню пример: нам нужно реализовать детектор лжи, который по подрагиванию рук человека, определяет, говорит он правду или нет. Допустим, когда человек лжет, руки трясутся чуть больше, но нам не известно на сколько именно. Возьмем модель наобум, прогоним алгоритм Витерби из предыдущей статьи и получим довольно странные результаты:

В продолжение же моей предыдущей статьи описания скрытых моделей Маркова, задамся вопросом: откуда взять хорошую модель? Ответ достаточно стандартен, взять неплохую модель и сделать из нее хорошую.
Напомню пример: нам нужно реализовать детектор лжи, который по подрагиванию рук человека, определяет, говорит он правду или нет. Допустим, когда человек лжет, руки трясутся чуть больше, но нам не известно на сколько именно. Возьмем модель наобум, прогоним алгоритм Витерби из предыдущей статьи и получим довольно странные результаты:

+36
Университет MIT выложил бесплатно лекции в Сеть
1 min
151K
Один из лучших технологических вузов мира опубликовал большинство своих обучающих курсов, лекций и семинаров в интернете на отдельном ресурсе.
Есть аудио и видео-курсы, поиск по каталогу, по номеру курса, по наименованию дисциплины, все предметы и степень сложности разделены в отдельные рубрики.
+74
HoloEverywhere 1.6.8
6 min
11KTutorial

Всем единообразия, или доброго времени суток!
Листая тут хабр наткнулся на статейку Подключение шрифтов в своем проекте автора mcavalon, думал подчерпнуть чего-нить интересное… Но увидев очередной TextView.setTypeface how-to, зевнул и пошел читать другую статью (@rus1f1kat0r, привет кстати :)).
Так вот, несколько минут назад (на момент написания этих строк это были еще минуты, а не часы, совершенно непреднамеренно меня выдернули девушки) я выпустил HoloEverywhere 1.6.8, основной фичей этого релиза является продвинутый FontLoader, ну и еще несколько плюшек, как всегда.
+31
Самодельная эргономичная клавиатура CatBoard ][
16 min
147K
CatBoard — это самодельная эргономичная компактная клавиатура с открытым исходным кодом, имеет множество нестандартных решений, таких как: нестандартная аппаратная раскладка со стандартными клавиатурными сочетаниями; быстрый автоповтор нажатой клавиши; Fn слой с клавишами управления курсором, цифровым блоком, функциональными клавишами; отдельные клавиши переключения раскладок; более удобное расположение Ctrl и Shift; отдельную кнопку AltTab; режим совместимости с Macintosh, позволяющий работать на нём точно так же, как и на PC; возможность прошивки без дополнительного оборудования; возможность устанавливать поверх ноутбучной клавиатуры. Благодаря открытому коду, с клавиатурой можно делать что угодно, новая прошивка заливается в считанные секунды, поэтому экспериментировать можно прямо на ходу.
+93
Мы спасены! Genymotion — забудьте про вашего эмулятора-слоупока
1 min
137KДумаю, все кто осваивал разработку приложений под Android, сразу же осозновал невозможность тестирования программ без реального устройства. А все потому что официальный Android эмулятор страдает серьезными проблемами с производительностью.
+54
Анализируем числовые последовательности
3 min
62K
Иногда, если имеешь дело с числовыми последовательностями или бинарными данными, возникает желание “пощупать” их, понять, как они устроены, подвержены ли сжатию, если зашифрованы, то насколько качественно. Если речь идет о генераторах псевдо-случайных чисел, хочется знать, насколько они псевдо и насколько случайны.
В самом деле, что тут можно придумать, ну … матожидание, дисперсию посчитать или гистограмму какую построить…
Сейчас мы рассмотрим метод, позволяющий снимать, своего рода, отпечатки пальцев с числовых последовательностей.
+87
Слой радиоинтерфейса в ОС Android
6 min
47KСегодня я расскажу про то, как устроено взаимодействие с модемом в ОС Android. В данной статье описывается структура компонентов операционной системы Android, ответственных за сетевое взаимодействие по протоколам пакетной передачи данных – GPRS, EDGE, 3G и т.д.
Эта статья содержит большое количество теории, практика же будет во второй статье.
Рассмотрим, так называемый, слой радиоинтерфейса, от английского – Radio Interface Layer. В ОС Android представляет он представляет собой абстрактный слой между сервисом телефонии (android.telephony) и модемом.

Рисунок 1. Слой радиоинтерфейса.
Эта статья содержит большое количество теории, практика же будет во второй статье.
Описание слоя радиоинтерфейса
Рассмотрим, так называемый, слой радиоинтерфейса, от английского – Radio Interface Layer. В ОС Android представляет он представляет собой абстрактный слой между сервисом телефонии (android.telephony) и модемом.

Рисунок 1. Слой радиоинтерфейса.
+67
Voldemort типы в D
4 min
18KTutorial
Данный пост расскажет об уникальной фишке D — Voldemort типы. Типы, которые можно использовать, но нельзя назвать. Данное название не очень подходит им, но Walter Bright очень любит так их называть. Voldemort типы очень часто встречаются в стандартной библиотеке Phobos, особенно в модулях std.algorithm и std.array. Осваивающие D могут часами штудировать документацию в поисках типа, возвращаемого из splitter или joiner, а возвращают они именно Voldemort типы. После этого поста можно смело открывать исходники std.algorithm, ибо никакие Сами-Знаете-Кто вам будут не страшны.

Иногда, взаимодействие существующих возможностей может привести к неожиданным сюрпризам. Мне нравится считать, что мы изначально заложили Voldemort типы в D, но на самом деле они были найдены Андреем Александреску. Что это за Voldermort типы? Читайте дальше.

Иногда, взаимодействие существующих возможностей может привести к неожиданным сюрпризам. Мне нравится считать, что мы изначально заложили Voldemort типы в D, но на самом деле они были найдены Андреем Александреску. Что это за Voldermort типы? Читайте дальше.
+32
Information
- Rating
- Does not participate
- Location
- Москва и Московская обл., Россия
- Registered
- Activity