29 April 2011

Old-skull

На праздниках поставил себе вот такую игрушку, которая зацепила мое чувство прекрасного своим скриншотами

DeathFall HD 


Игрушка примитивнее детской игры в классики -- с горы падает череп, который управляется датчиком ориентации в пространстве. Надо жрать всякие рулезы, и избегать всяких острых предметов.
Скажу честно -- геймплей довольно уныл. Вращать из стороны в сторону 10-ти дюймовую махину, извращение покруче виртуального джойстика на экране. По-моему, единственная приличная игра для iPad, использующая датчик, это Labyrinth 2...
Но! За графику и музыку этой игрушке можно простить многое. Художник добился очень классной стилизации под средневековые рисунки, и смотреть на происходящее на экране очень приятно. А с учетом того, что под все это действо подобрали очень правильную музыку -- каждая игра превращается практически в поход в кинотеатр на хороший артхаузный фильм.
Эффект артхауза, кстати, был бы еще мощнее, если бы в основу геймплея была бы положена подающая в канализацию какашка.

28 April 2011

I Have An App For That! (Pt. II)

(продолжение, начало тут)


Глазами разработчика


Очевидный факт, что количество и качество приложений для той или иной платформы зависит от того, насколько много людей будет заинтересовано в создании этих самых приложений. Именно по этому поводу Стив Балмер кричал на сцене свое знаменитое “Developers! Developers! Developers!”.
А ты записался в разработчики?

Откуда берутся разработчики приложений? Что их подталкивает к разработке под ту или иную платформу? Что отталкивает?  

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

27 April 2011

Размер имеет значение

В Сети ходят упорные слухи о том, что iPhone 5 (или 4S) получит экран чуть бОльшей диагонали, чем его предшественник, при сохранении (или даже уменьшении) общих размеров корпуса.



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

Экран iPhone 4, кстати, тоже не такое уж чудо из чудес. Apple так долго тянула с его обновлением, что смогла сразу сделать 4x скачок, при этом не так уж сильно обогнав существующие решения на рынке...

Так вот, рост диагоналей. В стане Android наблюдается довольно большой зоопарк в этом вопросе: на рынке есть множество устройств, которые обладают одинаковым (или очень близким) разрешением, но площади экранов при этом довольно существенно отличаются. При одинаковых dpi на уровне ОС это приводить к тому, что пользователь видит на экранах всех этих устройств одну и ту же картинку, один и тот интерфейс, а это значит, что либо на маленьких экранах все довольно мелкое, либо на больших неэффективно используется площадь экрана и элементы чрезмерно крупные. Это довольно серьезная проблема, и из нее следует вывод, что Apple вряд ли сможет значительно изменять диагональ экрана, не меняя разрешения, т.к. без учитывания этого фактора со стороны софта, начнет довольно ощутимо страдать эргономика.

Суть проблемы -- девайс справа имеет большее разрешение. 

Что касается проблемы роста разрешения. Когда плотность пикселей на экране переваливает за 250 dpi, наращивать разрешение особого смысла нет, поэтому тот рост диагоналей, который мы сейчас наблюдаем, открывает путь и к более менее симметричному росту и разрешения экрана. Если же говорить о продукции Apple, то смену разрешения экрана в iPhone мы вряд ли скоро увидим, и более того, я довольно скептически настроен насчет 4x увеличения разрешения в iPad 3 (который, чисто гипотетически, нам могут показать примерно через год). На мой взгляд, тут по прежнему есть нерешенные вопросы и в области производительности, и в области энергопотребления, и в области стоимости такого решения. Честно говоря, меня не покидают мысли, что следующее поколение планшеток от Apple может получить промежуточное разрешение, а ля 1600x1200, только вот непонятно как в этом случае решить проблему совместимости софта.

С железом, кстати, все довольно очевидно и просто. По софту вопросов много больше. Вот что интересного, например, нам могут показать в iOS 5? Лично я, как сделали папочки, теряюсь в догадках.

26 April 2011

I Have An App For That! (Pt.I)

Вместо вступления


В этом материале я хотел бы поговорить об очень модной сегодня теме -- о мобильных приложениях.

Не знаю как в России, но в Штатах вокруг мобильных приложений (по ихнему, “apps”) творится просто какое-то безумие. К примеру, образовательная организация American Dialect Society, исследующая английский язык и его взаимодействие с другими языками, признало слово “app” словом 2010-го года (информация к размышлению: словом 2009-го года было слово “tweet”, а 2003-го -- “metrosexual”).

Журналисты с утроенной силой пишут статьи об этом невероятно модном тренде, причем статьи не для гиков, а рассчитанные на самые широкие массы. Наблюдающие за этим безумием “эксперты” -- к примеру, преподаватели IT дисциплин -- пытаются их успокоить, и объяснить, что, на самом деле, “apps” это всего лишь приложения, компьютерные программы, которые известны миру еще с 70-х годов, когда были придуманы первые персональные компьютеры.

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



В данном материале мне хотелось бы осветить тему мобильных приложений с той стороны, о которой некий сферический пользователь в вакууме, скачивающий очередную игру из App Store на свой iPhone, редко задумывается. Я хотел бы рассказать о мобильных приложениях с точки зрения тех людей, которые эти приложения создают -- о разработчиках.

25 April 2011

Анонс сериала

Этот пост предваряет начало публикации эпического сериала под названием "I Have An App For That!", раскрывающего во всех подробностях вопросы разработки мобильных приложений в современных реалиях.

Все, что вы хотели знать, но не задумывались, почему вы этого до сих пор не знаете. Или просто стеснялись сходить в википедию...
Мировой финансовый кризис -- чьих рук это дело?... Почему у iOS все хорошо, но плохо, у Android все плохо, но хорошо, а у Windows Phone 7 вообще все плохо, плохо... Куда пропала гречка?... Где @cdriper каждый день берет столько свежих фоток с сиськами?... Что общего между Стивом Джобсом и Индирой Ганди?... Какой гонорар я запросил за этой материал и почему его смог позволить себе приобрести только этот блог...
И многое многое другое.

При написании материала ни один аналитик не пострадал (потом, правда, пострадал -- тот, который был вынужден проглотить все целиком за 24 часа).



В общем, занимайте места поудобнее и запасайтесь попкорном!
Завтра -- первая серия.

23 April 2011

Векторное

C++ такой веселый язык, что в нем, даже после многих многих лет написания кода, натыкаешься на какие-то, вроде как очевидные, вещи, о которых когда-то много раз читал в книгах, но которые приводят тебя в какое-то замешательство или ступор. Например, я писал на тему всем известного прикола прототип vs инстанцирование экземпляра класса, сегодня расскажу о том, как я недавно сильно возмущался по поводу того, что я не могу запихнуть в std::vector класс, у которого есть хоть одно поле данных с модификатором const.


На первый взгляд -- бредовое поведение.

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

Зачем вектору оператор присваивания? Ну вот дергаете вы vector::erase -- посреди массива вам надо грохнуть элемент и сдвинуть в эту дырку стоящие от него справа экземпляры (отличная, кстати, идея -- двинуть все разом через memcpy). Контейнер это делает через последовательный вызов оператора присваивания, двигаясь слева направо.

Альтернативный вариант -- через размещающий delete вызвать деструктор для удаляемого элемента, а потом через размещающий new вызывать на этой ячейке массива конструктор копирования, передав ему аргументом стоящий справа элемент. Понятно, что в некоторых случаях, оператор присваивания может работать намного эффективнее, чем вызов деструктора + вызов конструктора копирования, например, если ваш тип содержит блок памяти фиксированного размера, выделенный из кучи. В этом случае оптимизированная версия оператора присваивания может вообще к куче не обращаться -- очевидный PROFIT перед тем, что будет делаться в деструкторе + конструкторе такого типа.

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

Ваш Кэп.

20 April 2011

Blogspot vs LJ

Напишу кое-какие мысли насчет того, что мне нравиться и что нет на новой блогплатформе в сравнении с жж. 

картинко по запросу blogspot vs livejournal. ну честно!

#1. Тут нет рекламы. Вообще.

В жж этого гавна было по колено, почти как на ТВ. Причем докучали всякой дрянью, вроде ухмыляющей барышней с LJ times, новыми тарифами киевстара или чипсами "Мачо" c Тимати.

Да, можно было эту рекламу порезать.
Да, можно было купить платный аккаунт... Кстати, мое мнение, что с монетизацией у СУПа большая беда. Вернее, с мотивацией на переход к платному аккаунту. Ирония судьбы в том, что я сбежал с жж как раз посредине двухнедельного бесплатного тестдрайва платного аккаунта, и я в упор не понимаю, зачем его покупать. 
Покупать надо ради чего-то полезного, а не ради отключения чего-то назойливого (я про рекламу). 
Ну вот ради чего его покупать? Ради большего количества юзерпиков? Я вообще считаю, что юзерпик должен быть вообще один, на всех сервисах и форумах, раз и на всю жизнь. Тогда при общении с тобой, человек сразу понимает с кем он говорит. 
Ради редактирования комментариев? Блин, какому идиоту хватило ума сделать эту фичу платной?
Не знаю... По-моему, людям, которые постят в жж уникальный контент и имеют более менее нормальную аудторию СУП сам должен доплачивать. А не наоборот. 

Кстати, Google предлагает монетизировать свой блог довольно настойчиво. Вот ща пишу этот текст, и прямо над маячит закладочка "Monetize". Тут на лицо взаимный интерес -- и хостеру блога, и его автору. 

18 April 2011

Будни разработчика

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

Решил прикрутить. 

Пока прикручивал, увидел, что после перехода на Qt 4.7 у нас что-то сломалось в тестах этого движка. 
Копнул глубже -- нашел причину. Мужики решили, что функция QMetaObject::invokeMethod в случае некоторых видов ошибки должна дергать qWarning с детальным описанием того, из-за чего случился FAIL. 

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

Функция QMetaObject::invokeMethod довольно сложная, и есть масса причин, по которым она может не сработать (она вызывает QMetaMethod::invoke, метод еще более сложный). При этом все, что пользователь узнает при выходе из функции -- bool, который говорит сработала функция или нет. И вместо того, чтобы добавить еще один параметр "std::string *pErrorDesc = 0" разработчики начинают в некоторых местах кода тыкать вызовы варнингов... 

Ба-ра-ны!

А у нас тут еще с QtMultimedia под Windows масса проблем вылезла. Утечки памяти, причем причины некоторых из их хорошо видны в сырцах... В общем, нет в мире совершенства. 

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



14 April 2011

***

После работы обычно забегаю в супермаркет купить хлеба и прочей мелочевки.

Сегодня на кассе видел сцену. Пацан, лет шести-семи, еле-еле достающий до стойки, пытался купить игрушечный пистолет, протягивая кассирше три гривны. Тетя показывала малому на наклейку, на которой была цена (наверное, гривен десять-пятнадцать), а малый мотивировал штрих-кодом, в котором была первая цифра "3".
Тетя-кассирша сказала, что она не может же, в конце-концов, доложить свои личные деньги, и малый, понурив голову, ушел без игрушки.
До сих пор, блин, жалею, что не купил ему. Пытаюсь найти оправдания, что мол после работы вечно затраханный, тормозишь, башка ни хрена не варит, что малый был не сразу передо мной, а через несколько человек в очереди...

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

Трансляция

Хочу в этой записи написать пару слов о том, как я решал вопрос с трансляцией записей из blogspot в жж. 


Честно говоря, изначально я делать этого не собирался. Аудитория у меня продвинутая, что такое RSS должны знать, однако, в конечном счете, я решил внять просьбам нескольких человек и дать возможность читать журнал через привычную некоторым френдленту. 

Какие были варианты решения проблемы? 

12 April 2011

Король говорит

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


Главная проблема этой картины -- совершенно посредственный сценарий.

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

10 April 2011

О прекрасном

Palm Heroes 2 на вершинах русского топа в AppStore. Heroes -- национальная любовь.
Приложение бесплатно, за каждую карту, будьте любезны, выложите по баксу.

кликабельно, вооружитесь микроскопом

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

08 April 2011

Игрушечное

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

Slay
http://itunes.apple.com/us/app/slay/id305324342?mt=8

 
На первый взгляд, сие есть что-то крайне непонятное с унылой графикой и ценой аж в $4. По факту -- за очень невзрачным внешним видом скрывается очень глубокая и захватывающая стратегия с правилами, которые можно изложить буквально в пару абзацев (этот момент, на ряду с глубиной геймплея, роднит игру с горячо любимым го). Любителям пошаговых стратегий, а также тем, кто любит поработать головой -- несомненный must have. AI чертовски силен. Реиграбельность практически бесконечная, т.к. уровней в комплекте идет ОЧЕНЬ много.
На iPhone’е, думаю, играть будет не так удобно в силу размера экрана.
Кстати, игра есть и для Windows, и даже для Windows Mobile.

07 April 2011

Миграция

В свете очень серьезных проблем в работе ЖЖ, которые наблюдаются в последнее время, я решил попробовать перейти на другой блог хостинг.
Я понимаю, что это вызовет определенные неудобства и возмущения у некоторой части моих читателей (впрочем, в силу инертности и консерватизма подавляющей части человечества таким образом воспринимаются почти все нововведения в любой области), дык для меня самого это не самый простой и безболезненный процесс. Рассуждал я просто -- когда ты не можешь в течении многих часов опубликовать запись в свой блог просто потому, что она слишком длинная (материал про роутеры), это уже за гранью добра и зла... В общем, этот момент надо как-то пережить, но вы, несомненно, имеет полное право высказать свое "фэ" по поводу всей этой истории в комментах здесь или в ЖЖ.


Я не уверен на 100%, что я окончательно перейду на ведение блога в этом месте, но если по технической части не будет каких-то особых приколов или недоразумений, все будет работать так, как я себе это представляю, то скорее всего в ЖЖ я больше не вернусь. 
В принципе, на всю политическую и идеологическую подоплеку DDoS'а на блогхостинг #1 в рунете мне глубоко насрать (в отличии от Носика и Темы), для меня, недобитого эгоиста, гораздо важнее личное удобство и удобство моих читателей. А удобство начинается с элементарной доступности в режиме 24x7.
Собственно, лично я никогда не был в восторге от системы "френдирования" в ЖЖ. Мне насрать на число френдов, я не считаю френдленту удобным способом чтения интересных тебе людей, и я никогда не публиковал подзамочных записей (тыц).
Если вы хотите меня читать регулярно то у вас есть следующие возможности:
#1 RSS. Как по мне, самый удобный способ -- я таким образом читаю огромное число источников. Если у вас до сих пор нет аккаунта в gmail -- бегите регистрироваться прямо сейчас и начинайте пользоваться Google Reader'ом!
#2. Тупо подписка на e-mail. Поле ввода вашего адреса находится в колонке справа от этого текста.
#3. Все записи автоматически транслируются в мой аккаунт в facebook'е. Ссылка на мой фейсбук находится справа от этого текста.
#4. Почти все записи я анонсирую в своем твиттере (угадайте, где можно найти на него ссылку) с хэштэгом #blog.
По-моему, этого более чем достаточно. Я (из врожденной скромности) промолчу о том, что таб с этим блогом должен быть первым в вашем браузере, и именно с него вы должны начинать каждое утро. 
Кстати, больше половины моих читателей не имеют аккаунта в ЖЖ, и довольно значительная часть из них читает меня именно через RSS.
Едем дальше. Второй немаловажный момент -- комменты, которые, как известно, рулят и доставляют. В свете последних проблем с ЖЖ, я на полном серьезе задумался, какой аспект моего блога лично для меня важнее -- сам факт формулирования и публикации своих прилагательное (опущенное из-за вышеуказанного врожденного качества) мыслей, либо все-таки дискуссии вокруг них. Build-in комменты на этой площадке крайне унылы, поэтому я, дабы не сильно резать эту составляющую, прикрутил Disqus. Да, Disqus то еще гавно, но это лучшее из всех зол. Так что если желаете донести миру что-то очень важное -- советую завести себе запись в этой системе (если вы еще не сделали этого до сих пор). Процесс этот очень прост, а кроме того, наверняка пригодится, т.к. Disqus очень широко распространенная система комментирования... 
Классический ЖЖный срач в Disqus вряд ли устроишь, но может оно и к лучшему?
Чиркну пару слов о том, почему я выбрал именно этот блог хостинг.
На мой вопрос в твиттере -- мол, люди, посоветуйте! Вариантов было не так уж и много.
Самое популярное, конечно, "stand alone" -- угу, домен mr_cdriper.com.ua все еще свободен. Но по этому пути я пока что идти не готов. Очень много геморра, а реальный PROFIT нулевой.
Потом были Tumblr и Posterous -- все из себя очень современные, няшные и глямурные. Первый отпал потому что это скорее развитие идей микроблоггинга а-ля твиттер, и в нем в принципе нет такого понятия как комментирование. Второй -- имеет плоскую систему комментирования а-ля мой любимый facebook. Да и общая скорость работы этого сервиса в целом мне как-то совсем не понравилась.
Ну а blogger.com -- очень солидный ресурс (Alexa говорит, что пятый (!) в мире по посещаемости), в придачу принадлежащий Google, сервисы которого я очень люблю и уважаю. В принципе, многие вещи здесь продуманы лучше, чем в ЖЖ, некоторые -- сильно хуже. Вообще, даже беглое исследование темы блогхостингов показало то, что многие ЖЖ зря хают -- не такой уж он старый, плохой и неконкурентоспособный (хотя Alexa говорит, что в мире он не так уж и нужен -- относительно скромное 74-е место, зато 8-е в России).
На этом, наверное, все. 
Заходим, обустраиваемся на новом месте.
зы. Заходил в рамблеровские top100 посмотреть как сильно страдает ЖЖ от атак.
Типичная цифра просмотра страниц в будние дни -- 15-17 лямов.
На этой неделе имеем: понедельник -- 9 млн, среда -- 11 млн. Выводы делаем сами, но моя френдлента на этой неделе еле-еле живая.
зы2. Еще пара интересных цифр от Алексы. 
Facebook в России обогнал одноклассников.
Китайцы -- сила. Baidu.com 6-й в мире, при том, что он никому кроме узкоглазых на хрен не нужен. Гугл вряд ли скоро сможет покорить этот огромный рынок.

зы3. Вылезла еще пара приколов с местный WYSIWYG редактор... в принципе, терпимо...