• С чего начать создание игры?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Раз игры никогда раньше не делали, то забудьте про онлайн и 3d, начните с классики: тетрис, pacman, арканоид. Возьмите готовой графики с этого сайта и попробуйте сделать аккуратную маленькую законченную игрушку. Скорее всего, через несколько недель окажется, что делать даже самые примитивные игры не так уж и просто. Наращивать функционал можно, но для этого нужно хорошо понимать саму разработку игр, первые пять-десять игр в любом случае должны легко умещаться у вас в голове, а когда разберётесь с малым масштабом, тогда уже можно думать о каком-то росте. И сразу разочарую, никакие инвесторы не будут вас слушать без выпущенных игр.

    Из популярных сейчас движков самый дружелюбный к начинающим это Unity. Посмотрите официальные туториалы, поучаствуйте в геймджемах, начните с малого прежде чем рваться собирать команду и строить вселенные.
    Ответ написан
    1 комментарий
  • Best practics ООП?

    e_svirsky
    @e_svirsky
    Web Developer
    2й вариант без сомнений единственно верный.
    Ответ написан
    2 комментария
  • Как сделать документацию к коду?

    @kn0ckn0ck
    Продюсер
    Есть две крайности, которых лучше избегать:
    1. красивая и исчерпывающая документация требует колоссальных ресурсов на поддержку
    2. сложно воспринимаемый код, без малейших подсказок с чего все начинается и чем заканчивается

    Стандартные решения:
    1. самодокументируемый код, составленный так, что читающий может понять что для чего и в какой последовательности работает.
    2. описание интерфейсов (назначение метода, тип/суть параметров и т.п.) в форме комментов в коде.
    3. автоматическая документация (генерится из комментариев) - эффективно, только если сам код закрыт.
    4. модульные тесты, фиксирующие требования к коду и демонстрирующие его использование.
    5. описание высокоуровневого дизайна (High Level Design, HLD), описывающий какие элементы существуют, их взаимосвязь друг с другом и основные сценарии взаимодействия.

    Работающая документация - это компромисс из этих практик, релевантный конкретной ситуации.

    Кстати, проектная работа, это не только документация к коду, это еще и свод правил, которые позволят архитектуре не расползтись кто в лес кто по дрова, а также сохранят стилистику написания кода для единообразия и легкой поддерживаемости кода.
    Ответ написан
    12 комментариев
  • Какой учебник по Android Вы посоветуете?

    Conacry
    @Conacry
    Здравствуйте.
    Из книг могу посоветовать следующие:
    1. П. Дейтел, Х. Дейтел, А. Уолд. Android для разработчиков. 3-е издание(2016);
    2. Брайан Харди, Билл Филлипс,Крис Стюарт, Кристин Марсикано.Программирование под Android. 2-е издание (2016).

    Но у книг есть один веский недостаток - они выпускаются уже устаревшими.
    Если хотите иметь полную информацию по последним версиям Android, а также нововведениям в SDK, то официальная документация наше все - https://developer.android.com/index.html

    Также есть хороший ресурс с гайдами - https://guides.codepath.com/android
    Ответ написан
    Комментировать
  • Как могут взломать базу данных MySQL?

    @BorisKorobkov Куратор тега MySQL
    Web developer
    1. Через SQL-инъекцию (выполнить любой SQL). Если посмотреть в вопросах Тостера выложенный код, то в половине случаев там полно уязвимостей. Для защиты надо как минимум использовать PDO.
    2. Другой вариант - через JS/HTML-инъекцию (засунуть на страницу зловред и украсть пароль админа).
    3. Подобрать пароль админа.
    4. Есть еще много других способов.

    Что делать? Писать не-говнокод. Изучать все эти методы. Использовать тестирование, сканеры уязвимостей.
    Ответ написан
    Комментировать
  • Как могут взломать базу данных MySQL?

    @Z1odeypnd
    Здравствуйте.
    Технологий взлома уйма.
    В зависимости от того, какие привелегии получил "хакер" при вломе вашей БД - зависит очень много.
    Если он получил доступ только на чтение, то захешированные в MD5 пароли ему мало чем помогут, т.к. MD5 не имеет алгоритма обратной расшифровки и хэширование спасёт тем, что взломщик получивший доступ на чтение паролей - самих паролей не получит (есть конечно словарь MD5 хешей, то это другая история).
    Вообще для защиты любой БД есть несколько золотых правил:
    0. Переименовать дефолтного админа и защитить его сложным паролем.
    1. Для каждой БД должен создаваться свой владелец и несколько пользователей с разными наборами привелегий.
    2. Ни у одного из пользователей, созданных в п.1 не должно быть прав на изменение таблиц в соседней БД.
    Если есть необходимость обновлять соседние БД - делайте это триггером в соседней БД.
    3. Каждый внешний веб-сервис должен ходить в БД только с тем набором прав, которых ему достаточно для работы. Т.е. не нужно везде прописывать root и надеяться на лучшее.
    В этом случае, если взломщик получит привелегии этого пользователя, то сможет сделать только то, что разрешено этому пользователю. Тогда не выйдет "удалить все и сразу".
    Например, для наполнения католога товаров в интернет-магазине может быть отдельный пользователь, с правами на SELECT, INSERT, UPDATE, DELETE в таблице SHOP_PRODUCTS, например. И ничего более.
    А пользователи, приходящие в магазин за покупками могут делать SELECT, INSERT, UPDATE, DELETE только в таблицу CUSTOMER_CART. В коде веб-сервиса, естественно должна быть проверка, что покупатель редактирует СВОЮ корзину.
    Для показа каталога товаров - отдельный пользователь, имеющий право только на SELECT из таблицы SHOP_PRODUCTS.
    А продажу товара может делать отдельный пользователь, с правом только на UPDATE колонки AMOUNT в таблице SHOP_PRODUCTS. Пример:
    GRANT SELECT ON shopdb.SHOP_PRODUCTS TO 'trader_bot'@'shophost';
    GRANT UPDATE (AMOUNT) ON shopdb.SHOP_PRODUCTS TO 'trader_bot'@'shophost';

    И т.п. По принципу "Разделяй и властвуй."
    4. Писать запросы с использованием placeholder'ов (подстановку данных), что убережёт от SQL-инъекций.
    Пример:
    $DB->select('SELECT * FROM tbl WHERE a=? AND b=?', $a, $b);

    5. Если и БД и приложение, используещее БД установлены на одном сервере - отключить удалённый доступ к БД и работать через сокеты.
    6. Последний, но самый важный - БЕКАПЫ. При удалении всего и вся - нужно откуда-то восстановиться. Делайте бекапы и храните на отдельном сервере (не выставленном наружу).
    Ответ написан
    3 комментария
  • На чем лучше и быстрее написать парсер (PHP)?

    muhammad_97
    @muhammad_97
    PHP-разработчик
    DiDom: https://github.com/Imangazaliev/DiDOM

    + высокая скорость работы (сравнение с другими парсерами)
    + хорошая дока
    + большое количество поддерживаемых селекторов
    + самое главное - тесты

    Простой пример:

    $document = new Document('http://www.example.com/', true);
    
    echo $document->first('title::text');


    Чуть посложнее - парсим все ссылки:

    $links = $document->find('a[href]::attr(href)');
    
    var_dump($links);


    Еще сложнее - получить адреса всех ссылок-картинок:

    $links = $document->find('a[href]:has(img)::attr(href)');
    
    var_dump($links);


    Другие варианты:
    - Symfony DomCrawler
    - Zend Dom Query
    Ответ написан
    3 комментария
  • Зачем прописывать методы в Interface когда можно так же в классе?

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

    Ответ концептуальный. Ромбическое наследование. От А наследуются B и C, от них обоих наследуется D.
    1) Если в A есть поле, в D что, это поле будет в двух экземплярах? А если оно protected и в B мы добавили метод, который его меняет?
    2) Если B и C переопределяют какой-то метод foo(), как быть D? А если нужна и версия B.foo(), и C.foo(), и они обе вызывают A.foo — получатеся D.foo вызовет A.foo дважды? А если в C есть второй метод bar(), который вызывает foo() и начинает вести себя не так, как надо, если мы берём реализацию B.foo()?
    В общем, множественное наследование — хорошая штука, но ромбическое — штука опасная. В языке, где любое множественное наследование неизменно ромбическое, всё, что остаётся — делать такие условия, при которых ни 1, ни 2 не сработает.
    Одно из таких условий — унаследоваться от одного класса и нескольких интерфейсов. 1) У интерфейса нет полей, и 2) эталонная реализация, существующая в некоторых языках программирования, в любом случае менее приоритетна, чем конкретная реализация из класса. Вызывать ту и другую нет смысла: если программист написал свою сверх эталонной — значит, он хочет сделать то же другим путём.
    Ответ написан
    Комментировать
  • Нужен совет по верстке на Bootstrap 4?

    webinar
    @webinar Куратор тега Веб-разработка
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Если Вы используете какую-то технологию, это не значит, что другие нельзя использовать с ней. То что Вы хотите это явно:
    https://masonry.desandro.com/
    при чем c bootstrap она отлично ладит (с 4-м не юзал, но думаю что проблем быть не должно)
    Ответ написан
    3 комментария
  • Изучение и продвижение в PHP?

    e-antonov
    @e-antonov
    Начните с книги М.Зандстры про PHP. Очень ёмкая и подробная книга, охватывающая много аспектов. На мой взгляд это лучшая книга по PHP.
    Ну и порешай к задачки на codewars немножко, чтобы руку набить на простейших вещах
    Ответ написан
    Комментировать
  • Почему я не могу открыть в Adobe Photoshop CC 2018 сканы долларов?

    longclaps
    @longclaps
    Причина, указанная в мессаджбоксе, вам недостаточна?
    Так придумайте себе другую, например "меня дискриминируют" - среди определённого типа людей это популярный подход.
    Ответ написан
    2 комментария
  • Разговаривал по телефону, через пару дней вижу рекламу Вконтакте про то о чем говорил, Как так?

    Sanes
    @Sanes
    Может вы не только говорили, а еще и искали автошколы. Никто вас не слушает, не слушайте параноиков и пораженцев.
    Ответ написан
    25 комментариев
  • Как это сверстать?

    @ElijahTr
    Ответ написан
    Комментировать
  • Как это сверстать?

    @garfildalex6
    Ответ написан
    Комментировать
  • Стоит ли новичку начинать с фреймворка или лучше учиться на чистом php?

    @vodniciarv
    Пиши свои штуки на чистом PHP на процедуральном стиле.
    Потом изучай ООП и начни что-то сделать своё но уже на ООП.
    Потом изучай MVC и уже переходи к фреймворкам.
    Ответ написан
    32 комментария
  • Как реализовать смену дня и ночи в браузерной игре?

    @GreatRash
    Не знаю, что у вас за движок используется, но возможно вам поможет вот это решение.
    Ответ написан
    2 комментария
  • Как используете сервис для создания структуры сайта?

    Krasnodar_etc
    @Krasnodar_etc
    fundraiseup
    Не использовал пока, но внешне понравился

    flowmapp
    Ответ написан
    Комментировать
  • Как используете сервис для создания структуры сайта?

    @atlantika
    я думаю вам подойдет flowmapp.com, кроме структуры там еще можно работать с контентом этих страниц.
    Ответ написан
    Комментировать
  • Как школьнику найти время на программирование?

    @JuniorNoobie
    Сижу в поддержке, пишу мелкие проекты
    Ну просто "рукалицо"...
    Люди с двумя работами, семьей и детьми как-то находят время на программирование, а школьник найти не может. Ну не смешно ли?
    Могу посоветовать вести "расход времени" в блокноте в течение семи-десяти дней. Записывать все-все-все, на что тратишь время: занятие, продолжительность, важность. Потом посмотри на это и ужаснись. Сразу поймешь откуда взять время на программирование.
    Ответ написан
    2 комментария