Search
Write a publication
Pull to refresh
1
0
Send message

Глубокое погружение в систему рендеринга WPF

Reading time7 min
Views28K
На перевод этой статьи меня подтолкнуло обсуждение записей «Почему WPF живее всех живых?» и «Семь лет WPF: что изменилось?» Исходная статья написана в 2011 году, когда Silverlight еще был жив, но информация по WPF не потеряла актуальности.

Сначала я не хотел публиковать эту статью. Мне казалось, что это невежливо — о мертвых надо говорить либо хорошо, либо ничего. Но несколько бесед с людьми, чье мнение я очень ценю, заставили меня передумать. Вложившие много усилий в платформу Microsoft разработчики должны знать о внутренних особенностях ее работы, чтобы, зайдя в тупик, они могли понимать причины произошедшего и более точно формулировать пожелания к разработчикам платформы. Я считаю WPF и Silverlight хорошими технологиями, но… Если вы следили за моим Twitter последние несколько месяцев, то некоторые высказывания могли показаться вам безосновательными нападками на производительность WPF и Silverlight. Почему я это писал? Ведь, в конце концов, я вложил тысячи и тысячи часов моего собственного времени в течение многих лет, пропагандируя платформу, разрабатывая библиотеки, помогая участникам сообщества и так далее. Я однозначно лично заинтересован. Я хочу, чтобы платформа стала лучше.


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

Методы монетизации интернет проектов

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

Подробности

Custom View, скроллинг и жесты в Android на примере простого вьювера картинок

Reading time10 min
Views51K
В статье описываются детали реализации простого вьювера картинок и показываются некоторые тонкости имплементации скроллинга и обработки жестов.
Читать дальше →

Основы пространственной и частотной обработки изображений. Лекции от Яндекса

Reading time18 min
Views65K
Мы продолжаем публиковать лекции Натальи Васильевой, старшего научного сотрудника HP Labs и руководителя HP Labs Russia. Наталья Сергеевна читала курс, посвящённый анализу изображений, в петербургском Computer Science Center, который создан по совместной инициативе Школы анализа данных Яндекса, JetBrains и CS-клуба.



Всего в программе — девять лекций. Первая из них уже была опубликована. В ней рассказывалось о том, в каких областях встречается анализ изображений, его перспективах, а также о том, как устроено наше с вами зрение. Вторая лекция посвящена основам обработки изображений. Речь пойдет о пространственной и частотной области, преобразовании Фурье, построении гистограмм, фильтре Гаусса. Под катом — слайды, план и дословная расшифровка лекции.
Читать дальше →

Лекции Технопарка. 1 семестр. С/С++

Reading time6 min
Views110K
Мы продолжаем наши еженедельные публикации учебных материалов Технопарка. Предыдущие лекции были посвящены web-технологиям в целом, а также алгоритмам и структурам данных. В третьем блоке лекций рассказывается о языках С и С++.

Лекция 1. Язык С. Основы организации и использования оперативной и сверхоперативной памяти


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


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

Android. Пару слов об MVP + rxJava

Reading time5 min
Views75K


Работая с Android часто можно видеть, как весь функциональный код помещается в методы жизненного цикла activity/fragment. В общем-то такой подход имеет некоторое обоснование — «методы жизненного цикла» всего лишь хэндлеры, обрабатывающие этапы создания компонента системой и специально предназначенные для наполнения их кодом. Добавив сюда то, что каркас UI описывается через xml файлы, мы уже получаем базовое разделение логики и интерфейса. Однако из-за не совсем «изящной» структуры жизненного цикла, его зависимости от множества флагов запуска, и различной (хоть и похожей) структуры для разных компонентов, эффективно воспользоваться подобным разделением не всегда бывает возможно, что в итоге выливается в написании всего кода в onCreate().
Читать дальше →

Как растаращить class-файл

Reading time4 min
Views45K
Обычно при компиляции Java-файла получаются .class-файлы примерно того же размера, что и исходник. Меня заинтересовало, можно ли по небольшому исходнику сделать .class-файл, который больше, сильно больше исходника.

Можно поискать какие-то короткие конструкции языка, которые компилируются в длинные цепочки байткода, но линейный прирост меня не устраивал. Я сразу подумал про компиляцию finally-блоков: про неё уже писали на Хабре. Если вкратце, то для каждого finally-блока при непустом try-блоке создаётся минимум два варианта в байткоде: для случая нормального завершения try-блока и для случая завершения с исключением. В последнем случае исключение сохраняется в новую локальную переменную, выполняется код finally, затем исключение достаётся из локальной переменной и перебрасывается. А что если внутри finally снова разместить try-finally и так далее? Результат превзошёл все ожидания.
Читать дальше →

Фрактальное пламя — алгоритм построения

Reading time4 min
Views29K


Фрактальное пламя (или фрактальные искры, англ. fractal flame) – алгоритм, предложенный Скоттом Дрейвсом (Scott Draves) и использующий для построения изображений системы итерируемых функций (СИФ). Благодаря разным значениям seed для генератора псевдослучайных чисел можно получить множество разнообразных «картин». Хотя фрактальность в них просматривается далеко не всегда, результаты получаются очень интересными.

Под катом – краткое описание основных моментов реализации алгоритма.
Читать дальше →

Как настроить проект LibGDX с Gradle, Google Play Services

Reading time7 min
Views15K
Доброго времени суток.

Мы с товарищем занимаемся разработкой под Android уже несколько лет. Создавали игрушки на чистом Android, OpenGL, а также Unity3d. Главной проблемой первых двух технологий является непереносимость на разные мобильные платформы. Собственно, именно поэтому мы стали использовать Unity3d.

Это довольно интересная штука. Она сочетает в себе огромные возможности программирования при помощи мышки, а также программирования на скриптовом языке, смахивающем на C#. Так как мы Java разработчики, то хотелось написать что-то кроссплатформенное на Java. Выбор пал на LibGDX. Открыв мануал и скачав пару специальных сборщиков скелета проекта на LibGDX, начали работать.

В результате большую часть времени мы потратили не на программирование, но на настройку проекта, настройку gradle, а также добавление Google Play Services. В результате, набив шишки, решили написать эту статью.
Читать дальше →

История про realloc (и лень)

Reading time9 min
Views48K

Простой макрос


Все началось с простого макроса: (приблизительный код)
#define ADD_BYTE(C) do {            \
  if (offset == capa) {             \
    if (capa < 16) {                \
      capa = 16;                    \
    } else {                        \
      capa <<= 1;                   \
    }                               \
    buffer = realloc(buffer, capa); \
    assert(buffer != NULL);         \
  }                                 \
  buffer[offset++] = (C);           \
} while(0)


Для тех, кто не знаком с языком программирования C, поясню: этот простой макрос добавляет байт «C» в динамически выделяемый буфер (buffer), размер которого (в байтах) равен capa. Следующая позиция для записи определяется при помощи параметра offset. При каждом заполнении буфера происходит двукратное увеличение его объема (начиная с минимального размера в 16 байт).

Мы добавляем байты в динамический буфер — это одна из наиболее распространенных операций практически в любой программе (для работы со строками, массивами и т. п.).

Но как понять, насколько эффективна стратегия перераспределения?
Читать дальше →

Укрощение строптивого (на самом деле, нет) FineReader

Reading time7 min
Views46K

После короткого рассказа о том, как устроен ABBYY FineReader (aka «теоретическая часть»), самое время перейти к применению полученных знаний. И да, котиков под катом нет: всё очень серьёзно.

Как пользователю поучаствовать в обработке документа


Чтобы не изобретать велосипед, начну с простой и понятной схемы из Справки (см. рисунок справа).

Теперь, зная список всех операций, посмотрим на примерах – что может пойти не по плану и как с этим бороться.
Читать дальше →

Пишем бота для MMORPG с ассемблером и дренейками. Часть 0

Reading time4 min
Views103K
Привет, %username%! Покопавшись в статьях хабра, я нашел несколько оных про написание ботов для MMORPG. Несомненно это очень интересные и познавательные статьи, но возможности в них весьма скудны. Что если, например нужно пофармить мобов или руду по заданному маршруту убивая агрессивных мобов, игроков и всех кто будет на Вас нападать по пути, выкрикивая им вслед непристойности, да что б еще и определить не смогли. В общем полная эмуляция среднестатистического MMORPG игрока. Написание макросов для AutoIt, симуляция кликов в окне, анализ пикселей под курсором — это совсем не наш вариант. Заинтриговал? Добро пожаловать под кат!
Грязные подробности

Что я узнал о будущем после прочтения 100 научно-фантастических книг

Reading time10 min
Views56K
Что я узнал о будущем после прочтения 100 научно-фантастических книг

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

Я начал читать научную фантастику, просто чтобы скоротать время. У меня остались хорошие воспоминания о прочтении «Парк Юрского периода» в детстве. Я продолжил читать, потому что я заметил, что эта книга дала мне кое-что: сильное воображение, нелюбовь к обыденности.

Я поймал себя на том, что мои идеи отличаются от тех, которые множество черпают из тех же статей TechCrunch, Hacker News, Хабрахабра и других «ежедневных» сайтов жителей Силиконовой (Кремниевой) долины. Мой бизнес — это продажа идей, а эти книги одновременно настоящее сокровище и мой инструментарий.

Как говорит футуролог Джейсон Сильва:
«Воображение позволяет нам ощущать восхитительные будущие возможности, выбрать наиболее удивительную, и двигать настоящее вперед, чтобы в конце-концов встретить её.»

Я думаю, что чтение этих книг помогло мне и в создании идеи и в движении к ней.

Каждая хорошая научная фантастика, по сути, это мысленный эксперимент, и я хотел бы запустить свой собственный прямо сейчас:
Ещё две тысячи слов

Unity: Сборка под Android или «размер имеет значение»

Reading time5 min
Views56K
В некоторых случаях необходимо работать над снижением размера сборки для Андроид. Например, установка тяжеловесных APK для пользователей мобильного интернета может влететь в копеечку. Превышение размера APK в 50 Мб в Google Play выливается в дополнительные трудности при аплоаде.



Мы разрабатывали под Андроид на Unity 2D-игру, которая изобилует картинками (большинство с областями прозрачности) и разнообразными звуками, и столкнулись с проблемой размера APK. Забегая вперед скажу, что решив ее и снизив вес в 1,5 раза, мы получили в 1,5 раза больше скачиваний. Заставляет задуматься, не правда ли?
Читать дальше →

Средства, которые позволили нам ускорить разработку игры

Reading time7 min
Views35K
Вид на Котиков из редактора Unity

Раньше я работал над созданием мобильных игр как гейм-дизайнер или продюсер, но сам еще никогда профессионально не писал код. Несколько месяцев назад мне захотелось это исправить и сделать игру своими руками. Так, спустя два месяца работы, силами трех человек в App Store и Google Play появились «Котики». В своей истории я хочу поделиться приобретенным опытом и рассказать о средствах разработки, которые позволили нам быстро сделать эту игру.
Читать дальше →

Чтобы распознавать картинки, не нужно распознавать картинки

Reading time18 min
Views237K
Посмотрите на это фото.



Это совершенно обычная фотография, найденная в Гугле по запросу «железная дорога». И сама дорога тоже ничем особенным не отличается.

Что будет, если убрать это фото и попросить вас нарисовать железную дорогу по памяти?

Если вы ребенок лет семи, и никогда раньше не учились рисовать, то очень может быть, что у вас получится что-то такое:
Осторожно, тяжелые гифки

Поиск в ширину (BFS) на С#

Reading time4 min
Views49K
Сразу скажу, что статья больше подойдёт людям, желающим познакомиться с поиском в ширину, и новичкам, осваивающим программирование. К тому же, когда мне понадобился этот метод, я нигде не нашёл наглядного рабочего примера на C#.

Устно об алгоритме:

Разберём алгоритм на произвольном графе (для простоты примера рёбра не имеют вес).

Последовательность алгоритма заключается в следующим:

1. Выбирается произвольно вершина графа (отмечается серым).
2.Последовательно рассматриваются вершины (так же отмечаются серым), связанные с нашей первой вершиной (после этого она становится не серой, а чёрной).
3. Выполняется пункт 2 для отмеченных (серых) вершин до тех пор, пока все вершины не будут закрашены чёрным.


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

Navigation Drawer в стиле Material Design за 5 минут

Reading time9 min
Views116K
imageВ данной статье я расскажу, как быстро добавить в ваше приложение для Android боковое меню (aka Navigation Drawer) в стиле Material Design. Для этого мы воспользуемся библиотекой, любезно предоставленной Mike Penz.

У вас получится Navigation Drawer, который:

  • Соответствует последним рекомендациям по дизайну (Google Material Design Guidelines);
  • Поддерживает использование нескольких Drawer (можно выдвигать второй справа);
  • Поддерживает использование бейджей;
  • Имеет простой и понятный интерфейс (API);
  • Может выползать как под, так и поверх Status Bar;
  • Позволяет менять иконки, цвета, бейджи во время выполнения;
  • Использует AppCompat support library;
  • Работает, начиная с API 14.

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

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

Создание 3D сканера из вебкамеры, лазера, и еще кучки радиодеталей

Reading time6 min
Views142K
В прошлом году мы с другом были на летней школе. На ней необходимо было сделать проект. Прочитав две статьи про создание 3d сканеров (раз, два) мы решили попробовать свои силы в его сборке и по возможности улучшить его конструкцию. Мы даже не представляли, что из этого получится и тем более не представляли, что победим с ним на нескольких научно-инженерных выставках. Но по порядку. Кому интересно узнать результат, добро пожаловать под кат (много фотографий).

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

Information

Rating
Does not participate
Registered
Activity