All streams
Search
Write a publication
Pull to refresh
4
0
Viktor Pti @Qbit

Пользователь

Send message
Хорошая статья, спасибо!

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

Не могли бы уточнить, чем принципиально сотня разрешений/пропорций отличается от пяти? У вас же логика не на switch'е построена, который требует добавления девяноста пяти case'ов? Это просто параметры в арифметических рассчётах.

Но иногда его растягивают, а не рисуют пиксель в пиксель – например, фоны, отчего страдает графика или нарушаются пропорции.

Зачем растягивать? Фон рисуется для максимально вытянутой пропорции, всё существенное в фоне находится внутри региона минимально вытянутой пропорции. Потом fit'ится по наименьшему параметру (высота или ширина), clamp'ится вдоль наибольшего.
Согласен, математика — это не легкое чтиво


Это не математика. Это несколько скомпилированных статей уровня вводных обзоров из Википедии по разным разделам криптографии. Нет ничего плохого в том, что во время написания реферата для вуза автор сел и разобрался в основных криптографических примитивах. Просто несколько наивно выкладывать реферат на этот ресурс, ещё и попрекать читателей непониманием «математики». (Самым «математическим» здесь было, надо полагать, упоминание эллиптических кривых?)
Было замечено, что в канун праздников игры с праздничной тематикой имеют бешеный спрос. До нового года оставалось 2 месяца и мы решили сделать рожденственско-новогодний квест, призванный дарить людям праздничное настроение в канун зимних праздников.


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



— What's Titan like this time of year?
— What's Titan like? Titan is exactly like this. All the time, it's got a cloud around that's so thick, no one can tell what's underneath.
— Maybe there's nothing there.
— There's something there.
Если хотите привлекать пользователей, то сделайте две версии — бесплатную, которая вообще не просит денег, и платную которая сразу денег просит.

Это приводит к фрагментации пользовательской базы на две слабосвязанные группы. В каждой свои рейтинги, между ними затруднены миграции настроек, etc.
(по какому-то другому значению, например, которое статично относительно поксоренного)


Скрываемые значения вместо поля value хранятся как пара (pad, encryptedValue), откуда value рассчитывается перексориванием. Так вот, pad не обязан быть статичным, можешь его менять случайно хоть в каждом кадре (пересчитывая и encryptedValue).
выигрышная стратегия – смешивать объектно-ориентированное программирование и функциональное


Эрик Мейер на эту тему написал статью месяц назад: «Mostly functional» programming does not work.
ViewModel это абстракция, минимально необходимый контракт для взаимодействия пользователя с остальным приложением.

Нет. ViewModel — это не абстракция. Это просто такая штука для DataBinding'а. Переводится «ViewModel» как модель представления, а не представление модели. Можно, конечно, обмазаться IViewModel, но это всё premature abstraction.

А представление должно решать как эти данные использовать

Что значит «решать»? Иметь какой-то код, который «решает»? То есть иметь, по-сути, code behind?

Идею «конвертер на стероидах» предложил не я, а Джош Смит.
Индусы все-таки решили разобраться с алгоритмами? :)


Если ты про Вазирани, то это очень крутой индиец. Вёл на Курсере курс по квантовой механике, по ней же у него научные работы, теорема его именем, etc.
Присоединяюсь к заминусованному выше товарищу. Пару лет назад, когда я программировал на WPF, мы пришли к подходу «ViewModel — конвертер на стероидах». Это позволяет отказаться от уродливых конвертеров типа BoolToVisibilityConverter (которые сильно усложняются по сравнению с синтетическим примером, если они не «чистые» функции, а учитывают внешний контекст и имеют состояние). Косвенным следствием такого подхода является отказ от использования CallerMemberName.

Предположим, у вас в модели есть дата (DateTimeOffset), а в представлении она отражается в лейбле (string, ISO 8601), прогресс-баре (double, время, прошедшее с начала суток в процентах) и цвете фона (SolidColorBrush, тёмно-синий для ночи и светло-бежевый для дня).

У меня в модели представления было бы три разных свойства-геттера: string, double и Brush (типы представления), одно свойство- (или метод-) сеттер типа DateTimeOffset (тип фактических данных). Сеттер не бросал бы событие об изменении CallerMemberName, потому что его имя никак не относится к привязываемым свойствам — он бросает события соответствующих свойств, к которым привязаны label, progress bar, etc. Поля, которые лежат за этими четырьмя свойствами можно делать в зависимости от ситуаций: или одно поле (_dateTime) типа данных (и конвертировать в каждом из геттеров), или иметь все поля (_dateTimeString, _dateTimePercentage) представления и единожды рассчитывать их в сеттере, а в геттерах просто возвращать. Можно варьировать в зависимости от того, как чато будут чтения и записи.

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

Coursera организовывает толпу людей для взаимодействия, а Акакдемия Хана — нет. Хан изначально записывал видео индивидуально для конкретных людей, позже расшарил за ненадобностью их скрывать. Coursera же изначально рассчитана на больште группы людей, изучающих предмет согласованно. Миллион людей, согласованно играющих в Варкрафт — massive; тот же миллион, независимо друг от друга играющих в Тетрис — не massive.

почему не онлайн тоже не очень понятно — сайт значит онлайн (для меня, как минимум)

«Online» в «MOOC» означает не просто «в интернете» (посмотрите хотя бы последнюю картинку в посте). Оно скорее значит «в потоке». Если ты пересматриваешь старые видеозаписи или архивы прошлых курсов — то ты офлайн, не смотря на то, что вот же они, в интернете. Если одновременно с большим количеством людей в течение обозначенного периода, с постоянной регулярностью (поддерживаемой с помощью расписания и дедлайнов), общаясь по текущим вопросам и заданиям на форуме — это и называется онлайн.

ну и насчет course тоже нет определенности — вот на курсере записи прошедших курсов и/или автоматически повторяемые ежемесячные курсы полностью в записи — это course или нет? Если да, то почему аналогичные подборки у Хана — нет?


Не любая пачка видеороликов — это курс. В Coursera на эти видеоролики навешена инфраструктура: оценивание прогресса (домашки, экзамены), поддержание согласованности потока людей (дедлайны, форумы). Спросить про какой-то аспект уравнения Шрёдингера на каком форуме физиков, где тебе ответят спустя три дня «на отвяжись» — не то же самое, когда тем же вопросом интересуется сразу множество людей одновременно, где это — «тема недели».
Khan Academy заслуживает почетного упоминания :)


Khan Academy не massive, не online и не course, но вопреки этому (или благодаря) он обязательно должен быть упомянут. Говорим «MOOC», подразумеваем «MOOC и Khan Academy».
но я просто вынужден указать на такие игры как клэш оф клан или же волшебный мир мокка, которые отражают мой подход к донату


В Clash of Clans: 1) «читерство» представлено в виде покупки времени (ускорения) и ресурсов, в чём трудно уличить, так как можно достичь того же результата игромеханически; 2) «статусные» декорации вроде Mighty Statue или Pirate Flag явно требуют доната, при том не несут никакого профита. То есть ровно как я сказал ранее: «поверапы не должны быть заметными, а «шапки» не должны быть полезными».
На самом деле, подобная брешь не является виною только Android.

Я не вижу тут бреши или неожиданного поведения системы.

1) Сперва установим [переподписанную нами] игру 2048.
2) Устанавливаем патч
3) Переустанавливаем нашу [исходную переподписанную] игру

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

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

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

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

Пункты 3 и 4 в статье действительно не указали, потому что они крайне сомнительны, если не сказать попросту неверны. В общем случае поверапы не должны быть заметными, а «шапки» не должны быть полезными.

Один и тот же платящий пользователь смотрится в глазах других игроков совершенно по разному. Если он заметно выделяется явно купленным преимуществом, то он «Сраный донатер, только и думает, как халявить за бабло; зачем тогда вообще играть, если никакого челленджа? Только мешает истинным приверженцам!» Если же он щеголяет в заведомо бесполезной шапке, то он «Благородный дон, который бескорыстно поддерживает разработчиков прекрасной игры заведомо не извлекая никакой для себя выгоды. Просто потому, что может себе позволить такой пустяк, как 0.99$. Разве я хуже?»

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

Циклы заворачиваются в функцию; вместо goto вызывается return.
Надо ловить исключения.


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

image
Введение в мобильную аналитику


На видео аналитический аналитик анализирует аналитические системы по признаку аналитичности. «Эти системы полностью бесплатны, однако за эти деньги вы получаете...» Чего, б***ь?
Чтобы увидеть, как безграмотно пишет Qbit.

Information

Rating
Does not participate
Registered
Activity