• Основы безопасности операционной системы Android. Уровень ядра

      Вступление


      Самой распространенной операционной системой для смартфонов на сегодняшний день является Android. Но не только этот факт подогревает интерес к ней. Открытость, возможность что-то настроить, подкрутить, и, естественно, сломать тоже в немалой степени способствуют увеличению популярности этой платформы. Я попробую поделиться опытом, как устроена эта операционная система, а так же рассмотреть систему безопасности. Всем, кому интересно, добро пожаловать! В этой статье я рассмотрю безопасность на уровне ядра.
      Читать дальше →
    • Основы безопасности операционной системы Android. Native user space, ч.1

        Вступление


        В этой статье я попробую рассмотреть безопасность чуть-чуть повыше ядра, а именно: как работает безопасность в Native user space. Мы коснемся темы процесса загрузки операционной системы и рассмотрим структуру файловой системы Android. Как я уже говорил, я не очень силен в Linux, поэтому если заметите неточности, то исправляйте — меня научите и статью улучшите. Так как эта тема довольно обширная, я решил разбить её на две части. В первой части мы рассмотрим процесс загрузки операционной системы и особенности файловой системы. Всем кому интересно, добро пожаловать!
        Читать дальше →
      • Свой инструмент нужно знать в лицо: обзор наиболее часто используемых структур данных

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

          Вопрос: Почему поиск в python dict на больших объемах данных быстрее чем итерация по индексированному массиву?

          Ответ: В dict хранятся хэши от ключей. Каждый раз, когда мы ищем в dict значение по ключу, мы сначала вычисляем его хэш, а потом (внезапно), выполняем бинарный поиск. Таким образом, сложность составляет O(lg(N))!

          На самом деле никакого бинарного поиска тут нет. И сложность алгоритма не O(lg(N)), а Amort. O(1) — так как в основе dict питона лежит структура под названием Hash Table.

          Причиной неверного ответа было то, что я не удосужился досконально изучить те структуры, которые лежат в основе работы с коллекциями моего любимого языка. Правда, по результатам опроса нескольких знакомых разработчиков, оказалось что это не только моя проблема, очень многие вообще не задумываются, как работают коллекции в их любимых ЯП. А ведь используем мы их каждый день и не по разу. Так родилась идея этой статьи.
          Читать дальше →
        • Как создать ТЗ для программиста

          Рекомендации геймдизайнеру от программиста (архитектора).


          Вступление

          Компьютерные игры — относительно молодая отрасль, которая в перспективе сменит киноиндустрию, так-же как кинофильмы заменили театр. Создание игры — это коллективное творчество, во многом напоминающее создание кинофильма. Кроме того, создание компьютерных игр — одна из самых сложных IT задач, поскольку она включает все себя практические все IT области.

          Все слышали про pre poduction, но мало кто знает как именно это происходит. И если про стадию разработки написано много, а про стадию издания — еще больше, то про стадию планирования известно очень мало. В лучшем случае вам посчастливится ознакомится с результатами планирования. А вот как были достигнуты эти результаты? — загадка во тьме.

          Этот документ является результатом «разбора полетов» после написания игры Звездная арена для социальных сетей. В этом документе я попытался упорядочить список проблем и решений к которым я и Александр пришли в процессе совместной работы над игрою. Кроме того этот документ является частью большой работы по выстраиванию рабочего процесса создания компьютерных игр.

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

          Читать дальше →
        • 19 первых шагов для оффлайнового магазина в сети


            Чеклист того, что нужно сделать сразу после открытия магазина в реальном мире для его полноценного «обживания» в сети. Просто напоминалка, которую я нарыл во внутренних документах. Возможно, эта штука кому-то будет полезна. И, возможно, кто-то вспомнит ещё пару пунктов.

            Внутри — сам чеклист и примеры из нашей практики.

            Читать дальше →
          • Семантическое управление версиями 1.0.0-rc.1

            • Translation
            В мире разработки программного обеспечения, существует страшное место, называемое «ад зависимостей». Чем больше ваша система, тем больше шанс, что в один из дней вы попадете в эту ловушку.

            В системе с большим количеством зависимостей, выпуск новых пакетов может быстро превратиться в кошмар. Если зависимости слишком прочные, вы не можете обновить пакет, не обновив при этом версии всех зависимых пакетов. Если зависимости слишком свободные, у вас возникнут проблемы с распущенностью версий. «Ад зависимостей», это когда слишком прочные, или наоборот, слишком свободные зависимости не дают вам легко и безопасно развивать ваш проект.
            Читать дальше →
            • +37
            • 10.6k
            • 5
          • Метод Виолы-Джонса (Viola-Jones) как основа для распознавания лиц

              Хотя метод был разработан и представлен в 2001 году Полом Виолой и Майклом Джонсом [1, 2], он до сих пор на момент написания моего поста является основополагающим для поиска объектов на изображении в реальном времени [2]. По следам топика хабраюзера Indalo о данном методе, я попытался сам написать программу, которая распознает эмоцию на моём лице, но, к сожалению, не увидел на Хабре недостающей теории и описания работы некоторых алгоритмов, кроме указания их названий. Я решил собрать всё воедино, в одном месте. Сразу скажу, что свою программу успешно написал по данным алгоритмам. Как получилось рассказать о них ниже, решать Вам, уважаемые Хабрачитатели!
              Добро пожаловать под кат!
            • Upgrade Viola Jones

                В моём предыдущем топике я старался показать, как метод Viola Jones работает, с помощью каких технологий и внутренних алгоритмов. В данном посте, дабы не прерывать цепочку, будет также много теории, будет показано за счет чего можно улучшить и до того прекрасный метод. Если здесь описать еще и программную реализацию, то будет огромное полотно, которое читать будет очень неудобно, и смотреться это никак не будет — решено разбить объем информации на два отдельных поста. Ниже — теория, мало картинок, но много полезного.
                Заинтересованных прошу под кат
              • Реалистичные тени при помощи CSS3 без использования изображений

                  Привет, Хабр!

                  Хочу поделиться замечательным мастер-классом по созданию реалистичных теней для блоков на чистом CSS, найденном на просторах рунета по адресу http://mainview.ru/css/realistichnye-teni-pri-pomoshhi-css3-bez-ispolzovaniya-izobrazhenij. Естественно, для того, чтобы примеры работали как надо, необходим браузер с поддержкой CSS3.

                  image

                  Читать дальше →
                • Вертикальный скроллинг содержимого страницы в стиле Mac OS X Lion

                    Добрый день, Хабр!

                    Не так давно я оставлял весьма категоричный комментарий в топике о модернизации скроллбаров а, буквально, через пару дней был вынужден сам решать задачу о его (скроллбара) модернизации. Так уж сложились звёзды, что в пользовательском интерфейсе одного из проектов стандартной полосе прокрутки место было найти можно, но крайне нежелательно. Из всех возможных вариантов было выбрано нечто среднее между скроллбаром нового Gmail'а, благо задачи похожи и Mac OS X Lion, потому что «ох, они круты ». Я вооружился js и jQuery, и на свет было произведено это.
                    Читать дальше →
                  • Диоды. For dummies

                    Введение


                    Диод — двухэлектродный электронный прибор, обладает различной проводимостью в зависимости от направления электрического тока. Электрод диода, подключённый к положительному полюсу источника тока, когда диод открыт (то есть имеет маленькое сопротивление), называют анодом, подключённый к отрицательному полюсу — катодом. (wikipedia)

                    Все диоды можно разделить на две большие группы: полупроводниковые и неполупроводниковые. Здесь я буду рассматривать только первую из них.

                    В основе полупроводникового диода лежит такая известная штука, как p-n переход. Думаю, что большинству читателей о нем рассказывали на уроках физики в школе, а кому-то более подробно еще и в институте. Однако, на всякий случай приведу общий принцип его работы.
                    Читать дальше →
                  • Fakeroot, XCode и PackageMaker

                    Хочу поделиться своим опытом адаптации fakeroot для использования на маке в связке с XCode. Fakeroot запускает программы в особом окружении, которое эмулирует сессию супер-пользователя. Права root могут потребоваться при сборке инсталлятора с помощью PackageMaker.

                    Читать дальше →
                  • MVC в Objective-C или калькулятор для iOS 5

                    Предыстория


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

                    Первое на что упал мой взгляд- это виртуальная школа iTunesU. Здесь я нашел лекции курса CS 193P которые ведут разработчики эпл для студентов Стэнфордского университета. Лекции достаточно хорошо охватывают базовые особенности языка и нативных фрэймворков, однако есть одно НО– лекции на английском и никакого перевода к ним нету. Для меня лично проблем это не вызвало, потому что Aple по всей видимости выбирает на эти лекции только кандидатов с хорошо поставленной речью, и прожитые в США 8 месяцев дали мне возможность смотреть лекции в оригинале и учится у «носителей языка» (шучу-шуткую).

                    Так как каждый год выходит новая версия Xcode, а лекции стэнфорда в которых рассматривается именно текущая версия становятся доступны с опозданием в семестр, я решил написать серию статей, которые будут идти по практической части (!) данного курса. Так как я слушал лекции осени 2010 для меня будет практическт полезным написать программу в xcode 4.2 который был изначально разработан под 3ю версию. Здесь я не буду углублятся в особенности ObjC а буду давать голую практику.
                    Читать дальше →
                  • Как работает yield

                    • Translation
                    На StackOverflow часто задают вопросы, подробно освещённые в документации. Ценность их в том, что на некоторые из них кто-нибудь даёт ответ, обладающий гораздо большей степенью ясности и наглядности, чем может себе позволить документация. Этот — один из них.

                    Вот исходный вопрос:
                    Как используется ключевое слово yield в Python? Что оно делает?

                    Например, я пытаюсь понять этот код (**):
                    def _get_child_candidates(self, distance, min_dist, max_dist):
                        if self._leftchild and distance - max_dist < self._median:
                            yield self._leftchild
                        if self._rightchild and distance + max_dist >= self._median:
                            yield self._rightchild
                    

                    Вызывается он так:
                    result, candidates = list(), [self]
                    while candidates:
                        node = candidates.pop()
                        distance = node._get_dist(obj)
                        if distance <= max_dist and distance >= min_dist:
                            result.extend(node._values)
                            candidates.extend(node._get_child_candidates(distance, min_dist, max_dist))
                            return result
                    


                    Что происходит при вызове метода _get_child_candidates? Возвращается список, какой-то элемент? Вызывается ли он снова? Когда последующие вызовы прекращаются?

                    ** Код принадлежит Jochen Schulz (jrschulz), который написал отличную Python-библиотеку для метрических пространств. Вот ссылка на исходники: http://well-adjusted.de/~jrschulz/mspace/

                    Подробный и обстоятельный ответ
                  • JavaScript паттерны… для чайников

                      Однажды вечером, сразу после того, как я закончил разбираться с наследованием в JS, мне пришла в голову идея, что пора бы заняться чем-нибудь посложнее — например паттернами. На столе внезапно оказалась книжка Gof, а на экране ноутбука появился труд с названием «JavaScript patterns».

                      В общем, спустя пару вечеров, у меня появились описания и реализации на JavaScriptе самых основных паттернов — Decorator, Observer, Factory, Mediator, Memoization (не совсем паттерн, а скорее техника, но мне кажется что она прекрасно в этот ряд вписывается) и Singleton.

                      Читать дальше →
                    • Несколько полезных сервисов

                        Хочу поделиться ссылками на несколько полезных сервисов. Некоторые из них помогут сэкономить время, другие — сделают за Вас незнакомую/нелюбимую работу. Список разбит по категориям, чтобы было легче ориентироваться.

                        Сервисы опросов
                        userreport.com (добавил Romanych)
                        simpoll.ru
                        webanketa.com (добавил mihass)

                        Кнопки постинга в социальные сети
                        Кнопка от Яндекса
                        addthis.com (добавил UksusoFF)
                        share42.com
                        Читать дальше →
                      • Линейная алгебра для разработчиков игр

                        • Translation
                        • Tutorial
                        Эта статья является переводом цикла из четырёх статей «Linear algebra for game developers», написанных David Rosen и посвящённых линейной алгебре и её применению в разработке игр. С оригинальными статьями можно ознакомиться тут: часть 1, часть 2, часть 3 и часть 4. Я не стал публиковать переводы отдельными топиками, а объединил все статьи в одну. Думаю, что так будет удобнее воспринимать материал и работать с ним. Итак приступим.
                        Читать дальше →
                      • Перенаправление функций в Mach-O библиотеках

                          В предыдущей статье был описан метод перехвата вызовов для разделяемых библиотек ELF. А сейчас мы посмотрим как сделать то же самое с библиотеками в формате Mach-O.

                          Вкратце напомню ситуацию. Имеем программу под Mac OS X, которая пользуется множеством сторонних динамически-компонуемых библиотек, которые, в свою очередь, также пользуются функциями друг друга.

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

                          Как обычно, нетерпеливые могут все скачать и попробовать прямо сейчас.
                          Решение и много картинок
                        • Юнит-тесты в Cocoa

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

                            Читать дальше →
                            • +14
                            • 10.8k
                            • 5