Pull to refresh
49.7
Karma
0
Rating
  • Followers 20
  • Following
  • Posts
  • Comments

«Магическая константа» 0x5f3759df

Инфопульс Украина corporate blog Abnormal programming *Sport programming *Entertaining tasks Programming *
Translation
В этой статье мы поговорим о «магической» константе 0x5f3759df, лежащей в основе элегантного алгоритмического трюка для быстрого вычисления обратного квадратного корня.

Вот полная реализация этого алгоритма:

float FastInvSqrt(float x) {
  float xhalf = 0.5f * x;
  int i = *(int*)&x;  // представим биты float в виде целого числа
  i = 0x5f3759df - (i >> 1);  // какого черта здесь происходит ?
  x = *(float*)&i;
  x = x*(1.5f-(xhalf*x*x));
  return x;
}

Этот код вычисляет некоторое (достаточно неплохое) приближение для формулы

image

Сегодня данная реализация уже хорошо известна, и стала она такой после появления в коде игры Quake III Arena в 2005 году. Её создание когда-то приписывали Джону Кармаку, но выяснилось, что корни уходят намного дальше – к Ardent Computer, где в середине 80-ых её написал Грег Уолш. Конкретно та версия кода, которая показана выше (с забавными комментариями), действительно из кода Quake.
В этой статье мы попробуем разобраться с данным хаком, математически вывести эту самую константу и попробовать обобщить данный метод для вычисления произвольных степеней от -1 до 1.

Да, понадобится немного математики, но школьного курса будет более, чем достаточно.
Читать дальше →
Total votes 212: ↑210 and ↓2 +208
Views 98K
Comments 188

За что конкретно я ненавижу некоторых отдельно взятых маркетологов — или как айтишник по магазинам ходил

Мосигра corporate blog
Знакомьтесь, это обычный «литровый» пакет молока:

image

  • Проверка на внимательность: там 900 грамм. Рядом несколько по 950. Но пакет может быть воспринят как литровый.
  • Проверка на знание физики. Рядом лежит похожий кефир. Объём измеряется в миллилитрах, масса — в граммах. Плотность кефира трагически выше плотности воды. То есть 900 грамм кефира 3,2% жирности — это примерно 874,5 миллилитров.

Второй пациент:



25 лет гарантии. Круто, правда? Есть одна проблема. Надо сохранять чек. Проверка, опять же, на знание физики. Чек у них печатается на обычной кассовой термоленте (я проверил на месте). У меня в офисе лежит много чеков. Мы их ксерокопируем, потому что через год-два они полностью выцветают. Самый старый чек, который видел коллега, держался 3 года в папке в архиве. UPD: смотрите самый низ топика, Икея ответила.

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

Осторожно, трафик: под катом много находок с фотографиями.
Читать дальше →
Total votes 814: ↑769 and ↓45 +724
Views 603K
Comments 777

Git Rebase: руководство по использованию

Git *
Tutorial
Rebase — один из двух способов объединить изменения, сделанные в одной ветке, с другой веткой. Начинающие и даже опытные пользователи git иногда испытывают нежелание пользоваться ей, так как не видят смысла осваивать еще один способ объединять изменения, когда уже и так прекрасно владеют операцией merge. В этой статье я бы хотел подробно разобрать теорию и практику использования rebase.

Теория


Итак, освежим теоретические знания о том, что же такое rebase. Для начала вкратце — у вас есть две ветки — master и feature, обе локальные, feature была создана от master в состоянии A и содержит в себе коммиты C, D и E. В ветку master после отделения от нее ветки feature был сделан 1 коммит B.


Читать дальше →
Total votes 122: ↑121 and ↓1 +120
Views 585K
Comments 169

Как писать отличные пулл-реквесты

Website development *GitHub
Translation
С ростом компании, люди и проекты меняются. Для продолжения развития культуры, которую мы хотим иметь в GitHub, мы сочли полезным напомнить самим себе цели, которые преследуем в коммуникациях. Мы недавно представили эти гайдлайны, чтобы помочь самим себе быть лучше, когда мы взаимодействуем через пулл-реквесты.
Читать дальше →
Total votes 55: ↑46 and ↓9 +37
Views 21K
Comments 10

Собираем установочные пакеты из Qt проектов по-взрослому

Qt *
Методом проб и ошибок я изобрел очередной велосипед, о котором и собираюсь рассказать Вам ниже.Речь пойдет о сборке пакетов из проектов Qt для Debian и Rpm based систем, Windows из под Ubuntu/Debian. В принципе метод весьма прост, поэтому, думаю, что при небольших изменениях он подойдет и для rpb based дистрибтивов, а для Windows систем потребуется установка cygwin.Кроме того эта тема очень мало обсуждается в интернете, хотя я бы не назвал сборку кроссплатформенных приложений в инсталяционные пакеты простой задачей.Кому будет интересен данный материал:
  • в первую очередь начинающим разработчикам Qt, которые хотят распространять свои приложения в удобном для пользователей виде;
  • разработчикам, использующих другие языки программирования (при небольших изменениях можно получить.
У меня есть уверенность в том, что все действия, описанные ниже, можно было бы сделать скриптом make, но и текущий вариант тоже неплох и имеет право на существование.Также, если Вы используете любой другой способ для автоматической сборки проектов, опишите его пожалуйста. Хотелось бы собрать в итоге как можно больше информации по этой теме.
Читать дальше →
Total votes 31: ↑30 and ↓1 +29
Views 19K
Comments 18

Шифрование SQLite базы данных в Qt

Information Security *Qt *SQLite *
Tutorial
Для шифрования в SQLite были найдены следующие возможные решения:

  • SEE — официальная реализация.
  • wxSQLite — c++ wxWidgets обертка для шифрования SQLite.
  • SQLCipher — использует в реализации openSSL.
  • SQLiteCrypt — модифицированная реализация API.
  • botansqlite3 — шифрующий кодек для SQLite3 использующий библиотеку botan.
  • SQLiteCrypto — java API для Android, использует AES-256 и SHA-256.
  • QtCipherSqlitePlugin — SQL плагин для Qt с поддержкой шифрования.

Из рассмотренных решений SEE, SQLiteCrypt and SQLiteCrypto требуют приобретения лицензии. SQLCipher доступен в версии Community Edition, но требует libcrypto.

Наиболее интересным решением из представленного списка, на мой взгляд, является QtCipherSqlitePlugin.
Плагин шифрует «на лету» и полностью интегрирован в API Qt.
хочу шифровать SQLite
Total votes 18: ↑17 and ↓1 +16
Views 21K
Comments 11

Введение в CMake

Programming *
Recovery mode
Sandbox
Tutorial
imageCMake — кроcсплатформенная утилита для автоматической сборки программы из исходного кода. При этом сама CMake непосредственно сборкой не занимается, а представляет из себя front-end. В качестве back-end`a могут выступать различные версии make и Ninja. Так же CMake позволяет создавать проекты для CodeBlocks, Eclipse, KDevelop3, MS VC++ и Xcode. Стоит отметить, что большинство проектов создаются не нативных, а всё с теми же back-end`ами.
Читать дальше →
Total votes 62: ↑56 and ↓6 +50
Views 375K
Comments 23

Облака — ещё дешевле 2. Ответ-продолжение

Virtualization *
Sandbox
Вдоволь наигравшись с DigitalOcean, используя информацию в статье «Облака — ещё дешевле», прежде всего хочу поблагодарить tangro за качественный материал и поделиться с сообществом своими наработками.

Содержание



Итак, допустим, что у нас есть образ и droplet на DigitalOcean.
Читать дальше →
Total votes 9: ↑6 and ↓3 +3
Views 8K
Comments 0

Игрок продолжает соревноваться с умершим отцом и не желает его побеждать, чтобы не стереть призрака

Games and game consoles
Это довольно трогательная история, и мне кажется, ей самое место здесь. Потому что делать игры, это тоже очень важно. Итак, представьте: обычное игровое видео, размещенное на youtube. В комментариях обычное обсуждение и гвалт. Но среди них попадается комментарий от пользователя 00WARTHERAPY00, пишущего о том, что он продолжает играть в автосимулятор с покойным отцом.



Привожу вольный перевод комментария:
Ну, когда мне было 4 года, отец купил настоящий Xbox.
Читать дальше →
Total votes 312: ↑218 and ↓94 +124
Views 120K
Comments 60

TextMate средствами gedit

Configuring Linux *


Так вышло, что в офисе я работаю за Маком, а вот ноут — «17 MacBook Pro — не самый лучший, на мой взгляд, вариант в разрезе производительность/цена. Anyway, это тема другого разговора. Ноут под Ubuntu.
А теперь вопрос: если кодить на Ruby/RoR — кто ваш лучший ТекстовыйПриятель? Все верно, Textmate — Великий Фетиш и Идол всех программистов на Ruby под Mac. Итак задача была предельно проста — найти инструмент под Linux, максимально приближенный к Textmate по тому объему функционала который я использую в работе.
Читать дальше →
Total votes 41: ↑37 and ↓4 +33
Views 6.7K
Comments 120

Многозадачность в ядре Linux: прерывания и tasklet’ы

Embox corporate blog System Programming *C *
Котейка и младшие братьяВ предыдущей своей статье я затронула тему многопоточности. В ней речь шла о базовых понятиях: о типах многозадачности, планировщике, стратегиях планирования, машине состояний потока и прочем.

На этот раз я хочу подойти к вопросу планирования с другой стороны. А именно, теперь я постараюсь рассказать про планирование не потоков, а их “младших братьев”. Так как статья получилась довольно объемной, в последний момент я решила разбить ее на несколько частей:
  1. Многозадачность в ядре Linux: прерывания и tasklet’ы
  2. Многозадачность в ядре Linux: workqueue
  3. Protothread и кооперативная многозадачность

В третьей части я также попробую сравнить все эти, на первый взгляд, разные сущности и извлечь какие-нибудь полезные идеи. А через некоторое время я расскажу про то, как нам удалось применить эти идеи на практике в проекте Embox, и про то, как мы запускали на маленькой платке нашу ОС с почти полноценной многозадачностью.

Рассказывать я постараюсь подробно, описывая основное API и иногда углубляясь в особенности реализации, особо заостряя внимание на задаче планирования.
Читать дальше →
Total votes 94: ↑93 and ↓1 +92
Views 70K
Comments 31

Эмулятор компьютера с linux на JavaScript

Configuring Linux *
Никакой серверной части. Только JS: полноценный эмулятор компьютера с линуксом на борту.

bellard.org/jslinux
(внимание, только хром и FF4)

Я долго с ним игрался — это не имитация, линукс ведёт себя как настоящий линукс — компилированные программы работают, ошибки в них вызывают segmentation fault, повреждение корневой файловой системы вызывает бурю возмущения в dmesg и т.д.
Эмулятор PC на JS с линуксом на борту

dd показывает при работе с памятью более чем приличную производительность — более 40 мб/с (не забываем, что это эмулятор, и что это JS в вашем браузере!).

Я никогда не думал, что мы доживём до подобного.

… А теперь начинается оргия:

* С использованием локального хранилища мы можем организовать диски (каждый key-value соответствует одному сектору).
* С использованием web-socket мы можем создать паравиртуализированный драйвер сети с выходом на железный машрутизатор и получить нормальную сеть.
* С использованием существующих технологий (NUMA, DRBD, corosync) можно организовать вычислительный кластер из браузеров.

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

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

Никто не мешает создать паравиртуализированный драйвер видео с помощью canvas, у вас есть webGL, для которого можно написать свой вариант cuda и получить довольно мощную акселерацию вычислений…

Ну и финал — запуск хрома внутри эмулируемой виртуальной машины.

Итак, эмуляция дошла до браузеров…
Total votes 362: ↑333 and ↓29 +304
Views 42K
Comments 356

Как удалить bucket с 400 миллионами файлов на Amazon S3

Студия Михаила Кечинова corporate blog Amazon Web Services *
Допустим, у вас в бакете скопилось несколько сотен миллионов файлов (всякое бывает) и вы решили их удалить. Удалить бакет без удаления содержимого нельзя. Удаление самих файлов происходит примерно по 1000 за 2 секунды. Несложно посчитать, что 400 миллионов файлов можно удалить за 9 дней работы браузера без выключения, да еще и заплатить придется за каждую операцию (DELETE хоть и бесплатный, но LIST стоит денег).

Но есть возможность настроить правила хранения файлов так, чтобы они удалялись автоматически:
Читать дальше →
Total votes 79: ↑63 and ↓16 +47
Views 21K
Comments 14

Про создание платформера на Unity. Часть третья, долгожданная

Microsoft corporate blog Game development *Unity3D *
Tutorial
Привет, Хабр!

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



Осторожно: объемы гифок под катом становятся просто нечеловеческими!
Читать дальше →
Total votes 50: ↑44 and ↓6 +38
Views 69K
Comments 25

Про создание платформера на Unity. Часть вторая, звездная

Microsoft corporate blog Unity3D *
Tutorial
Привет, Хабр!

Я, как и обещал, продолжаю делиться с вами знаниями, приобретенными в процессе освоения 2D-режима Unity. От начинающего, так сказать, начинающим. Систематизирую, улучшаю и прогрессирую вместе с вами. Сегодня мы добавим к содержимому первой статьи управление камерой, сбор бонусов и первый способ умереть в игре. Если вам, как и мне, не терпится приступить, то добро пожаловать под кат.

И да, гифок там еще больше, чем в прошлый раз.



Читать дальше →
Total votes 57: ↑49 and ↓8 +41
Views 96K
Comments 16

Про создание платформера на Unity. Часть первая, характерная

Microsoft corporate blog Unity3D *
Tutorial
Привет, Хабр!

Все мы здесь любим качественные пошаговые руководства для начинающих, чего уж греха таить. По платформерам на Unity руководств много, а вот качественных не то что бы и очень. Сегодня мы попробуем добавить в копилку хороших уроков еще один. А создавать мы будем персонажа для 2D-платформера, ни больше, ни меньше.

Присоединяйтесь, учитесь, но помните: под катом очень много гифок.

Читать дальше →
Total votes 44: ↑38 and ↓6 +32
Views 264K
Comments 13

По следам публикации в Google Play/App Store/ Steam Greenlight

Development for iOS *Game development *Development for Android *


Началось всё с желания делать свои игры вместо того, чтобы делать чужие.
Полгода назад я (программист) и мой товарищ (художник) уволились с работы и решили начать делать проект мечты — раллийный симулятор.
Этот проект мы задумывали очень давно, но не хватало опыта и знаний, чтобы начать и закончить.
За несколько последних лет мы оба набрались опыта и созрели для того, чтобы наконец сделать этот проект.
Но за те 10 лет, что мы пробовали свои силы, наши наработки полностью устарели. Кодовая база оказалась сложно портируемой на мобильные устройства. Контент не соответствовал современным требованиям.
Пару месяцев мы ковыряли то, что у нас уже было в надежде понять, что же делать…
И пришли к выводу:
Надо прощупать почву

Нам надо было понять, каким образом ведётся разработка кроссплатформенного движка, способного адекватно работать как на ПК, так и на мобильных ОС. Как публикуется игра? Как ведут себя отдельные площадки и на каких условиях работают?
Нам нельзя на проекте мечты совершать детские ошибки. Проект должен разрабатываться и публиковаться с чётким пониманием: как, что и для чего делается.
И для этого мы взялись реализовать тестовый проект. Небольшую казуальную игру.
Эта статья о том, как мы публиковались на Google Play, как провалили публикацию на Greenlight и какие сюрпризы нас ждали в AppStore.
Читать дальше →
Total votes 37: ↑30 and ↓7 +23
Views 32K
Comments 49

Создание игры на ваших глазах — часть 7: 2D-анимации в Unity («как во флэше»)

Game development *Unity3D *
Tutorial
В этой статье поговорим о 2D анимациях в Unity. Я расскажу о своем опыте работы с родными анимациями в юнити, о том, насколько тайм-лайны похожи на флэшевские, об управлении анимациями, event'ах, вложенности, и о том, как художник справляется с анимированием.

Для начала, немного теории.

В Unity есть две сущности:

1. Анимация (то, что отображается в окно «Animation»)
2. Mechanim дерево анимаций (то, что отображается в окне «Animator»).



Ниже я немного расскажу, что это такое и как нам может приходиться (или не пригодиться).
Читать дальше →
Total votes 29: ↑26 and ↓3 +23
Views 86K
Comments 15

Создание игры на ваших глазах — часть 6: Поговорим о пиаре инди игр

Game development *
В предыдущих статьях я рассказывал о технической стороне проекта, а сегодня давайте поговорим о пиаре. Об инди-пиаре. Я поделюсь некоторыми соображениями, а главное — опытом. Хоть и небольшим, но все-таки реальным.

Напомню, что мы делаем стратегию/тайкун с прицелом на ПК (Steam) с премиум монетизацией (никакого фритуплея). Следовательно, в этом ключе я и буду рассказывать.

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

По поводу “когда начинать пиариться” там же есть цифра “за пару месяцев до релиза” для мобильного проекта и до полугода для ПК. Это связано с тем, что на всем протяжении вам надо поддерживать интерес потенциального покупателя к вашей игре. И продолжительность этой заинтересованности разная для разных платформ.
Читать дальше →
Total votes 34: ↑30 and ↓4 +26
Views 33K
Comments 13

Создание игры на ваших глазах — часть 5: Промежуточный итог (прототип)

Self Promo
Итак, прошло чуть больше месяца с тех пор, как мы начали нашу серию статей о нашей игре, и пришло время подвести небольшой промежуточный итог.



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

Ниже я приведу то, что мы успели сделать, а также поделюсь о том, каким образом мы работаем над маркетингом.
Читать дальше →
Total votes 41: ↑37 and ↓4 +33
Views 15K
Comments 40

Information

Rating
Does not participate
Registered
Activity