Pull to refresh
0
@braindamagedread⁠-⁠only

User

Send message

Организация памяти в текстовом редакторе

Reading time6 min
Views36K
Каждый, кто пытался запрограммировать хотя бы простейший редактор текста на низком уровне, сталкивался с задачей организации памяти для хранения редактируемого текста. Структура данных для хранения текста должна удовлетворять следующим требованиям:
  1. иметь малые накладные расходы по памяти. Большая часть доступной памяти должна использоваться для хранения текста, а не служебной информации;
  2. допускать эффективную вставку и удаление в произвольном месте текста.

Удовлетворить эти требования одновременно непросто. Если рассмотреть широкоизвестные структуры данных, такие как массивы, списки, деревья, стеки, очереди, кольцевые буфера — то такой структуры, которая бы позволила эффективно выполнить оба требования, не встречается. В случае массива имеем незначительные накладные расходы по памяти, но операция вставки имеет сложность O(n), где n — размер редактируемого текста. В случае списка сложность вставки и удаления составляет O(1), однако накладные расходы по памяти в несколько раз превышают размер собственно текста. Деревья, кучи, кольцевые буфера, ассоциативные массивы и прочие структуры и вовсе неприменимы для хранения текста в редакторе.

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

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

Несмотря на то, что эта структура данных была открыта давно и использовалась в текстовых редакторах на старых ЭВМ в 8-битную эпоху, это тайное знание предков было в значительной мере утеряно и в современных редакторах встречается редко. Попробуйте открыть файл, состоящий из одной строки мегабайт на 10, в Notepad или Far. Вставка и удаление символов будет длиться секундами.
Читать дальше →

Практический опыт переноса ресурсов из Flash в Unity 3D

Reading time4 min
Views20K
Буквально недавно мы с товарищами запустили наш первый проект под iOS — игрушку про змейку Shadow Snake. Хотелось опробовать разработку под iPad, поэтому решили перенести уже готовый проект, сделанный на Flash, тем более, что механика позволила очень гармонично использовать возможности сенсорного управления.

Конечно, первой идеей было попробовать AIR SDK — проект запустился, но из динамичной аркады он превратился в аркаду “походовую”. FPS был ужасно низким отчасти из-за того, что практически вся графика во флешке была векторной, а мобильный AIR с ней не очень дружит. Я уже не помню точно, какой AIR на тот момент был доступен (2.x или первые версии 3.x), но мы проводили эксперименты как с векторной графикой, так и с другим проектом, сделанным в растре на Flixel. Результаты не очень нас обрадовали. Сейчас, я смотрю, прогресс сдвинулся, Adobe даже выпустила какой-то новый компилятор. В любом случае, в то время было решено использовать Unity 3D.

Unity 3D на тот момент уже хорошо зарекомендовала себя в мобильных играх и имела хорошую визуальную среду для создания игровых сцен. Благодаря этому можно было разделить непосредственно программирование, подготовку ресурсов и дизайн игровых уровней и распределить эти задачи по разным членам команды. Кроме того, по роду основной деятельности я давно уже работаю с C#, поэтому с Unity я чувствовал себя комфортно.

Встала задача, как перенести графику и анимации (в том числе составные) в новый проект.
Читать дальше →

Unity3d прекращает поддержку Flash

Reading time1 min
Views25K
Команда Unity приняла сложное решение по отказу от Flash. Как следствие, прекращается продажа лицензий под эту платформу, поддержка остается для 4.x.

Названы следующие причины:

  • Нет уверенности, что Adobe будет развивать Flash. Об этом говорит отмена разработки Flash Player Next, нестабильность последних сборок, переброс сотрудников Adobe с Flash Player на другие проекты.*
  • Подорвано доверие как у разработчиков, так у команды Unity к Flash из-за введения, а после отмены модели распределения доходов (Stage3D + FastMemory). Отныне платформа более не может считаться надежной и постоянно развивающейся.
  • Разработчики постепенно отходят от Flash, в то время как у Unity Web Player наблюдается беспрецедентный рост в последние месяцы.

* Видимо имеется ввиду переход тимлида флеша Thibault Imbert на развитие Web Platform.

История создания стартапа по разработке мобильных игр

Reading time8 min
Views66K
В мае прошлого года я решил создать стартап по разработке социальных и мобильных игр. Спустя год, можно сказать, что авантюра удалась и немного рассказать о полученном опыте.

image

Читать дальше →

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

Reading time11 min
Views40K
Привет Хабра!

Эта статья продолжает цикл статей об игровом движке StalinGrad. В прошлой статье мы насиловали DHTML, а в этой — будем насиловать архитектуру и прототипы.

Кода практически не будет, поэтому, если вы не web разработчик, можете просто почитать про архитектуру и ООП. И таки да — про HTML5 тут снова ничего не будет, только DHTML-хардкор :)



Сразу короткое демо:
Пример 1 — паралельные миры
Пример 2 — один мир с разных камер
Пример 3 — боты
Пример 4 — нянкэт, облака и портальная пушка
Читать дальше →

Почему мы не тестируем. Практика проведения технического интервью

Reading time5 min
Views52K
Я руковожу разработкой ПО уже достаточно много лет. За эти годы мне пришлось провести более тысячи интервью и посчастливилось захантить больше сотни классных программистов. Естественно, у меня сложилась определенная практика проведения технических собеседований, которой я собираюсь поделиться. Возможно, это окажется кому-то полезным.

Ставим задачу
Кого ищем? Ищем эффективных бойцов. Известно, что эффективность программистов со схожим опытом может отличаться в 10 раз (Ф. Брукс) или даже в 27 раз (Р. Гласс). Сразу, оговорюсь, эффективность это не только количество трупов врагов реализованных требований к ПО на единицу трудозатрат, но и умение результативно взаимодействовать с окружающими. Это важно, потому что по моим наблюдениям 50% проектных человеко-часов тратится на коммуникации. У нас это называется «синхронизация ментальных моделей».

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


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

Разработка клиентской части игры для Windows 8

Reading time5 min
Views9.7K
Добрый день. Стараясь читать материалы о разработке игр нигде не встречал цифр по времени разработки, связи со сложностью и материальными средствам. Об этом хочется поговорить на нашем опыте. Конечно, можно говорить о сложности лишь субъективно, но связь со временем все же будет прослеживаться. Каждый сможет выделить коэффициент связи, бегло просмотрев приложение и статью. Обращаю внимание, разговор пойдет исключительно о клиентской части, серверная часть заранее готова, покрыта тестами и какое-то время работала с клиентами на других платформах. Но не обойдется без небольших изменений серверной части, которые пойдут ей на пользу.
Читать дальше →

Проектирование сайта как консультационная услуга

Reading time4 min
Views15K
Два с половиной года назад хабровчан нужно было убеждать в необходимости проектирования. Сегодня поисковая выдача Яндекса по запросу «проектирование сайта» содержит больше сотни тысяч страниц (к сожалению, не всегда хорошего качества). Это говорит о консенсусе в отрасли — проектирование сайтов необходимо.

В новой статье мы хотим развеять очень устойчивое и популярное заблуждение: «результат проектирования — документ или прототип». Такая мысль, по умолчанию прошитая в головах всех клиентов и почти всех исполнителей, выливается в серьёзные финансовые потери.
Как же так?

Загружаем данные в Oracle

Reading time14 min
Views93K
В своей предыдущей статье я показал, что при использовании асинхронных запросов, скорость опроса устройств по протоколу SNMP может достигать 9000 запросов в секунду (при условии, что у нас есть достаточное количество устройств для формирования такого потока ответов). Вопрос о том, что делать с этим потоком данных остался открытым.

Обычной практикой является обработка данных мониторинга посредством RDBMS (таких как Oracle Database). Но способны ли традиционные реляционные базы данных справиться с такой нагрузкой? Попробуем в этом разобраться.
Читать дальше →

Кому поручить производство электроники: от собственного завода до фаблесс-компании

Reading time5 min
Views32K


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

Как и обещали, сегодня мы ответим на важный вопрос: «Кому поручить производство?». Разберем достоинства и недостатки трех вариантов ответа: использование собственной площадки, подключение контрактных производителей или работа с единым технологическим партнером.
Читать дальше →

PlayScript

Reading time6 min
Views8.2K
Примечание переводчика: неделю назад Zynga открыла исходники проекта, упрощающего перенос игр с Flash на мобильные платформы. Так как на хабре много людей, которые пишут игры на флеше, либо под мобильные платформы, представляю вам перевод текста со страницы данного проекта. Вполне вероятно, что вы захотите использовать его в своих разработках.

Что такое PlayScript?


PlayScript это проект с открытым исходным кодом, представляющий из себя ActionScript-совместимый компилятор и Flash-совместимую среду выполнения, которая работает на Mono .NET и предназначена для создания мобильных приложений с помощью MonoTouch и Mono for Android. Сочетание Adobe FlashBuilder для создания веб-приложений и Xamarin Studio для мобильных позволит разрабатывать мультиплатформенные приложения с использованием всех преимуществ данных IDE, а также с возможностью доступа к нативным API на мобильных платформах.

Читать дальше →

Радиоприемник 60-1700 МГц на RTL2832 за 20 баксов или SDR для начинающих

Reading time4 min
Views328K
В этой статье я расскажу о том, как, потратив совсем небольшие деньги и немного времени, получить радиоприемник, способный принимать что угодно в диапазоне 60-1700 МГц (радиостанции, звуковое сопровождение ТВ, радиолюбителей, карманные радиостанции и многое другое). Для этого
мы используем DVB-тюнер на чипе RTL2832, работающий в специальном режиме, который можно приобрести за $20 или даже дешевле.


Читать дальше →

Oracle 12c. Новые фичи приносят новые подводные камни

Reading time5 min
Views24K
Всем привет.

Разбирая новые возможности Oracle 12c, то тут, то там сталкиваюсь с подводными камнями, когда не всё работает так, как ожидалось, падает или просто не очевидно. Конечно, это стандартная ситуация когда в первом релизе новой версии много сырого… но, как известно, предупреждён — значит вооружен. Вероятно, кому-то пригодится, чтобы не повторять мои грабли.

Пишу грабли в порядке наступления на них.

PS: edited: добавил в конце баг о котором забыл написать сразу (использование в PL/SQL, SQL-конструкций в WITH которых испоьзован PL/SQL).

Читать дальше →

Роль тимлида: что остается менеджерам?

Reading time4 min
Views38K
image

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

В последнее время в области IT и digital все чаще слышится слово «тимлид». Но при детальном рассмотрении видно, что все по-своему понимают эту профессию.

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

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

Читать дальше →

Пишем примитивный и никому не нужный компилятор

Reading time9 min
Views177K
Я считаю, что каждый программист должен написать свой компилятор.

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

В посте мы рассмотрим, как можно написать свой компилятор C-подобного языка меньше чем за час, исписав всего 300 строчек кода. В качестве бонуса, сюда входит и код виртуальной машины, в байткод которой будет компилироваться исходник.
Читать дальше →

Vert.x — асинхронный, event-driven фреймворк, созданный под влиянием node.js. Часть 1

Reading time2 min
Views35K
Всем привет!
На данный момент очень трендово использовать node.js. Однако не всем он нравится. В данном обзоре, я бы хотел рассказать немного о конкуренте, который был написан под влиянием node.js
Vert.x это асинхронный, event-driven фреймворк, цели которого пересекаются с популярным node.js. Высокая производительность, простая асинхронность и конфигурирование — это все по vert.x.
Первая версия фрейворка, была выпущена в 2012 году, в то время как node.js был выпущен в 2009. Однако, уже поддерживается VMware и может запускаться на CloudFoundry.
Основные характеристики продукта под катом:
Читать дальше →

Тонкости благополучного git-merge

Reading time8 min
Views374K

Вступительное слово


Считается, что «киллер фичей» СКВ Git является легковесное ветвление. Я ощутил это преимущество в полной мере, ведь я перешел на Git с SVN, где ветвление было достаточно дорогим процессом: для создания ветки нужно было скопировать весь рабочий каталог. В Git все проще: создание ветки подразумевает лишь создание нового указателя на определенный коммит в папке .git/refs/heads, который является файлом с 40 байтами текста, хешем коммита.

Основными командами пользовательского уровня для ветвления в Git являются git-branch, git-checkout, git-rebase, git-log и, конечно же, git-merge. Для себя я считаю git-merge зоной наибольшей ответственности, точкой огромной магической энергии и больших возможностей. Но это достаточно сложная команда, и даже достаточно длительный опыт работы с Git порой бывает недостаточным для освоение всех ее тонкостей и умения применить ее наиболее эффективно в какой-либо нестандартной ситуации.

Попробуем же разобраться в тонкостях git-merge и приручить эту великую магию.

Здесь я хочу рассмотреть только случай благополучного слияния, под которым я понимаю слияние без конфликтов. Обработка и разрешение конфликтов — отдельная интересная тема, достойная отдельной статьи. Я очень рекомендую так же ознакомиться со статьей Внутреннее устройство Git: хранение данных и merge, содержащей много важной информации, на которую я опираюсь.
Читать дальше →

The Good, the Bad and the Ugly code

Reading time7 min
Views30K

Хороший код или плохой? Лично для меня хороший код обладает следующими качествами:
  • Код легко понятен разработчикам разной квалификации и хорошо структурирован
  • Код легко изменять и поддерживать
  • Приложение выполняет свои функции и обладает достаточной, для выполняемого круга задач, отказоустойчивостью

Несмотря на короткое описание, о том, как добиться выполнения трех этих условий, написано много толстых книг.

Почему именно эти критерии? Сразу оговорюсь, речь сейчас идет о разработке ПО для бизнеса (enterprise application). Критерии оценки кода для систем реального времени, самолетов, систем жизнеобеспечения и МКС отличаются.
Читать дальше →

Порт завершения (Completion Port)

Reading time7 min
Views42K
Привет. Сейчас я расскажу вам о механизме IO Completion Ports в Windows. Разработчики описывают порт завершения как «средство, повышающее производительность приложений, часто использующих операции ввода/вывода». В общем-то, они и не врут, поэтому IOCP часто используют при написании масштабируемых серверных приложений. Однако же считается, что порт завершения — тема мудреная и тяжелая для понимания.
Читать дальше →

Process Explorer vs Process Hacker

Reading time6 min
Views95K
Многим людям рано или поздно приходит в голову мысль, что стандартный менеджер процессов Windows весьма слаб по функционалу. Начинаются поиски альтернативы, которые в основном тут же и заканчиваются при обнаружении Process Explorer от Марка Руссиновича. Вот и Хабр даже советует эту программу.

Что тут можно сказать? Конечно, Process Explorer — это хорошая программа. Однако, не идеал. Именно в пику её неидеальности существует не только бесплатная, но и свободная альтернатива — Process Hacker. А теперь мы детально и по пунктам рассмотрим, почему Process Hacker не просто «чуть-чуть лучше», а лучше на порядок, лучше на столько, что переводит программу для продвинутого пользователя в класс инструмента системного программиста или администратора.
Читать дальше →

Information

Rating
Does not participate
Works in
Registered
Activity