• Почему в программировании столько математики?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    Копирование файлика на уровне ОС - элементарная математика (байты перенести из одного места в другое), все числа целые, адресация простейшая.

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

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

    Программирование в 2д или 3д - геометрия разного порядка. Вычисление стандартных вещей - можно ли пройти из точки А в точку Б и можно ли увидеть из точки А точку Б, а также как это отрисовать с минимальными ресурсами - ужас.

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

    В общем алгоритмы, алгоритмы, алгоритмы.
    Как говорил Ломоносов, математику следует учить только за то, что она приводит ум в порядок.
    Ответ написан
    2 комментария
  • Как поступать с невообразимым количеством стилей текста в макете PSD при верстке?

    1. Дать по шапке дизайнеру. Предварительно спросить, сделал ли он это намеренно. В случае утвердительного ответа - дать по шапке дважды.
    2. За использование 5 разных шрифтов в дизайне - дать по шапке третий раз.
    3. Если дизайн со всеми кривыми отступами выглядит очень круто (в чем я сомневаюсь) - извиниться за третий удар по голове перед дизайнером. Только за третий.
    4. Обсудить с заказчиком этот момент. Кому-то отступы не важны, он и не заметит ваших 15пкс вместо 20, кому-то нужно точь в точь, но тут уже ничего не поделаешь.
    Ответ написан
    2 комментария
  • Миграции могут уронить проект, как быть?

    @Fortop
    Tech/Team lead
    Не нужно ничего останавливать.
    Есть таблица Т.

    Схема простая.
    1. Сначала создаём пустую таблицу Т1 с нужной структурой. Т.е с уже добавленным столбцом.
    2. Затем копируем данные из Т в Т1.
    3. Если запись в Т очень активная, то возможно придётся повторить процесс копирования для данных, что добавились пока мы копировали исходные.
    4. Когда период копирования станет небольшим отключить запись данных в Т.
    5. Сделать финальную синхронизацию.
    6. Переименовать Т в Т_OLD.
    А T1 переименовать в T
    7. Включить запись в Т
    Ответ написан
    2 комментария
  • Почему не подключаются файлы?

    ThunderCat
    @ThunderCat Куратор тега CSS
    {PHP, MySql, HTML, JS, CSS} developer
    Прочтите про абсолютные и относительные пути(и постарайтесь понять разницу).
    Будет проще если вы будете понимать разницу между "../css/", "/css/" и "css/", это вам сильно поможет.
    Надо понимать что данный скрипт будет получать браузер, для него доступны файлы только из директории открытой через веб сервер, путь для браузера начинается с домена, / вначале относительного пути означает что файл доступен по пути домен.тлд/ и дальше уже папка на сервере где лежит файл. проверьте подключается ли файл в хтмл, в хроме есть инспектор, возможно в .htaccess нужно добавить исключения на файлы css, котрые перенаправляются правилом.
    Ответ написан
    Комментировать
  • Как вы задаете идентификаторы для внутренних станиц, если макет пишется под ЦМС?

    БЭМ, модификаторы, вот это вот всё
    Ответ написан
    Комментировать
  • Как выровнить текст относительно центра картинки?

    webirus
    @webirus
    Тыжверстальщик! Наверстай мне упущенное...
    Слишком популярный вопрос, чтобы каждый раз писать код.

    6 методов вертикального центрирования с помощью CSS .
    ruseller.com/lessons.php?id=1248

    Так как статья старая, в нее не добавлен Flexbox.
    Это будет 7 способ flexbox.help

    dff99fda7a504452b382958663aa8290.png
    Ответ написан
    Комментировать
  • Как сделать верстку?

    webirus
    @webirus
    Тыжверстальщик! Наверстай мне упущенное...
    Не занимайся херней, отдай верстальщикам.
    Ответ написан
    5 комментариев
  • Стилизация textarea. Есть верстка, не понимаю как сделали иммитацию полей. Как это сделать?

    Machinez
    @Machinez
    линейный градиент, вот на скорую руку
    Ответ написан
    Комментировать
  • Как сделать адаптивный блок?

    webirus
    @webirus
    Тыжверстальщик! Наверстай мне упущенное...
    Когда хотите разобраться с каком-то сайтом / блоком / кодом.
    Берите и используйте консоль разработчика, она для этого и придумана.
    В браузерах, как правило, вызывается клавишами CTRL+SHIFT+I.


    По всем пунктам отвечать подробно лень, поскольку тут вообще всё элементарно.

    Вкратце.
    1. Можно абсолютным позиционированием (position: absolute;), можно через транформацию (transform: translate;).
    2. Самый простой способ: через CSS - background: url('...') 50% 50% / cover no-repeat

    По 3-му пункту пример можно посмотреть тут https://jsfiddle.net/webirus/99qfLkbo/
    Вчера делал только для другого ответа.
    Ответ написан
    Комментировать
  • Почему не сработала транзакция при откате миграции в yii2?

    @Mylistryx
    Если БД MySQL, то там, если мне не изменяет память, не работают транзакции на создание\удаление таблиц. Столкнулся с подобной проблемой при создании таблиц, например:
    Создать таблицу А, добавить внешний ключ А к Б. Все это обернуто в safeUp. Если в описании создания ключа Б ошибка, то таблицу А миграция создаст, а на создание ключа вывалит эксепшен. Отредактировав эту миграцию при попытке ее применить повторно будет вылетать эксепшен, что таблица А уже существует.
    Ответ написан
    5 комментариев
  • Каких знаний php для верстальщика будет достаточно?

    ruFelix
    @ruFelix
    Предсказание будущего по руке, таро, кофе.
    Надо знать вот эти штуки: if, foreach, echo, <?=$var ?> - это всё. Остальное нюансы конкретного проекта вам разъяснит программист максимум за пол часа.
    Ответ написан
    Комментировать
  • Перенос inline блоков парами

    @m-haritonov
    @iiil меня опередил:
    <!DOCTYPE html>
    <html>
        <head>
    		<style>
    			div {
    				display: inline-block;
    			}
    			
    			div>div {
    				display: inline-block;
    				width: 100px;
    				height: 100px;
    				background: #ccc;
    			}
    		</style>
        </head>
        <body>
    		<div>
    		   <div>1</div>
    		   <div>2</div>
    		</div>
    		<div>
    		   <div>3</div>
    		   <div>4</div>
    		</div>
    		<div>
    		   <div>5</div>
    		   <div>6</div>
    		</div>
    		<div>
    		   <div>7</div>
    		   <div>8</div>
    		</div>
    		<div>
    		   <div>9</div>
    		   <div>10</div>
    		</div>
    		<div>
    		   <div>11</div>
    		   <div>12</div>
    		</div>
        </body>
    </html>


    UPDATE: более изящный вариант:
    <!DOCTYPE html>
    <html>
        <head>
    		<style>
    			* { margin: 0; padding: 0; }
    			
    			ul { list-style: none; text-align: center; }
    			
    			ul>li {
    				float: left;
    				width: 100px;
    				height: 100px;
    				background: #000;
    			}
    			
    			ul>li:nth-child(odd) {
    				margin-right: 100px;
    				background: #999;
    			}
    			
    			ul>li:nth-child(even) {
    				margin-left: -100px;
    				background: #eee;
    			}
    		</style>
        </head>
        <body>
    		<ul>
    			<li>1</li>
    			<li>2</li>
    			<li>3</li>
    			<li>4</li>
    			<li>5</li>
    			<li>6</li>
    			<li>7</li>
    			<li>8</li>
    			<li>9</li>
    			<li>10</li>
    		</ul>
        </body>
    </html>

    Селектор ":nth-child" в IE доступен лишь начиная с версии 9.0, поэтому, если требуется поддержка более ранних версий IE, можно заменить его добавлением в CSS классов "odd" и "even" при генерации HTML кода.
    Ответ написан
    5 комментариев
  • Как проектируются такие приложения как игры? А именно, откуда берутся расчеты баланса и т.п.?

    @zlumer
    По моему опыту используются 5 основных видов балансировки цифр (сюда входит опыт, требуемый для левелапа, количество монстров на миссии, всякие характеристики персонажа в РПГ и т.п. - что угодно, что можно выразить в числовом виде):

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

    2. Интуиция.
    Берутся значения наугад, на основе опыта гейм-дизайнера. Если это уже пятая по счёту ММО, в которой принимал участие геймдиз, то он может в блокноте накидать несколько формул с учётом многих будущих проблем.
    Плюсы:
    * Результат есть очень быстро, после нескольких расчётов.
    * Отлично подходит для первой итерации баланса, после которой можно переходить к п.3 - экспериментам.
    Минусы:
    * Нужен очень компетентный гейм-дизайнер, прежде разработавший не один похожий проект.
    * Даже очень опытные люди могут грубо ошибиться.

    3. Эксперименты.
    В игру забиваются первые попавшиеся значения (либо на основе п.1 - берутся из любой игры, либо на основе п.2 - интуитивно подбираются), затем гейм-дизайнер садится за игру (либо сам, либо просит товарищей по команде/друзей/фокус-тестировщиков), начинает играть и изучает, где в балансе дыры - какие уровни проходятся слишком долго, какие заклинания слишком слабые и т.п.
    Эксперименты нужно использовать в каждом проекте, чтобы отловить поверхностные проблемы. Некоторые разработчики модов к играм балансируют так весь игровой экспириенс: поиграл, покрутил цифры, поиграл ещё.
    Плюсы:
    * Все поверхностные проблемы сразу видны.
    * Не нужно никакой теоретической подготовки и расчётов, достаточно просто запустить игру и посмотреть.
    * Проверять работу всё равно нужно будет, можно сделать это на этапе начального баланса.
    Минусы:
    * Проверки занимают очень много времени.
    * Игроки зачастую проводят в игре больше времени, чем может себе позволить геймдиз (касается ММО и прочих больших игр), поэтому некоторые области не удастся проверить.
    * Персональные ощущения - это хорошо, но всегда стоит помнить, что стиль игры у разных людей отличается, и игрок может пойти по другому пути, чем дизайнер.

    4. Расчёты.
    Самый теоретический метод: задаётся некая величина, в которой оценивается балансировка (время, некий коэффициент сложности и проч.), а потом все цифры к ней подводятся.
    Пример 1: мы хотим, чтобы игрок получал левел-ап каждые 3 минуты. На каждом уровне просчитывается средняя скорость набора экспы, например 10 единиц в секунду на 5 уровне и 11 единиц в секунду на 6 уровне. 10*60*3 = 1800 опыта нужно с 5 по 6; 11*60*3 = 1980 опыта нужно с 6 по 7.
    Пример 2: мы делаем казуальную match-3 игру и чередуем сложные уровни с лёгкими. Сложным считается уровень с вероятностью победить около 50%, лёгким - с вероятностью победить около 95%. Мы рассчитываем вероятность победы в каждом из уровней (на основе исходных позиций шариков, например), и размещаем их в желаемом порядке.
    Плюсы:
    * Можно заранее запланировать экспириенс игрока, даже на очень высоких уровнях.
    * Легко вносить значительные изменения в баланс - просчитанные таблицы сразу покажут, где возникают проблемы.
    * Таблица может просто лежать на столе и напоминать, какие математические ограничения следует учитывать.
    Минусы:
    * Нужен человек, разбирающийся в математике. Хотя бы уметь рисовать параболы.
    * Много работы в Excel, тысячи цифр (на одном проекте у меня был документ с где-то 30 таблицами, в которых было по 10-25 столбцов и сотни строк - помнить их все и поддерживать в актуальном состоянии было очень затратно по времени).
    * Игра может быть просчитана очень хорошо, но играть в неё при этом будет не интересно - удовольствие от игры гораздо легче нащупать п. 3 - экспериментами.

    5. Статистика.
    Измеряются статистические показатели игроков: какой уровень они получают в первые 10 минут игры, какие миссии проходят, сколько шагов туториала смотрят, прежде чем отменить его. На основе этих данных делаются выводы.
    Например, если квест №7 выполняет 97% игроков, квест №8 - 45% игроков, а квест №9 - 95% игроков (считается процент от тех, кто дошёл до этого квеста), то сразу видно, что квест №8 чем-то сильно игроков смущает, надо проверить текст миссии, условия выполнения и прочее.
    Плюсы:
    * Реальные данные от тысяч игроков, сразу видны проблемы.
    Минусы:
    * Надо знать, что считать. Выбор метрик определяет эффективность этого метода.
    * Для этого способа подходят не все игровые платформы: нужно соединение с интернетом и желательна возможность быстрого обновления игры (например, в соц.сетях можно иметь очень кривой баланс, но в первые дни после релиза собирать статистику и крутить его до приемлемого).
    Ответ написан
    Комментировать