• Как выучить английский начинающему программисту?

    badprogrammist
    @badprogrammist
    Senior java developer
    Я всем рекомендую книгу Оваденко, после нее с грамматикой и письмом проблем не будет.
    Ответ написан
    Комментировать
  • Графика: что важно для оптимизации?

    @ssrdop
    Проще понять, что если на сайте есть полное изображение и превьюшка, то лучше всего делать и тот и тот файл, не используя средства css для уменьшения изображений. Плюс использовать средства для уменьшения веса без потери качества, например https://tinypng.com/
    Ответ написан
    Комментировать
  • Графика: что важно для оптимизации?

    Nekto_Habr
    @Nekto_Habr
    Чат дизайнеров: https://t.me/figma_life
    Комментировать
  • Графика: что важно для оптимизации?

    AppFA
    @AppFA
    Frontend developer at Yandex
    По поводу формата, если есть прозрачность на картинке - то png, если нету - все в jpg, после все прогоняете через минификатор вроде "imagemin", "pngquant". Всякие иконки собираете в спрайты. Если важен трафик для мобильных устройств, то можете дополнительно создавать картинки с маленьким разрешением дабы они меньше весели.
    Так же ели есть возможность различные иконки делаете в SVG формате, они в разы меньше весят чем растровое изображение.
    Практически любой градиент сейчас спокойно можно на css сделать.
    Ответ написан
    Комментировать
  • Как работает переменная self?

    Lerg
    @Lerg
    Defold, Corona, Lua, GameDev
    Lua конструктивно очень простой язык. И self это самая обыкновенная переменная, её особенность в том, что она автоматически создаётся при использовании двоеточия в объявлении или вызове функций (которые находятся внутри таблицы). Так вот self явлется ссылкой на эту самую таблицу.

    Можно взять такой пример:
    local cat = {}
    cat.name = 'Fluffy'
    function cat:sayName()
      print(self.name)
    end
    
    cat:sayName()


    Создаём таблицу cat, делаём строковое поле name, объявляем ещё функцию через двоеточие и появляется возможность использовать self.

    Далее вот пример абсолютно идентичного кода, просто уберу весь синтаксический сахар:
    local cat = {}
    cat['name'] = 'Fluffy'
    cat['sayName'] = function(self)
      print(self['name'])
    end
    
    cat:sayName()


    Или так
    local cat = {}
    cat.name = 'Fluffy'
    cat.sayName = function(self)
      print(self.name)
    end
    
    cat:sayName()


    Или так
    local cat = {
      name = 'Fluffy',
      sayName = function(pet) -- не обязательно self
        print(pet.name)
      end
    }
    
    cat:sayName()


    Или даже так
    local cat
    local name = 'Fluffy'
    local sayName = function() -- вообще пусто
      print(cat.name)
    end
    
    cat = {}
    cat['name'] = name
    cat['sayName'] = sayName
    
    cat:sayName() -- Или просто cat.sayName() через точку
    Ответ написан
    2 комментария
  • Стоит ли сейчас учиться программированию на ActionScript в моем случае?

    @Mop9k89
    Начните с чего то, а там уже попробуете что то другое и сделаете для себя вывод.
    Ответ написан
    Комментировать
  • Для чего нужна рантайм-библиотека?

    @Mercury13
    Программист на «си с крестами» и не только
    В рантайм-библиотеке хранятся стандартные функции языка программирования. И malloc/new тоже.

    P.S. Также хранятся внутренние функции для обслуживания точки входа (int main).
    Ответ написан
  • Стажировка C++ программистом в компании. Реально ли?

    opium
    @opium
    Просто люблю качественно работать
    Ну что вы такая ленивая скотина ну напишите одну игру и у вас уже будет опыт выше вашего джуниора
    Ответ написан
    Комментировать
  • Какие классы для графического редактора использовать?

    Zifix
    @Zifix Куратор тега Qt
    Barbatum
    Мой ответ может показаться странным, но попробуйте создать тему с тем же текстом вот тут, шансов получить совет от хорошего специалиста по графике в Qt сильно прибавится.
    Ответ написан
    2 комментария
  • Курсы по формальной логике и системному мышлению: существуют ли такие?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    Почитайте "Гарри Поттер и методы рационального мышления" (hpmor.ru)
    А оттуда и статьи на lesswrong.ru

    Очень неплохо показывает что такое рациональность и логика.
    Ответ написан
    Комментировать
  • Приведение к типу интерфейса: какой смысл?

    Вы не понимаете механику полиморфизма и виртуальных вызовов.

    Интерфейс - это окно, через которое вы смотрите на реальный объект. Механизм позднего связывания, а именно - виртуальных функций - позволяет вам иметь ссылку типа ISome, которая, тем не менее, ссылается на РЕАЛЬНЫЙ объект с РЕАЛИЗАЦИЯМИ методов интфейса ISome, и вызывать эти методы через интерфейс.

    Обратите внимание - компилятор не позволит вам написать new ISome; (можете попробовать), т.к. невозможно инстанциировать интерфейс. Это всего лишь договор о взаимодействии, и для того, чтобы взаимодействие произошло, нужно чтобы этому договору подчинялись какие-либо реальные объекты.

    Когда вы приводите тип ссылки от SomeObject к ISome, сама ссылка НЕ МЕНЯЕТСЯ (по кр. мере вы этого не увидите), переменная нового типа ссылается на ТОТ ЖЕ САМЫЙ объект, а не на "блок методов". Ссылки всегда указывают на конкретные объекты, невозможно сослаться на "блок методов", не имеющий реализации, язык так не работает. Суть интерфейсов в том, что они соединяют в себе идею позднего связывания и строгую типизацию одновременно. Используя ссылку типа ISome вместо SomeObject, вы как бы смотрите на тот же объект через другое "окно", и видите у него другой набор методов. Это важнейший этап в процедуре абстрагирования - найти у объектов похожие черты, и реализовать ряд алгоритмов на этой основе. Как вы и сами уже заметили - единообразно работать с объектами разных типов.
    Ответ написан
    1 комментарий
  • Приведение к типу интерфейса: какой смысл?

    alexclear
    @alexclear
    A cat
    > Но не пойму механику: у нас после приведения в obj теперь ссылка на блок методов (точнее сигнатур) ISome, а это только сигнатуры без реализации

    А куда делась реализация? Исходно она была.
    Приведение типов не меняет внутреннюю структуру объекта, как и метаинформацию о нем.
    Какого типа он был исходно - такого и остался. Вы можете рефлекшном проверить.

    > и кроме того нет доступа к полям объекта obj!

    Нет доступа откуда именно?

    > Но получается, я не прав.

    Я не до конца понимаю, что именно Вы себе представили не так, но Вы, видимо, представили что-то неправильное. Объект после приведения типа остается все тем же.
    Ответ написан
    1 комментарий
  • Как распарсить строку и построить дерево категорий товаров и услуг?

    nonlux
    @nonlux
    Почитай банду четырех )
    Например интерпритатор
    Ну и многое другое от них, позволит создать лаконичный парсер.
    Ответ написан
    Комментировать
  • Как распарсить строку и построить дерево категорий товаров и услуг?

    @olexande
    Для хранения, возможно деревья помогут ...
    habrahabr.ru/post/112421
    Ответ написан
    Комментировать
  • Как распарсить строку и построить дерево категорий товаров и услуг?

    orlov0562
    @orlov0562
    I'm cool!
    Я напишу в целом, т.к. это подойдет для любого языка

    Алгоритм работы парсера довольно прост, и по большей части делится на 3и этапа:
    1) Получить данные
    2) Разобрать данные
    3) Сохранить данные

    1) Для того чтобы получить данные, надо изучить стек функций для работы с сетью. Можно гуглить по такому запросу "Как скачать веб-страницу" + твой ЯП (PHP, Java, Python и т.д.). Тут ты должен написать функцию которой на вход передашь url, а на выход получишь данные (html, json, xml и т.д.)

    2) Разобрать данные можно либо с помощью готовых библиотек под нужный формат, либо с помощью регулярных выражений, либо с помощью строковых функций. Тут на помощь придет запрос "Строковые функции" + твой ЯП или "регулярные выражения" + твой ЯП. На этом этапе ты должен написать функцию, которой на вход поступают данные, а на выходе получаешь заранее утвержденную структуру.

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

    Ну, собственно и всё. Идешь в гугл, изучаешь матчасть и пишешь парсер.

    Если же тебя в большей степени интересуют алгоритмы разбора, тогда советую посмотреть код "калькуляторов" на твоем ЯП, погуглить можно по запросу "калькулятор со скобками", "Разбор и вычисление выражений". Это классическая задача, разбор твоего куска будет очень похож.
    Ответ написан
    6 комментариев
  • Деление игры на GameState'ы: как?

    @localghost
    Мне кажется, что само слово state/состояние хорошо отражает суть абстракции. Конечно, получается, что разные окна - это обычно разные состояния, потому что в разных окнах (и разных состояниях) игра делает разные вещи и ждет от пользователя разных действий.
    Я не думаю, что в обычной игре каждый уровень стоит делать отдельным состоянием. Попробуйте исходить из принципа "не повторяться". Обычно на каждом уровне происходит одно и то же: игра ждет пользовательского ввода; в ответ на один и тот же ввод на разных уровнях игра реагирует одинаково, и т. п. - зачем вам разный код на разные уровни? Код состояния (или окна) уровня может вообще ничем не отличаться. Меняется значение переменной - загружаются другие данные. А алгоритмы все те же.

    Хотя, конечно, в итоге делайте так, как вам удобно и понятно.
    Ответ написан
    Комментировать
  • Деление игры на GameState'ы: как?

    @MarkusD
    все время мелю чепуху :)
    ps. Тут на Phaser.js кто-нибудь пишет, есть смысл вопросы по нему задавать?

    Это не форум, тут формат общения - вопрос-ответ. Один вопрос от тебя и много ответов от других.
    Пиши с тегом javascript или phaser-js и тебе наверное ответят.

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

    Вот мой ответ: Подходи к вопросу аналитически, пойми что для твоей структуры геймплея будет удобнее. Информации ты никакой по своему вопросу не дал, так что и ответов внятных вряд ли можно ждать. Асам вопрос очень прост.
    Ответ написан
    Комментировать
  • System.Object -> System.ValueType (знаковый - на стеке) - как это?

    Странно у вас. Книгу почитайте.
    DateTime тоже через new, но это значимый тип.
    Стековых регистров не бывает. (я не слышал)
    System.Object - ссылочный тип.
    Интересные заметки по C# и CLR
    Интересные заметки по C# и CLR (v2.0)
    ITVDN
    Ответ написан
    Комментировать
  • System.Object -> System.ValueType (знаковый - на стеке) - как это?

    Nipheris
    @Nipheris Куратор тега C#
    System.Object является базовым для System.ValueType потому, что C# скрывает от вам процесс boxing-а значений value-типов в ссылочные обертки.
    Где выделяется память для ссылочных типов и типов-значений спецификацией не оговаривается (в текущих реализациях типы-значения иногда (!) выделяются на стеке, но могут быть и на куче, если являются членами ссылочных типов (массивы, другие классы, и т.д.). Для вас важно лишь знать логику поведения: как присваиваются и передаются в функции значения reference и value-типов, остальное - детали реализации.

    Довольно важная для понимая статья: blogs.msdn.com/b/ericlippert/archive/2010/09/30/th...
    Ответ написан
    2 комментария