Pull to refresh

Не верь глазам своим =)

Lumber room
На картинке ниже вы можете видеть 2 лица. Обычное лицо справа и злобное — слева. Теперь встаньте со стула, отойдите шагов на 8 назад и произойдет волшебство. Два лица поменяются местами.
Два лица
Total votes 25: ↑18 and ↓7 +11
Views 298
Comments 6

Магия глазами программиста

Lumber room

Магия глазами программиста. Введение


Думаю, многие хотя бы раз задавались мыслью, мол, неплохо бы, чтобы магия в том или ином виде была доступна хотя бы мне. Опустим всякие спекулятивные моменты, нам интересно другое: какой бы была Магия, если бы ее придумал программист?

Начинаем фантазировать


Собственно, зачем все это? Как говорят, магия существует, если в нее веришь. Чтобы не затевать холиваров, скажу свое имхо: я поверю, если смогу понять или доказать. Я верю в Малую Теорему Ферма, так как она (раз) работает и (два) могу ее доказать, то есть свести к каким-то постулатам или договоренностям.
Посему пусть:
  1. Магия есть.
  2. Магия имеет логику, язык, синтаксис.
  3. Есть Стандартная Библиотека, содержащая то, что нам не надо делать самим. Она просто работает.
  4. И главное: мы можем всем этим пользоваться.

Что же мы получаем? Мы не можем сказать «Хочу найти ключи!». Почему? Да потому что, Магия, дорогой %username%, не знает, какие такие ключи ты хочешь найти и что для тебя значит «найти». Давайте разбираться, что же нам делать.
Читать дальше →
Total votes 37: ↑25 and ↓12 +13
Views 1.6K
Comments 15

Слой магии

Programming *
Translation
Любая достаточно сложная технология неотличима от магии
Артур Кларк


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

Впрочем, даже знакомые с технологией в целом люди на каком-то этапе могут обнаружить, что происходящее с равным успехом могло бы быть магией — очень немногие понимают все протекающие процессы целиком.
Читать дальше →
Total votes 56: ↑36 and ↓20 +16
Views 3.4K
Comments 32

Нетрадиционный путь развития проекта

Self Promo
Вот вам пришла в голову отличная идея и вы решили, что превратите ее в такой успешный бизнес, что даже сам Цукерберг попросит у вас автограф. Что дальше?

Обычный сценарий: вы читаете книги сильных мира сего о том, как правильно развивать стартап. Изучаете умные статьи о различных методиках и правилах его продвижения. Обучаетесь у “просвещенных” как правильно делать то и вот это. Вооружаетесь умными системами управления проектом и мощными правилами тайм-менеджмента. Посещаете мега-семинары, стартап-тусовки и прочие места средоточия бизнес-мудрости. Ну и как следствие — наконец, заправляете свой проект инвестициями, находите ментора и активно начинаете развиваться. Короче, все “по уму” и вроде бы правильно… Но оказывается, что не так уж и правильно.
Читать дальше →
Total votes 45: ↑36 and ↓9 +27
Views 1.1K
Comments 23

На eBay запретили продавать «магические» товары

Lumber room


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

Читать дальше →
Total votes 67: ↑54 and ↓13 +41
Views 1.5K
Comments 83

История одного Crash-а, и NSLog'а его лечившего

Programming *Development for iOS *Objective C *
Лечу Crash'и NSLog'ами. Недорого. Многолетний опыт. 100% гарантия.

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

Все началось с того, что на одном из относительно больших проектов начало стабильно вываливаться исключение при авторизации пользователя. «Ну и что тут такого? У всех бывает. Проверку на nil забыли поставить или где-то накосячили. „Тоже, мне, большое событие — crash на проекте“, — подумает большая часть программистов. В принципе — абсолютно согласен. Crash — не такое уж и редкое явление в программировании под iPhone, и с ним сталкиваешься по десять раз на день. Но этот был особенным. От него уже начало попахивать „магией“, когда мне сказали про его некоторые параметры и особенности:

  • Воспроизводимость на симуляторе: 100%
  • Воспроизводимость на устройстве: 0%
  • Путь к крэшу (после локализации крэша): ~ 40 секунд
  • Настройки оптимизации при компиляции (-O1,-O2...) не влияют на воспроизводимость
  • XIB'ы в проекте не используются


Да выглядел он довольно безобидно:

// Code
UITextView * textView = [ [UITextView alloc] initWithFrame:CGRectMake(0, 150, _width, _height)];

// Exception
*** Terminating app due to uncaught exception 'CALayerInvalidGeometry', 
    reason: 'CALayer bounds contains NaN: [0 0; nan 200]'


»Ну тут же и ежу понятно, что width — после вычисления — NaN!", — подумал я. Бегло поглядев где и как вычисляется ширина вьюхи, и не найдя ничего особого опасного, я, для утверждения своей догадки, поставил перед созданием вьюхи NSLog. А вдобавок, и точку останова на строке с созданием элемента.
// Source:
NSLog(@"width = %f", _width);

//Output:
width = 200


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

Что было дальше? Читайте во второй части сразу под катом...
Total votes 162: ↑157 and ↓5 +152
Views 29K
Comments 50

Роскомнадзор признаёт хентай детским порно, призывает к подаче жалоб, обещает пополнение реестра запрещённых ресурсов в Интернете

Working with 3D-graphics *
Чуть больше двух месяцев тому назад (11 апреля 2013 г.) в новости «Роскомнадзор занялся мультипликационной порнографией» на сайте «Известий» можно было прочесть, что москвич Владимир Голованов, действуя под влиянием убеждения в том, что «стиль японских порномультфильмов хентай изначально предполагает персонажей неясного возраста с кукольными, детскими лицами» (это цитата), подал в Роскомнадзор жалобу с просьбою признать эти анимационные произведения относящимися к разряду порнографии с участием несовершеннолетних. Тогда же и там же можно было прочесть, что эксперты Лиги безопасного Интернета (ЛБИ) считают, что хентай — это и есть детское порно. («Если Роскомнадзор попросит провести экспертизу, то наш экспертный центр подготовит заключение. Мы, скорее всего, будем говорить, что это детская порнография», — объявил директор ЛБИ Денис Давыдов.)

Так и вышло. Вчера (13 июня) в новости «Роскомнадзор признал мультфильмы детской порнографией» на сайте «Известий» стало можно прочесть, что «у экспертов не вызвало сомнения, что анимированные герои представлены в образе несовершеннолетних и при этом участвуют в порнографических сценах». Ведомство попросило москвича Голованова подать повторную жалобу: Роскомнадзор объявил, что после этого анимационные видеозаписи, признанные детской порнографией, будут внесены в реестр запрещённых ресурсов. Упоминается также намерение Антона Коробкова-Землянского (члена Общественной палаты) внести изменения в закон «О защите детей от информации, причиняющей вред их здоровью и развитию», в понятие порнографии добавив анимацию (в том числе — трёхмерную).

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

Читать дальше →
Total votes 237: ↑203 and ↓34 +169
Views 195K
Comments 1070

Анализируем числовые последовательности

DIY


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

Читать дальше →
Total votes 101: ↑94 and ↓7 +87
Views 31K
Comments 36

Изучить программирование на PHP. Вводная

Website development *PHP *
Recovery mode
Tutorial


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

<?php
$me = 'Programmer';
makeHappy($me);


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

Для тех кто и так знает, что делает этот код — в статье для вас есть блудницы и дух черно-белого верблюда.

Читать дальше →
Total votes 109: ↑34 and ↓75 -41
Views 65K
Comments 43

Введение в теорию магии

Game development *
Sandbox
Первая статья из цикла «Теория магии» носит обзорный характер. Ее цель — сформулировать основные вопросы рассматриваемой дисциплины преимущественно на качественном уровне, а так же разъяснить, какие принято выделять субдисциплины, и как аспекты, находящиеся в центре их внимания, связаны между собой.
Читать дальше →
Total votes 93: ↑79 and ↓14 +65
Views 55K
Comments 53

Теория магии: пространство свойств

Game development *
В первой статье Введение в теорию магии был дан обзор основных тем теории магии. Теперь мы переходим к рассмотрению пространства свойств, его особенностей и характеристик.
Читать дальше →
Total votes 46: ↑30 and ↓16 +14
Views 18K
Comments 8

Haskell — невозможное возможно?

Haskell *Functional Programming *
Известно, что задача определения того, истинна ли некоторая функция Integer -> Bool хотя бы для одного числа вычислительно неразрешима. Однако, нечто, на первый взгляд кажущееся как раз таким оракулом (а именно, функцией (Integer -> Bool) -> Maybe Integer) будет описано в этой статье.

Для начала, зададим свой тип натуральных чисел, практически дословно следуя их обычному математическому определению (почему это нужно будет видно в дальнейшем):

data Nat = Zero | Succ Nat deriving (Eq, Ord, Show)

Другими словами, натуральное число — это либо ноль, либо некоторое натуральное число, увеличенное на единицу (Succ от слова successor).

Также, для удобства, определим основные операции (сложение, умножение, конвертация из Integer) над числами в таком представлении:

instance Num Nat where
    Zero + y = y
    Succ x + y = Succ (x + y)

    Zero * y = Zero
    Succ x * y = y + (x * y)

    fromInteger 0 = Zero
    fromInteger n = Succ (fromInteger (n-1))

Читать дальше →
Total votes 45: ↑40 and ↓5 +35
Views 13K
Comments 28

Технологии в ролевых играх. Часть 1. Технология и магия

Game development *
Технологии в ролевых играх. Часть 2. Технология и техноген
Технологии в ролевых играх. Часть 3. Технология в антураже и мастеринге

Предисловие


Людям свойственно играть. С компьютерными ролевыми играми знакомы все читающие эти строки. Ролевые методики и вставки используются повсеместно — от бизнес-тренингов до всевозможных мероприятий. О ролевых играх живого действия многие как минимум слышали.

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

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

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

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

Почему Хабр? Во-первых, на Хабре довольно много представителей той социальной группы что называет себя «ролевиками». Для кого-то описанные вещи будут известны, кто-то узнает для себя что-то новое и интересное. Кто-то, быть может, откроет для себя мир ролевых игр живого действия. Во-вторых, Хабр — ресурс в первую очередь технический. А технологии — магия нашего мира.

Погрузиться в волшебный мир технологий
Total votes 52: ↑44 and ↓8 +36
Views 44K
Comments 12

Технологии в ролевых играх. Часть 2. Технология и техноген

Game development *
Технологии в ролевых играх. Часть 1. Технология и магия
Технологии в ролевых играх. Часть 3. Технология в антураже и мастеринге

В первой части мы рассмотрели возможности современной электроники для моделирования магических взаимодействий на ролевых играх. Однако, взаимодействия на РИ магическими не исчерпываются. Сейчас проходит достаточно много техногенных игр, в которых сама техника как таковая играет очень важную роль.

Перечислим ситуации, в которых современные технологии могут стать частью игрового процесса:
  • Игротехническое конструирование
  • Игротехническое моделирование процессов
  • Игротехническая коммуникация
  • Технические и техногенные объекты и артефакты

Рассмотрим их более подробно. Нередко в sci-fi сценариях в качестве завязки выступает ситуация, когда героям необходимо восстановить повреждённые информационные системы, энергетические агрегаты или системы связи чтобы разобраться с чертовщиной, творящейся на локации, послать о себе сообщение в центр, или попросту выжить. Эта же ситуация может быть прекрасным стартом для игры, или его частью.
Читать дальше →
Total votes 45: ↑38 and ↓7 +31
Views 23K
Comments 19

Технологии в ролевых играх. Часть 3. Технология в антураже и мастеринге

Game development *
Технологии в ролевых играх. Часть 1. Технология и магия
Технологии в ролевых играх. Часть 2. Технология и техноген

Технологии и антураж



Показанные в предыдущих частях технические устройства антуражны сами по себе, и их применение значительно повышает реалистичность игрового процесса. Возможно так же применение технологий, не участвующих непосредственно в игровом процессе, но тем не менее значительно улучшающих антуражность локаций и игроков. Перечислим основные виды устройств, которые можно применить в целях повышения качества антуража:
  • Световые (светодиоды, лазеры, световоды, люминесцентный шнур, уф-подсветка)
  • Звуковые (подзвучка локаций, имитация шумов работы механизмов, прочих шумов)
  • Механические (мехатронные элементы, движущиеся части механизмов)
  • Комбинированные

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

Приведём примеры. Так самые обычные светодиодные гирлянды смогли преобразить локацию «Фангорн» на ПРИ «Вторая эпоха. Время легенд»:


Фангорн, ПРИ «Вторая эпоха. Время легенд»
Читать дальше →
Total votes 58: ↑49 and ↓9 +40
Views 30K
Comments 32

Визитки 2.0: Добавим немного NFC-магии

ABBYY corporate blog
Tutorial
Визитные карточки – такая же привычная часть бизнеса, как и электронная почта или телефон. Многие уже давно предрекают им смерть в связи с «прогрессом» QR-кодов, соцсетей и передачи файлов, но они до сих пор живее всех живых. Мы пока не можем обойтись без бумажных карточек для передачи контактных данных нашим клиентам и партнёрам. QR-коды не стали популярными, так как требовали установки дополнительных приложений, хорошего освещения и были слишком громоздкими для хранения всех нужных данных. В соцсетях зарегистрированы не все и хранить там персональные данные порой непозволительная роскошь. А передача файлов с помощью различных технологий типа AirDrop, Alljoyn или Beam, будем честны, пока недостаточно удобна и широко распространена.

И всё-таки есть способ добавить немного магии в ваши бумажные визитки и быстро передать ваши контактные данные прямо в записную книжку телефона партнёра. Я говорю об NFC.

Собственно, с бумажными визитками понятно, что делать: сканируем и распознаем с помощью ABBYY Business Card Reader и сохраняем в контакты. Но вот для того, чтобы добавить визиткам «айтишность» и некоторый шарм, нужно что-нибудь дополнительное. В этой роли отлично сыграет NFC-метка.

Узнать больше
Total votes 66: ↑64 and ↓2 +62
Views 83K
Comments 42

AsyncCollections: история одного велосипеда

.NET *C# *Concurrent computing *
Sandbox
С давних времён я был большим поклонником System.Collections.Concurrent и BlockingCollection в особенности. Сколько раз это чудо инженерной мысли выручало в самых разнообразнейших ситуациях — не счесть.

С чуть менее давних времён в обиход прочно вошли async/await. Казалось бы, жизнь прекрасна, но есть одно «но»: асинхронный код миксовать с блокирующим кодом как-то не очень-то хочется. А BlockingCollection, как несложно догадаться (хотя бы из названия), в ряде случаев поток блокирует.
Что же делать?
Total votes 27: ↑26 and ↓1 +25
Views 16K
Comments 18

Код, которого нет

Abnormal programming *Website development *JavaScript *Delirium coding
Sandbox
Привет, хабравчане!

Около года назад Хабр захлестнула волна постов на тему "%string% в N строчек на JavaScript". Уже и не вспомню, чем все закончилось, но началось все с «Excel в 30 строк». Следом появилось много и других интересных вариаций на эту тему, даже игра в ноль строк на JS, но это уже совсем другая история…

Как я ни старался придумать что-то еще более компактное — ничего не выходило. Тогда было принято решение посмотреть на проблему под другим углом. Примерно в этот момент в голове промелькнул вопрос: а можно ли «сколлапсировать» код так, чтобы его не было вообще? И тут мне позвонил Дэвид Блейн.

Я попробовал добавить немного магии и вот что у меня получилось.

image
Сим салабим!
Total votes 125: ↑111 and ↓14 +97
Views 88K
Comments 58

Система централизованного управления авторизацией пользователей на FreeIPA в Docker

Configuring Linux *System administration *IT Infrastructure *Server Administration *
На волне популярности Docker на Хабре, после участия в некоторых дискуссиях в комментариях относительно Docker, и в связи с недавней необходимостью настроить централизованную авторизацию для кластера Linux машин, я решил написать небольшую заметку. Здесь будет показан яркий, на мой взгляд, пример применения Docker'a для небольшой частной задачи.

Вот так, кстати, выглядит FreeIPA WebUI (официальное демо) (кликабельно):



Какие задачи я хотел решить при помощи FreeIPA:
  1. Иметь возможность создавать/изменять/удалять акаунты пользователей централизовано, а не на каждом отдельном сервере
  2. Централизованные плавила для sudo
  3. В последствии мы подключим к этой системе ещё и VPN авторизацию, а потом может и другие внутриофисные сервисы

Да, скорее всего FreeIPA в нашем случае это выстрел пушкой по воробьям, но с другой стороны — альтернатив что-то не видно. Я рассматривал такие варианты: NIS (по-моему он уже давно должен отправиться на отдых), OpenLDAP +… +… (не очень дружелюбно, да и FreeIPA в итоге под собой имеет LDAP, только нам не приходится с ним иметь дело напрямую), тут перечень заканчивается, я не нашёл ничего больше.

Читать дальше →
Total votes 12: ↑12 and ↓0 +12
Views 77K
Comments 20
1