• Как расположить объекты в системе координат XY внутри блока?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    <span class="object" style="left: 20%; top: 45.6%;"></span>

    .object {position: relative;} /* а можно и absolute */

    И дальше в js управлять свойствами left и top. А, вам не нужно менять положение - тем проще.

    Возможно, если много объектов, то перейти на использование canvas.
    Посмотрите на Fabric.js (есть статьи на хабре: один и два)
    Ответ написан
    Комментировать
  • Какие есть развивающие игры для будущих программистов?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    ColobotCeebot) - обучающая игра, обучает чему-то типа языка си. Отличный полигон для проверки алгоритмов.
    Настольная игра для самых маленьких программистов (от 7 лет)
    Ответ написан
    Комментировать
  • Как включить перевод в symfony для форм?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    не делайте в messages.ru.yml раздел "forms:", поставьте перевод прямо так, как написано на странице. У вас в форме поля maker и category, а на странице они выводятся как Maker и Category. Так?
    Напишите в переводе именно так:
    Maker: Создатель
    Category: Категория

    Ну а если хотите добавлять префикс form, то добавьте в описание формы атрибут label:
    $builder
            ->add(
                'maker',
                'entity',
                array(
                    'label' => 'form.maker',
                    'class' => 'MyBundle:ItemMaker',
                    'property' => 'name',
                    'empty_value' => '-- Все --'
                )
            )
    
            ->add(
                'category',
                'entity',
                array(
                    'label' => 'form.category',
                    'class' => 'MyBundleCategory',
                    'property' => 'name',
                    'empty_value' => '-- Все --'
                )
    );

    то есть, укажите label в том же виде, как фреймворк его видит в файле перевода. Но тогда не забудьте добавить и английский перевод! (если он вам нужен)
    Ответ написан
    4 комментария
  • Как начать програмировать для дилитанта?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Начинать никогда не поздно, 35 лет - жизнь только началась, можно сказать. А ваше несчастье не помешает вам развиваться в выбранном вами направлении (программирование). Наоборот, большое количество программистов так и работают - удалённо, из дома. Поэтому, я думаю, что программирование сможет стать вам реальной профессией, а не только хобби (как вы написали в вопросе - "Цель научится писать небольшие прикладные программы так сказать для домашнего пользования").
    А для того, чтобы стать хорошим специалистом, у вас всё есть: самое главное - желание, а также свободное время. При должном усердии уже через полгода-год вы будете уметь "небольшие прикладные программы", а через два года сможете стать конкурентноспособным программистом. Хотя, помните, что хороший программист учится всегда.
    Вам только стоит выбрать, к чему вас больше тянет, потому что в программировании очень много направлений. Посмотрите мой ответ на один вопрос, там я привёл список направлений и технологий, которые нужны для этих направлений. Также указал, что отличает хорошего специалиста от не очень хорошего.
    Я бы посоветовал начать программирование с языка c#, но у вас Линукс, а там нет нормального си-шарпа.
    Хорошим решением был бы выбор Python - это очень простой, но мощный язык; но у него достаточно необычный синтаксис.
    Можно начать и с PHP, но с ним нужно быть аккуратнее, он тоже очень простой, и поэтому легко позволяет писать плохо. Хотя как язык он очень даже неплох.
    Я хочу помочь вам изучать программирование. Напишите мне (лучше на скайп), и я смогу помочь вам выбрать, с чего начать, и далее буду отвечать на ваши вопросы.
    Ответ написан
    1 комментарий
  • Куда разместить методы?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Хорошим решением будет создать отдельный класс Loader, который будет использовать класс DB (его универсальные методы) для извлечения данных. Что-то типа паттерна Фабрика.
    В сам класс DB такие методы лучше не писать, потому как очень скоро в этом классе будет 100500 методов, по два для каждого класса приложения.
    Также не стоит помещать подобные методы в тот класс, данные которого хранятся в базе. Сам объект должен уметь работать с полученными данными, и не важно, из какого источника данные получены - может быть, вы захотите хранить эти данные не в БД, а в файле, или в мемкеше.
    Ответ написан
    4 комментария
  • Создание игры на IOS в unity3d без мака?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Unity Cloud Build поддерживает сборку для iOS. Но пока доступна для Pro-пользователей.
    https://unity3d.com/ru/unity/cloud-build
    Ответ написан
    Комментировать
  • Какие порекомендуете статьи на русском про архитектуру WEB-приложений?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Мне в своё время очень много дал мастер-класс Алексея Рыбака (Основы построения масштабируемых высоконагруженных...). Попробуйте найти, может, он в этом году где-то будет докладывать эту тему.
    Вот тут недавно был небольшой доклад по теме.
    Ответ написан
    Комментировать
  • Есть ли зависимость между весом игры и количеством скачиваний?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Вот посмотрите статью "Увеличиваем прибыль от iOS приложения втрое. Никакого продвижения, только техника" от guskov (ссылка), в ней как раз исследуется этот вопрос.
    TL;DR - да, влияет. Уменьшайте пакет как можно сильнее, остальное подгрузите при первом запуске.
    Ответ написан
    Комментировать
  • Как написать реал-тайм онлайн игру? Методология, паттерны, статьи?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    По части вопросов и общих моментов - присоединяюсь к @kazmiruk и @dplsoft, они всё правильно сказали. Их советы на самом деле хороши.

    Добавлю только несколько ссылок, которые вам могут пригодиться:
    0fps.net - ресурс по созданию реалтаймовых сетевых движков (на англ.)

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

    Две статьи от Маилру по созданию сервера: Базы данных в онлайн-играх. От Аллодов Онлайн до S... и
    Архитектура сервера онлайн-игры на примере Skyforge. Подробно и качественно рассматривают создание сервера игры.

    Сетевое программирование для разработчиков игр:
    Часть 1: UDP vs. TCP
    Часть 2: прием и передача пакетов данных
    Часть 3: виртуальные соединения поверх UDP

    Ещё полезные статьи с хабра:
    Высоконагруженные системы: решение основных проблем
    Создание многопользовательской realtime игры на node.js
    Как не нужно писать большие сервера - на java
    Ответ написан
    Комментировать
  • В двух словах, что такое БЭМ?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    БЭМ - это такая методология вёрстки от Яндекса. Она подразумевает разбиение страниц на отдельные смысловые блоки (комментарий, пост, заголовок, футер, форма, инпут и т.п.). Каждый блок может состоять из других блоков. Основная идея - как можно больше повысить возможность повторного использования уже написанных блоков, для чего используются модификаторы. Плюс, БЭМ подразумевает отказ от каскадных стилей, потому что они препятствуют повторному использованию.
    Например, на странице есть два разных заголовка (например, отдельно в статье, и отдельно во врезке). Как все привыкли делать это? есть код заголовка:
    <h1 class="header">Заголовок</h1>
    И мы ставим эти заголовки в текст статьи и во врезки:
    <article class="article">
        <h1 class="header">Заголовок</h1>
        <p>Текст текст текст</p>
    </article>
    <aside class="incut">
        <h1 class="header">Заголовок</h1>
        <p>Текст текст текст</p>
    </aside>

    Тогда обычно мы используем каскад, чтобы стилизовать заголовок во врезке:
    .header {font-size: 2em; padding-bottom: 1.5em;}
    .incut .header {text-decoration: italic;}

    Всё хорошо, но теперь мы не можем просто перенести эти стили заголовка во врезке в другое место, потому что эти стили привязаны именно ко врезке (классу incut). Плюс, что ещё хуже, если к элементу привязано несколько различных стилей, образующихся подобными каскадными правилами, то перенести такой внешний вид в другое место становится очень трудоёмко. А также, из-за большей специфичности каскадных стилей, их сложнее "перебить" новым стилем.
    БЭМ предлагает отказаться от каскадных стилей и создавать отдельные стили-модификаторы:
    <article class="b-article">
        <h1 class="b-article__header">Заголовок</h1>
        <p>Текст текст текст</p>
    </article>
    <aside class="b-article b-article__incut">
        <h1 class="b-article__header b-article__header_incut">Заголовок</h1>
        <p>Текст текст текст</p>
    </aside>


    .b-article__header {font-size: 2em; padding-bottom: 1.5em;}
    .b-article__header_incut {text-decoration: italic;}


    Чем больше проект, тем выгоднее использование подобной методологии. На маленьких и средних проектах БЭМ может быть избыточен. Хотя вот была статья habrahabr.ru/company/yandex/blog/234905 про использование в маленьких проектах.

    БЭМ может использоваться самостоятельно, вручную создавая все элементы и блоки. Но существует обширный инструментарий для БЭМа, который помогает создавать библиотеку элементов и блоков.

    Ну вот. Получилось не в двух словах, но менее подробно качественно описать БЭМ не получится, имхо.
    Ответ написан
    Комментировать
  • Как правильно обработать данные из mysql БД?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Если бы все данные были в одной записи, можно было бы просто вывести сумму в select:
    SELECT sm1_to+sm1_po1+sm1_po2 AS `hours` FROM full WHERE id_prepodavatel = 1

    Но у вас разные строки (я так понял, по одной колонке заполнены в каждой записи).
    Тогда нужно добавить GROUP BY disciplina и указать sum(sm1_to)+sum(sm1_po1) и т.д.
    Но основная проблема у вас не в этом - вам нужно переделать таблицу и не делать так много колонок. Каждый раз, когда у вас начинаются колонки со странными названиями, всегда возникает вопрос - а правильно ли спроектирована таблица?
    Можно сделать что-то типа такого:
    id int(11) NOT NULL AUTO_INCREMENT,
      disciplina varchar(255) DEFAULT NULL,
      nomer_gr varchar(255) DEFAULT NULL,
      type int(11) NOT NULL,
      hours int(11) NOT NULL DEFAULT 0,
      vakansiya int(11) DEFAULT NULL,
      id_prepodavatel int(11) DEFAULT NULL,
      PRIMARY KEY (id)

    То есть разбить одну длинную запись на множество маленьких, у каждой из которых указан тип.
    И тогда будет очень просто просуммировать через GROUP BY:
    SELECT id_prepodavatel, disciplina, sum(hours) AS `hours` FROM full WHERE id_prepodavatel = 1 GROUP BY disciplina

    Тип записи будет указывать, какие именно часы указаны в этой записи. Можно сделать числовым типом (как я указал выше), а можно сделать enum. В типе и будут все эти ваши sm1_to, sm1_po1, sm1_po2 и другие. Количество строк в таблице увеличится примерно в 20 раз (1500 * 20 = 30000), но в этом нет ничего страшного.
    Заодно, если добавится новая группа, то вам не надо будет менять структуру таблицы.
    Ответ написан
    4 комментария
  • Почему select отображает пустые поля записей после их удаления?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    поможет ivaynberg.github.io/select2 - самый первый пример в The Basics (второй input)
    Ответ написан
    Комментировать
  • Как реализовать теги для нескольких сущностей в SonataAdminBundle?

    lexxpavlov
    @lexxpavlov Автор вопроса
    Программист, преподаватель
    Решение проблемы нашлось в Saving hooks. Вот статья, где я описал решение:
    Реализация системы тегов в админке с бандлом Sonat...
    Ответ написан
    Комментировать
  • На чем лучше написать, или где взять движок для 2D (2.5D) MMORPG?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Unity3d будет отличным началом для вас. Юнити - мощнейшая платформа, на которой можно сделать всё, что угодно. В том числе и 2d MMO.
    Но это будет не просто, сразу предупреждаю. Сделать платформер или 2д-бродилку на юнити можно очень быстро, но вот именно сделать ММО - это задача гораздо сложнее.
    (В Unity3d 5 сейчас разрабатывают новую платформу для работы с сетью, и там они обещают сильно упростить работу с сетью, в том числе в MMO-проектах).
    Есть некоторые сложности с бесшовностью, но они решаются. Юнити уже сейчас обладает огромным функционалом, покрывающим все базовые требования к любой игре, плюс есть обширный магазин аддонов (ассетов).
    Платформа любая - и клиент, и браузер, и мобилки, и даже консоли.
    Язык программирования - основной C#, можно писать на Javascript (точнее, язык, очень похожий на javascipt) и Boo (что-то типа Python).
    Ответ написан
    4 комментария
  • Какую таблицу с юзерами использовать?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    customer - клиент, тот, кто будет покупать у вас на сайте.
    user - пользователь сайта с точки зрения администрирования, то есть тот, кто имеет доступ к админке, человек из вашей команды.
    При регистрации клиенты должны создаваться в таблице customer.
    Но что значит "Какую нужно использовать, когда юзер регистрируется и почему?" - разве они не сами там создаются?
    Ответ написан
    Комментировать
  • Как найти часть массива в массивах?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    так как искомый массив не совпадает с массивами в списке, то он и не находится.
    Вам нужно перебором вашего $arr напрямую проверять, не нашёлся ли нужный.
    foreach ($arr as $i => $a) {
      if ($needle['Alias']==$a['Alias'] && $needle['Parent']==$a['Parent']) {
        // $a - ваш искомый подмассив
        doSomething($a);
        break;
      }
    }

    Если в массиве-списке может быть несколько совпадений, то убрать команду break;
    Ответ написан
    Комментировать
  • Как лучше в expres.js передать объект?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    У вас много разных этих subscribe? На каждого клиента создаётся отдельный?
    Может, лучше оттуда передать объект subscribe в инициализацию io?
    Или не передавать, а на месте создать новый subscribe. Это же Redis - подсоединяйся к каналу и слушай.
    Ответ написан
    9 комментариев
  • Есть ли легкие книги по C#?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Мне понравилась книга Б.Ватсон С# 4.0 на примерах. Хорошие рецепты для решения частых задач. Но теории в ней нет, по теории параллельно могу порекомендовать Фленова.
    Ответ написан
    Комментировать
  • Не будет ли непопулярность хостингов node.js проблемой для создания попсовой CMS?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Мне кажется, сейчас дело идёт именно к специализации хостинга под конкретную платформу.
    Всё больше появляется managed-платформ для конкретного софта.
    Почитайте статью Хостинг: продолжайте делать то же самое, вас уже съели, где описана как раз эта тенденция (в том числе, managed wordpress hosting).
    Уже начали появляться подобные сервисы, например, вот не так давно на хабре презентовали Appnestic.

    Вы хотите на основе этой платформы сделать бизнес? И именно "для домохозяек"? Тогда, как мне кажется, вам нужно будет пробовать делать поднятие всего бэкенда автоматически при регистрации у вас, чтобы после формы регистрации пользователь сразу переходил в админку своей новой CMS.
    Ответ написан
    1 комментарий