Pull to refresh
0
0
Send message

MK 809III Android Mini PC: компьютер в кармане

Reading time6 min
Views138K
ОС Android уверенно захватила рынок смартфонов и планшетов, на очереди — банкоматы, чайники и унитазы автомобильные навигаторы, моноблоки, цифровые фотокамеры, телевизоры. Впрочем, если есть желание, заполучить Android в мониторе/телевизоре можно уже прямо сейчас: с недавних пор китайские умельцы наловчились выпускать мини-компьютеры на базе Android, которые по размерам ненамного превосходят USB-флешки и в основном ориентированы на работу вместе с телевизором. На Amazon или Ali Express таких моделей — вагон и маленькая тележка, а цены начинаются от $30. Природное любопытство взяло верх над жабой, живущей в каждом из нас, и я решился заказать такую шутку, чтобы проверить в деле. Сразу отмечу, что у меня в наличии телевизор LG47LM669S с вполне вменяемой прошивкой, обеспечивающей воспроизведение множества форматов, да и телевизор постоянно подключен к мощному компу, с которого смотрим кино, поэтому «USB-stick» был заказан исключительно из любопытства.

Проверять, так проверять, поэтому я выбрал самую продвинутую модель, MK 809III — на базе четырехъядерного процессора и под управлением Android 4.2. Судя по предложениям интернет-магазинов, в основном в таких мини-ПК используются процессоры Rockchip. В моем случае это Rockchip RK3188, более дешевые варианты оснащаются двухъядерным процессором Rockchip RK3066. Кстати, наблюдая такое «разнообразие», сам собой напрашивается вывод о том, что все «USB-sticks» есть клоны референсного мобильного устройства, разработанного самой Rockchip.


Читать дальше →
Total votes 43: ↑36 and ↓7+29
Comments39

Как генерировать случайные скобочные последовательности

Reading time7 min
Views21K
Привет, Хабр!

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

В названии этой статьи присутствуют слова «скобочная последовательность». За этими словами скрывается нечто большее, поскольку с помощью скобок можно описать очень разнообразные объекты, в том числе и бинарные деревья. На Хабре этому факту был посвящен отдельный пост.

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

Добро пожаловать под кат
Total votes 37: ↑35 and ↓2+33
Comments7

Почему веб-приложения на мобильных платформах работают медленно

Reading time34 min
Views66K
От переводчика
Это перевод статьи Drew Crawford «Why mobile web apps are slow», опубликованной 09 июля 2013. Статья очень интересная, но большая — ошибки возможны — прошу простить и присылать замечания в личку.
Поскольку затронута острая тема, прошу заметить, что переводчик не обязательно разделяет мнение автора статьи!
При переводе текст слегка видоизменялся, поскольку прямой перевод не всегда понятно передает смысл. Для перевода термина «native code» был использован англицизм «нативный код», который понятнее и короче, чем «родной для платформы код». Термин «word processing» переводится как «верстка текста», хотя это немного сужает первоначальный смысл. Термин managed код («управляемый код») не был переведен, так как удачного перевод (на взгляд переводчика) не существует. Под «терминированием» приложения подразумевается его принудительное завершение операционной системой.
Повествование в статье ведется от первого лица: автора статьи.


Читать статью
Total votes 156: ↑150 and ↓6+144
Comments74

Custom layouts. Part 2. CellLayout

Reading time10 min
Views23K
И снова здравствуйте, коллеги.

И снова я пожаловал к вам с топиком кастомной разметки. На этот раз, я задумал сделать некую “ячейчатую” разметку.
Смысл прост: вся площадь контейнера делится на сетку из квадратных ячеек одинакового размера, и каждый потомок может занять произвольные клетки на этой сетке. Используя подобную разметку можно составлять красивую мозаику из кнопок или картинок, не прибегая к многочисленным вложенным layout’ам. И, поскольку, это специально заточенный для этих целей layout, он будет работать очень шустро.


Читать дальше →
Total votes 28: ↑27 and ↓1+26
Comments16

Meet-in-the-middle: оптимизация перебора и не только

Reading time3 min
Views16K
В прошлой статье я писал про эвристические методы оптимизации перебора. В этой статье я расскажу вам о ещё одной, но уже асимптотической оптимизации — meet-in-the-middle.

Типичные для этого метода снижения асимптотики: и .

Вступление


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

Meet-in-the-middle имеет смысл применять, если для конкретной задачи выполняются два условия:
1) Время обработки половины данных асимптотически меньше времени получения итогового ответа.
2) Известен асимптотически более быстрый способ получения ответа для всей задачи с использованием информации об обработки её половинок.
Читать дальше →
Total votes 15: ↑14 and ↓1+13
Comments0

Custom layout. Выплывающая панель + параллаксный скроллинг

Reading time7 min
Views19K
Привет, коллеги.

Сегодня я хотел рассказать, как можно создать нестандартный менеджер разметки (layout manager) и вдохнуть в него жизнь при помощи анимаций.
Нам в DataArt часто требуется реализовывать нестандартные компоненты для приложений заказчика, поэтому у меня накопился определенный опыт в этом деле, которым решил поделиться.
В качестве примера решил реализовать аналог часто встречающейся в социальных сетях выплывающей снизу панели. Обычно этот прием используется при необходимости показать контент, например, фото, и добавить возможность комментировать на дополнительной панельке, которую пользователь может вытянуть снизу. При этом основной контент обычно тоже уплывает наверх, но немного медленнее, чем основная панель. Это называется «параллаксный скроллинг».
Специально для этой статьи я решил с нуля реализовать подобный компонент. Сразу хочу заметить, что это не полноценный, стабильный и готовый для продакшен код, а всего лишь демонстрация, написанная за пару часов, чтобы показать основные приемы.

Читать дальше →
Total votes 36: ↑36 and ↓0+36
Comments13

Почему с нормальным распределением не все нормально

Reading time7 min
Views53K
image

Нормальное распределение (распределение Гаусса) всегда играло центральную роль в теории вероятностей, так как возникает очень часто как результат воздействия множества факторов, вклад любого одного из которых ничтожен. Центральная предельная теорема (ЦПТ), находит применение фактически во всех прикладных науках, делая аппарат статистики универсальным. Однако, весьма часты случаи, когда ее применение невозможно, а исследователи пытаются всячески организовать подгонку результатов под гауссиану. Вот про альтернативный подход в случае влияния на распределение множества факторов я сейчас и расскажу.
Читать дальше →
Total votes 78: ↑72 and ↓6+66
Comments31

Способы представления словарей для автоматической обработки текстов

Reading time10 min
Views20K
Автоматический анализ текстов практически всегда связан с работой со словарями. Они используются для морфологического анализа, выделения персон (нужны словари личных имен и фамилий) и организаций, а также других объектов.

В общем виде словарь — множество записей вида {строка, данные ассоциированные с этой строкой}.

Например, для морфологического анализа словарь состоит из троек {словоформа, нормальная форма, морфологические характеристики}. При анализе слова «мыла» из предложения «мама мыла раму» надо уметь получать следующие варианты анализа:
Нормальная форма Характеристики
МЫЛО S (существительное), РОД (родительный падеж), ЕД (единственное число), СРЕД (средний род), НЕОД
(неодушевленность)
МЫЛО S (существительное), ИМ (именительный падеж), МН (множественное число), СРЕД (средний род), НЕОД (неодушевленность)
МЫЛО S (существительное), ВИН (винительный падеж), МН (множественное число), СРЕД (средний род), НЕОД (неодушевленность)
МЫТЬ V (глагол), ПРОШ (прошедшее время), ЕД (единственное число), ИЗЪЯВ (изъявительное наклонение), ЖЕН (женский род), НЕСОВ (несовершенный вид)


Читать дальше →
Total votes 30: ↑30 and ↓0+30
Comments40

Много бесплатных книг по программированию

Reading time7 min
Views346K
Читать дальше →
Total votes 202: ↑192 and ↓10+182
Comments42

Оптимизация перебора

Reading time6 min
Views40K
Дисклеймер: для понимания этой статьи требуются начальные знания теории графов, в частности знание поиска в глубину, поиска в ширину и алгоритма Беллмана — Форда.

Введение


Наверняка вы сталкивались с задачами, которые приходилось решать перебором. А если вы занимались олимпиадным программированием, то точно видели NP-полные задачи, которые никто не умеет решать за полиномиальное время. Такими задачами, например, является поиск пути максимальной длины без самопересечений в графе и многим известная игра — судоку, обобщенная на размер . Полный перебор крайне долгий, ведь время его работы растёт экспоненциально относительно размера входных данных. Например, время поиска максимального пути в графе из 15 вершин наивным перебором становится заметным, а при 20 — очень долгим.

В этом посте я расскажу как можно оптимизировать большинство переборов, чтобы они стали работать на порядки быстрее.
Читать дальше →
Total votes 29: ↑29 and ↓0+29
Comments8

Создаём Zoomquilt

Reading time4 min
Views12K
Захотелось продолжить серию постов о всяких интересных автореферентных штуковинах и решил я написать о жанре Zoomquilt. Сделал поиск, увидел, что один пост на Хабре уже есть. Подумал, подумал и решил, что пост я всё равно напишу, но он будет технический, о технологии создания Zoomquilt.

Для начала собственно о жанре. Тут проще показать чем рассказывать.

zoomquilt.org

zoomquilt2.madmindworx.com/zoomquilt2.swf

www.syfy.com/tinman/oz

www.deviantart.com/art/kopfsalat-digital-edition-30069104

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

Дальше о технологии создания. Под катом много картинок.
Читать дальше →
Total votes 44: ↑43 and ↓1+42
Comments14

Web-Interface для Motion

Reading time3 min
Views55K
После обновления видеосервера под debian, было принято решение переделать систему видеонаблюдения.
Motion было решено оставить, но возникла необходимость в более человеческом интерфейсе для просмотра архивных записей.
Очередные поиски в Интернет так и не дали никаких приемлемых результатов, в результате чего было принято решение о создании собственного продукта.
После небольших колебаний, выбор пал на Rails. Никакой религии, просто захотелось получше изучить этот фреймворк и замечательный язык программирования. В качестве СУБД используется PostgreSQL.
Результат работы под капотом…
Читать дальше →
Total votes 28: ↑27 and ↓1+26
Comments24

Технические особенности Mercedes S-Class

Reading time5 min
Views99K
В своём предыдущем посте я описал технологии направленные на обеспечение безопасности водителей. Читателям Хабра не хватило технических деталей о каждой технологии. Я обещал сделать отдельный пост, но для начала хотел бы завершить обзор новейших автоматизированных систем. В этом посте я по большей части расскажу о технологиях, увеличивающих комфорт и управляемость автомобиля Mercedess S-Class. А в следующем, сконцентрируюсь на технических деталях всех этих систем. Итак, начнём.

Читать дальше →
Total votes 190: ↑173 and ↓17+156
Comments148

Crossfilter.js, dc.js и D3.js для визуализации Данных

Reading time4 min
Views35K
Приветствую ценителей красивой и функциональной визуализации данных! Предлагаю вашему вниманию небольшой обзор нескольких JavaScript библиотек, которые вкупе с D3.js позволят создать интерактивную визуализацию многомерных данных с возможностью применения фильтрации «на лету».


Заинтересовались, тогда добро пожаловать под кат.
Читать дальше →
Total votes 54: ↑52 and ↓2+50
Comments15

Как создать кластер в JBoss AS 7.1 в автономном (standalone) режиме?

Reading time6 min
Views11K
Статья переведена и опубликована здесь с целью дополнить ее рецептом от себя, добытом на основе личного опыта. Есть надежда, что кто-то сэкономит полдня-день гугления и массу проб и ошибок, с которыми пришлось столкнуться мне. Далее следует вольный перевод и дополнение лично от меня. Основная решаемая задача: репликация сессий пользователей на все узлы кластера. За счет репликации сессий, в случае потери одного из узлов кластера балансировщик прозрачно для пользователя может переключить его на другой узел. Работа балансировщика выходит за рамки данного перевода и будет описана в следующей статье.

JBoss AS 7 кардинально отличается от предыдущих версий JBoss, следовательно, если вы хотите создать кластер в JBoss AS 7, вам следует знать несколько вещей, чтобы не столкнуться с проблемами.
Читать дальше →
Total votes 10: ↑9 and ↓1+8
Comments3

Dissent — протокол анонимной связи малых закрытых сообществ

Reading time5 min
Views16K
Предисловие


Для понимания работы dissent надо вспомнить классическую работу Дэвида Чаума (основоположника идей практической реализации сетевой анонимности), опубликованную в 1988 году и протокол «обедающих криптографов (dining cryptographers)».

Представим, что три криптографа пришли ресторан пообедать. После того, как они сели за стол, официант сообщает им, что их обед оплатил заранее некий анонимный доброжелатель.

Криптографы знают, что этим доброжелателем мог быть один из них, но, кроме того, им мог быть АНБ. Они хотят выяснить, действительно ли заплатил за обед один из них, или это дело рук АНБ. Но при этом они очень тактичны, Если заплатит кто-то из них, то они будут уважать право на анонимность и не будут выяснять, кто же заплатил. Но им будет интересно получить ответ на вопрос в такой форме: «заплатил кто-то из присутствующих или всё-таки АНБ?». Для этого нужно провести анонимную широковещательную передачу одного бита информации.
Каждый криптограф бросает монету. И показывает результат (орёл или решка) своему соседу справа. Таким образом есть три броска монетки, и каждый криптограф знает результат двух из них. Далее, каждый из них говорит вслух следующую информацию: одинаковые два результата он видел, или разные, но с одним исключением: тот из них, который заплатил за обед говорит наоборот, т.е. если он видит два разных результата, говорит «одинаковые», если видит два одинаковых, говорит «разные».

Если число различий за столом — нечётное, то обед оплачен кем-то из криптографов, если чётное — то АНБ. При этом если обед всё-таки оплатил криптограф, то двое других на основании сделанных всеми заявлений не могут узнать, что это был он.
Читать дальше →
Total votes 51: ↑51 and ↓0+51
Comments7

False sharing в многопоточном приложении на Java

Reading time4 min
Views24K
JRE позволяет абстрагироваться от конкретной платформы, делая написание кросс-платформенного кода намного проще. Конечно до идеала Write once, run anywhere не дотягивает, но жизнь облегчает существенно.

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

Подавляющее большинство современных процессоров имеют кэш-память для хранения часто используемых данных. Кэш-память делится на блоки (Сache line). Механизмы реализующие Cache coherence обеспечивают синхронизацию кэш-памяти между ядрами процессора(ов) в компьютерной системе.

Термин false sharing означает доступ к разным объектам в программе, разделяющим один и тот же блок кэш-памяти. False sharing в многопотоковом приложении, когда в одном блоке оказываются переменные модифицируемые из разных потоков, ведет к снижению производительности и увеличению нагрузки на Cache coherence механизмы. Подробно о том как это происходит, можно прочесть в статье на эту тему.

Подробности
Total votes 30: ↑26 and ↓4+22
Comments13
12 ...
7

Information

Rating
Does not participate
Registered
Activity