Pull to refresh
41
Karma
0
Rating
Андрей Бибичев @bibigone

User

  • Followers 7
  • Following 6

История противостояния OpenGL и Direct3D

Game development *
Translation
Перед тем как мы начнём, скажу: я знаю об OpenGL гораздо больше чем о Direct3D. Я в жизни не написал ни одной строки кода для D3D, и я писал руководства по OpenGL. Так что то что я тут расскажу, не вопрос предвзятости. Теперь это просто история.

Зарождение конфликта
Total votes 213: ↑204 and ↓9 +195
Views 24K
Comments 132

Инструкция-шпаргалка для начинающих

Git *
Tutorial
Если в один прекрасный момент вам ударило в голову желание насадить разумное, доброе, вечное, и пересадить всех с SVN на GIT, сразу встают три проблемы:
  • Объяснить зачем это нужно разработчикам и руководству
  • Ввести в обиход новую схему работы с кодом
  • Научить ничего не подозревающих девелоперов новым техникам
Читать дальше →
Total votes 117: ↑100 and ↓17 +83
Views 128K
Comments 65

Qt приложения в Mac App Store

Qt *
Возможно многие уже задавались вопросом о возможности создания Qt приложения для Mac App Store или отправке уже существующего. Я давно хотел провести пробу этой возможности - как известно Apple и Nokia развивают сейчас разные экосистемы языков/библиотек и можно ожидать много подводных камней связанных с пропуском Qt приложения. Тем не менее это оказалось не так сложно и хотя повозится пришлось достаточно, приложение прошло без проблем и с первого раза.

Читать дальше →
Total votes 37: ↑36 and ↓1 +35
Views 3.9K
Comments 28

Создание Qt+PySide гибридных приложений

Qt *
Sandbox
Возможно вы знаете про PySide, python биндинги к Qt. Также существует PyQt библиотека которая предоставляет аналогичную функциональность но к сожалению ограничена GPL или коммерческой версией. PySide распространяется под LGPL лицензией что даёт удобную возможность пользовать в коммерческих приложениях.

Python даёт возможность очень быстрого создания рабочих приложений и PySide как раз предоставляет такую возможность для Qt разработчиков. По моему опыту создание аналогичного функционала возможно в 1.5-2 раза быстрее чем на C++.

Часто возникает необходимость по быстрому присоединить C++ библиотеку (Qt-подобным интерфейсом) к PySide приложению, или же наоборот стоит задача использования Python скриптов в Qt(C++) приложениях. В обоих случаях нужна автоматическая поддержка API классов от Qt и возможность signal-slot соединений между Qt(C++) и Python(PySide) частями приложения. K сожалению данный вопрос практически не освещён и сделать всё и сразу рабочим довольно сложно.

Итак мы будем создавать гибридное приложение состоящее одновременно из C++ и Python частей и использующее Qt как основную GUI библиотеку.
Читать дальше →
Total votes 40: ↑36 and ↓4 +32
Views 5.3K
Comments 1

Паттерны Command и Strategy с точки зрения функционального программирования

Programming *F# *
Sandbox
В результате изучения функционального программирования в моей голове появились некоторые мысли, которыми я хочу с вами поделиться.
Читать дальше →
Total votes 54: ↑48 and ↓6 +42
Views 11K
Comments 94

Создание простого 3D приложения с помощью ShiVa3D

Game development *Unity3D *
Tutorial
ShiVa3D LogoВ этом году на Хабре довольно популярными стали статьи про написание игр на Unity3D. Но почему-то ещё никто не рассказывал про конкурентов. Сегодня я расскажу о самом главном (на мой взгляд) конкуренте – ShiVa3D.
Читать дальше →
Total votes 26: ↑25 and ↓1 +24
Views 28K
Comments 19

Стоит ли нам использовать повествовательные веб-формы?

UXDepot corporate blog
Tutorial
Представляю вашему вниманию перевод статьи под названием "Should We Use Mad Libs Style Form?" от Cynthia Savard Saucier. Перевели в компании UXDepot специально для пользователей Хабрахабра с одобрением компании Yu Centrik.


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

Однако недавно мы увидели, как появляется новый тип форм. Восхваленные юзабилити экспертом Яредом Спулом и гуру дизайна форм Люком Вроблевски, повествовательные формы (в оригинале Mad Libs) стали очень популярными. Давайте разберемся, что же это такое.

Читать дальше →
Total votes 79: ↑75 and ↓4 +71
Views 2.2K
Comments 46

Создание объектов в Javascript

JavaScript *
Sandbox
Гибкость Javascript позволяет создавать объекты множеством способов. Но как это нередко случается, разнообразие таит в себе множество подводных камней. Из этой статьи Вы узнаете о том, как разглядеть и обогнуть эти опасные рифы.
Читать дальше →
Total votes 133: ↑119 and ↓14 +105
Views 60K
Comments 68

Использование Protocol Buffers на платформе .Net (Часть 1)

.NET *
Предлагаю вашему вниманию введение в использование Protocol Buffers на платформе .Net в формате дискуссии. Я расскажу и покажу что это такое и зачем оно нужно .Net разработчику. Топик требует от читателя начального владения языком C# и системой контроля версий SVN. Так как объем материала превышает среднестатистический объем топиков на хабре, которые не вгоняют хаброюзеров в тоску и не заставляют их скроллить до комментариев, было принято решение разбить его на две части. В первой части мы познакомимся с основами и даже напишем (не)много кода!

Присоединиться к дискуссии.
Total votes 45: ↑38 and ↓7 +31
Views 38K
Comments 33

Создание многоязыкового инсталлятора для Windows с помощью WiX

Фаматек corporate blog
Tutorial
logoВ этой статье я поделюсь с вами практическим опытом, полученным за много лет создания инсталляторов в Фаматек. Под катом — теоретические выкладки и практические инструкции, как безболезненно и «по феншую», совместимым с «Windows Logo Testing» способом создать инсталлятор, предлагающий пользователю выбрать язык установки и устанавливающий продукт на выбранном языке. При этом используются исключительно бесплатные решения.
Ознакомиться с заклинаниями
Total votes 33: ↑28 and ↓5 +23
Views 15K
Comments 3

Пишем простой плагин к веб-браузеру используя FireBreath

Website development *
Как уже писали ранее на Хабре, FireBreath — это фреймворк для разработки кросс-платформенных плагинов, используя технологии NPAPI [1] и ActiveX Control hosts, что позволит использовать плагин в следующих браузерах: Gecko/Firefox, Google Chrome, Apple Safari, Opera, Microsoft Internet Explorer 6, 7, and 8.

Мне пригодился этот фреймворк для следующего: в проекте (веб-приложение) использовался Java-апплет для печати Pdf-файлов напрямую на принтер, но из-за различных проблем с Java Policy и правами, не удалось добиться стабильной работы апплета + различные мелкие баги, как-то захват апплетом фокуса после загрузки или зависание браузера во время печати. Возможно, просто руки кривые. В общем, печать то работала, то нет, и это никого не устраивало.

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

Теперь напишем простой «считай, ничего не делающий» плагин, который будет писать данные в файла в локальной файловой системе.
Читать дальше →
Total votes 57: ↑53 and ↓4 +49
Views 7.6K
Comments 4

Обработка ошибок в Go: Defer, Panic и Recover

Programming *
Translation
В языке Go используются обычные способы управления потоком выполнения: if, for, switch, goto. Есть ещё оператор go, чтобы запустить код в отдельной го-процедуре. А сейчас я бы хотел обсудить менее обычные способы: defer, panic и recover.

Команда defer помещает вызов функции в список. Этот список отложенных вызовов выполняется после того, как объемлющая функция завершит выполнение. Defer обычно используется для упрощения функций, которые занимаются освобождением ресурса.

Например, посмотрим на функцию, которая открывает два файла и копирует содержимое из одного файла в другой:
Читать дальше →
Total votes 29: ↑28 and ↓1 +27
Views 46K
Comments 14

Быстрое умножение многочленов при помощи преобразования Фурье — это просто

Algorithms *
Добрый вечер.
Этот пост посвящён быстрому преобразованию Фурье. Будут рассмотрены прямое и обратное преобразования (в комплексных числах). В следующей части я планирую рассмотреть их применения в некоторых задачах олимпиадного программирования (в частности, одна задача про «похожесть» строк), а также рассказать про реализацию преобразования в целых числах.
БПФ — это алгоритм, вычисляющий значения многочлена степени n=2k в некоторых n точках за время O(n⋅logn) («наивный» метод выполняет ту же задачу за время O(n2)). За то же время можно выполнить и обратное преобразование. Так как складывать, вычитать и умножать массивы чисел гораздо легче, чем многочлены (особенно умножать), БПФ часто применяется для ускорения вычислений с многочленами и длинными числами.
Читать дальше →
Total votes 112: ↑105 and ↓7 +98
Views 67K
Comments 38

Релиз Qt SDK 1.1

Qt *
Translation
Сегодня мы объявляем о выпуске Qt SDK 1.1. Это был длинный путь к релизу, который многие из вас ждали. Если не вдаваться в подробности, вот ссылки для скачивания:
Читать дальше →
Total votes 37: ↑33 and ↓4 +29
Views 1.5K
Comments 27

Пишем LR(0)-анализатор. Простыми словами о сложном

Algorithms *
Sandbox

Введение



Добрый день.
Не нашел простого и внятного описания данного алгоритма на русском языке. Решил восполнить сей пробел. Прежде всего что это такое? LR(0)-анализатор в первую очередь это синтаксический анализатор. Цель синтаксического анализатора обработать входной поток лексем(базовые элементы языка, которые производит лексический анализатор на основе входного потока символов, примеры лексем — число, запятая, символ) и сопоставить его с описанием языка заданного в определенном формате. Сопоставление заключается в построении определенной структуры данных, чаще всего — дерева. Дальше эта структура пойдет на следующий этап — семантический анализ, где уже компилятор пытается понять смысл, заключенный в дереве.

Существует 2 класса синтаксических анализаторов — восходящие анализаторы и нисходящие. Первые строят дерево начиная с листьев, которые являются входными лексемами, вторые соответственно наоборот начинают с корня дерева. Собственно LR и значит то, что анализатор будет читать поток слева направо (L — 'Left') и строить дерево снизу вверх (пусть не смущает буква R, которая значит Right, объяснения даны чуть ниже). Индекс 0 обозначает то что мы не предпросматриваем следующие лексемы, а работаем только с текущей. Какие же плюсы даёт нам выбор этого типа анализаторов?
  • Он быстр.
  • Покрывает множество языков. То есть если вы придумали язык и описали его, то с большой долей вероятности LR-анализатор его сможет обработать.
  • Синтаксические ошибки обнаруживаются так быстро как это возможно. Сразу же как встречается символ, который не соответствует предыдущему входному потоку, мы можем вывести ошибку об этом.

Есть и недостатки:
  • Относительная сложность построения.
  • Можно вогнать анализатор в ступор неоднозначностью описания языка.


Читать дальше →
Total votes 75: ↑71 and ↓4 +67
Views 24K
Comments 17

Рисуем виджеты в заголовке окна

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

Читать дальше →
Total votes 112: ↑103 and ↓9 +94
Views 10K
Comments 41

Упрощенный алгоритм Бойера-Мура

Algorithms *
Прочитав статью об алгоритмах поиска подстроки в строке, я обнаружил, что там не рассказывается об алгоритме Бойера-Мура. Пара слов о нём всё-таки там есть, а именно, говорится, что алгоритм Бойера-Мура заслужил себе звание «алгоритма по умолчанию», потому что он в среднем дает лучшее время поиска (с чем я полностью согласен). Под катом рассказано об упрощенной версии этого алгоритма. В принципе, большинство скорее всего изучало этот алгоритм на 1-м или 2-м курсе ВУЗа (как и я), поэтому они могут пропустить эту статью, ничего нового тут нет.
Читать дальше →
Total votes 61: ↑56 and ↓5 +51
Views 42K
Comments 19

Алгоритмы сжатия изображений

Algorithms *
Легко подсчитать, что несжатое полноцветное изображение, размером 2000*1000 пикселов будет иметь размер около 6 мегабайт. Если говорить об изображениях, получаемых с профессиональных камер или сканеров высокого разрешения, то их размер может быть ещё больше. Не смотря на быстрый рост ёмкости устройств хранения, по-прежнему весьма актуальными остаются различные алгоритмы сжатия изображений.
Все существующие алгоритмы можно разделить на два больших класса:
  • Алгоритмы сжатия без потерь;
  • Алгоритмы сжатия с потерями.

Когда мы говорим о сжатии без потерь, мы имеем в виду, что существует алгоритм, обратный алгоритму сжатия, позволяющий точно восстановить исходное изображение. Для алгоритмов сжатия с потерями обратного алгоритма не существует. Существует алгоритм, восстанавливающий изображение не обязательно точно совпадающее с исходным. Алгоритмы сжатия и восстановления подбираются так, чтобы добиться высокой степени сжатия и при этом сохранить визуальное качество изображения.
Читать дальше →
Total votes 124: ↑106 and ↓18 +88
Views 67K
Comments 19

Регулярные выражения, пособие для новичков. Часть 2

Python *
Translation
В первой половине этого пособия мы раскрыли лишь малую часть возможностей регулярных выражений. Во второй, большей, половине мы рассмотрим некоторые новые метасимволы, то, как использовать группы для получения частей совпавшего текста, разбивать строки, находить и замещать части текста. В конце немного поговорим о распространенных ошибках.
Читать дальше →
Total votes 67: ↑66 and ↓1 +65
Views 238K
Comments 20

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity