• Как сделать массив немножко отсортированным?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    А как считать на сколько сместился элемент? По абсолютному индексу?
    Ну и да, нужно сделать массив "полностью" или "немножко" отсортированным?
    Из постановки задачи не ясны критерии. Полностью отсортировать любой массив нельзя за указанное число шагов с указанными ограничениями.
    Нам остаётся лишь увеличивать степень упорядоченности.
    Снова возвращаемся к критериям степени упорядоченности.
    Их можно придумать несколько:
    - количество "выбивающихся" элементов
    - минимизация суммы расстояний элементов от их оптимальной позиции.
    - среднее расстояние элемента от оптимальной позиции.
    - суммарное расстояние элементов от оптимальной позиции.
    Ответ написан
    Комментировать
  • Как сделать массив немножко отсортированным?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Есть такой массив (50 элементов):
    Задача: написать функцию которая полностью отсортирует данные максимум за 6 вызовов, с условием что за 1 вызов ни один элемент не сместиться больше чем на 5 позиций.

    Очевидно, что задача в такой постановке в общем случае неразрешима, т.к. максимальный элемент стоящий первым должен сместиться в процессе сортировки в самый конец, т.е. на 49 позиций, а 49 > 6 * 5.
    Ответ написан
    1 комментарий
  • Почему не работает простейшая функция?

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    У вас элемент text во время выполнения скрипта еще не существует.
    А в jsfiddle работает по той причине, что скрипты там выполняются в событии window onload, когда уже весь html готов.
    Переместите скрипт вниз либо вызывайте по событию DOMContentLoaded
    <HTML>
    <body>
     <script>
     function onload() {
         test = document.querySelector('#text');
         alert(test);
      }
     
    document.addEventListener("DOMContentLoaded", onload);
      </script>
              <p id="text">testing</p>
    </body>
    </html>
    Ответ написан
    Комментировать
  • Какую литературу можете посоветовать по Docker и Puppet?

    Про книги на русском языке слышал только про Эдриен Моуэт: Использование Docker, но не читал. Годная статья, которая в свое время помогла мне прояснить пару моментов https://habrahabr.ru/post/310460/
    Читайте статьи, обращайте внимание в статьях о какой версии Docker идет речь, так как можно встретить много устаревшего материала из-за того, что Docker стремительно развивается.
    В официальной документации все описано, только она и поможет, если возникнет какой-то вопрос.
    Про puppet ничего сказать не смогу, не использовал, но это штука известная и кучу раз описана.

    Griphite это система для сбора и анализа метрик включающая в себя демон сбора метрик carbon и бд для хранения whisper. Сам по себе не используется, обычно его подключают к grafana для построения дашбордов и графиков, так как в последней построение графиков гораздо лучше. Подходит для сбора и анализа большого количества метрик с высокой частотой. Grafana недавно научилась генерировать оповещения по метрикам, но все еще это не заменяет систему мониторинга. Посмотрите в сторону мониторинга Prometheus
    Elastic stack - имеете ввиду ELK ? ELK для сбора и анализа логов. Например zabbix очень плохо работает с логами, а ELK позволяет их парсить, устраивать поиск по логам и анализировать.
    Ответ написан
    Комментировать
  • Как настроить Windows 10 для нормальной работы на SSD дискe?

    Frankenstine
    @Frankenstine
    Сисадмин
    SSD тут ни при чём, у вас постоянно запускается и завершается какой-то процесс. Выяснив, какой - выясните, что делать.
    Ответ написан
    Комментировать
  • Как настроить Windows 10 для нормальной работы на SSD дискe?

    Jump
    @Jump Куратор тега Windows
    Системный администратор со стажем.
    Как настроить Windows 10 для нормальной работы на SSD дискe?
    Никак.Все версии windows начиная с win7 не требуют никакой настройки для SSD. Просто включаете и пользуетесь.

    Заменил жесткий диск SSD-шкой и появился какой-то глюк, я не знаю..
    Тут не в настройках дело.
    Проблема либо с диском (смотрите SMART), либо перенесли некорректно.
    Ответ написан
    3 комментария
  • Как построить онлайн карточную игру на PHP и canvas?

    riky
    @riky
    Laravel
    Тоже сейчас делаю карточную игру онлайн. Клон древней astral tournament - пример https://youtu.be/qZbVjDvKSx4?t=50s

    В основном для обучения. Делаю на nodejs (хотя в основном обычно работаю на php/symfony) нода для таких вещей лучше адаптирована, с сокетами работает эффективнее, а на пхп придется поизвращаться (либо как вы описали аякс запросами постоянными долбить сервер, либо вебсокеты тоже пытаться прикручивать).

    Собственно на ноде все просто. после создания вебсокета можно двухсторонне общаться, на клиенте и сервере можно отправлять события и подписываться на них. Вся логика на сервере - клиент тупой только отправляет события и отрисовывает присланные события.

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

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

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

    ну и далее все аналогично - любой клик по сути на клиенте всего лишь отправляет событие на сервер о том что хочет сделать игрок. все рассчеты на сервере и на клиенты уже отправляются события для изменения UI. Таким образом мухлевать невозможно.

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

    в общем и целом все просто
    1) на сервере и клиенте есть обработчики событий друг от друга.
    2) с клиента идут события - команды игроков (создать игру, присоединится, сделать ход, сдаться, пропустить ход)
    3) с сервера идут команды для изменения UI (добавить игру в список, открыть UI игры, запустить анимацию сценария хода)

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

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

    @VictKor
    Игровая индустрия, 3d моделирование
    Я в качестве серверной части решил использовать сторонний сервис - gamesparks. Есть куча и других аналогов baas. Правда в качестве клиента у меня Blend4Web. По крайне мере нет таких проблем, как описал copal в комментарии. Движок активно развивается нашими русскими программистами.

    Чтоже касается сервероной части, то по мне лучше платить небольшую сумму профессионалам, нежели тратить кучу времени и еще больше денег на свой сервак. У многих baas есть и free-тарифы, которых с лихвой хватит на обкатку и запуск игры.

    update
    Вот ссылки по b4w по играм:
    https://www.blend4web.com/ru/tag/47/1/
    Или этот автор много пишет о b4w:
    habrahabr.ru/users/prand/topics
    Ответ написан
    Комментировать
  • На чем лучше писать серверную часть браузерной онлайн игры на HTML5?

    @Elizavetta
    Matroid: gamedev/js-разработка
    На чем хотите, в вашем случае php/nodejs. php, socket.io + очереди подойдет.
    Ответ написан
    Комментировать
  • На чем лучше писать серверную часть браузерной онлайн игры на HTML5?

    @aleks_raiden
    Обычно для обновления данных используют выделенный реалтайм сервер, который не содержит игровой логики, а только пересылает сообщения по вебсокету или другому варианту. Посмотрите в сторону Socket.IO. Основная игра на РНР, откуда только рассылаются события для клиентов. Для связи между ними используется Redis (Pub/Sub).
    Ответ написан
    Комментировать
  • На чем лучше писать серверную часть браузерной онлайн игры на HTML5?

    onqu
    @onqu
    weasy
    Лучше на том, что знаете.
    Покопайте: Pomelo
    Ответ написан
    Комментировать
  • На чем лучше писать серверную часть браузерной онлайн игры на HTML5?

    @Fixid
    Используйте nodejs, php
    Ответ написан
    Комментировать
  • Windows 10 и Ubuntu 15.04: есть ли шанс сдружить?

    Ernillew
    @Ernillew
    Администрирую *nix-системы с 1997 года
    > Поэтому сразу возникли мысли, что как только папка windows.old удалится (а это произойдет через месяц), то и пункт меню в грабе слетит вместе с возможностью запуска 10-ки.

    Нет, пункт в грабе не слетит.
    Граб находит не windows.old, а виндовый загрузчик. Просто ему пофигу 7 или 10. Переименуйте пункт, если он вас смущает.
    Ответ написан
    Комментировать
  • Как вести учет изменений данных в таблице mysql (оптимальное решение)?

    Вам нужно организовать темпоральную таблицу из таблицы клиентов. Если очень коротко, то смысл такой таблицы в том, что каждая запись у вас может хранить не только актуальные в ДАННЫЙ момент факты (как это происходит в обычной таблице), а еще и те, которые были актуальны в какой-то промежуток времени ранее (или даже те, которые БУДУТ актуальны позже). Сейчас очень неплохая темпоральная модель предлагается в свежем стандарте SQL:2011. К сожалению, сейчас далеко не все СУБД внедрили поддержку этого стандарта (сейчас поддерживают Oracle и DB2), но вы можете использовать саму идею, и реализовать логику через триггеры или на уровне приложения. Эта идея в том или ином виде повторяется в большинстве "велосипедов", связанных с историей данных в реляционных базах.
    Ответ написан
    Комментировать
  • Как вести учет изменений данных в таблице mysql (оптимальное решение)?

    beardedjack
    @beardedjack
    А триггер прикрутить к таблице клиентов, пишущий в другую таблицу с ~ такой же структурой + полем с датой/временем (и идентификатор пользователя, например)...
    Ответ написан
    Комментировать
  • Как вы начинаете вёрстку сайта?

    torrie
    @torrie
    Всё знаю, всё умею
    В первую очередь делаю сброс css-стилей.
    Затем делаю вёрстку общих блоков - просто структура из div'ов с нужными ширинами, высотами согласно макету, залитых разными цветами. Стараюсь все div'ы(когда что-то в строчку) делать inline-block'ами. Получается цветная такая структура будущего сайта. Каркас готов.
    NDrl9VkCyDvemP.jpg

    Начинаю углубляться в каждый блок - располагать в нём нужные элементы. В зависимости от сложности их расположения делаю какие-то блоки position:relative, но чаще всего всё упирается просто в отступы.
    Ответ написан
    3 комментария
  • Как уменьшить потребляемую память при выполнении этого скрипта?

    @Justlexa
    Сохранять в XML, понятный Excel'ю. Сделайте всё необходимое форматирование на пробном листе Excel, сохраните им же в XML (см. перечень доступных форматов) и сохраняйте данные по такому же шаблону (принципиально важными для корректного отображения такого самодельного XML в Excel'е являются несколько заголовков и немного стилей). Если немного усовершенствовать такой вид, то там уже и до нативного для Office 2007+ формата XLSX недалеко.
    Пользуюсь таким подходом в корпоративной генерилке отчётов, претензий по совместимости не наблюдалось. На первых порах тоже использовал PHPExcel, но отказался от него уже при формировании XLS на 300-400 строк из-за резкого падения производительности.
    PS: разумеется, кириллицу всю преобразовывать в UTF-8.

    PPS: небольшой пример
    <?php
    # ....
    print("<?xml version=\"1.0\"?><?mso-application progid=\"Excel.Sheet\"?>");
    ?>
    <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
     xmlns:o="urn:schemas-microsoft-com:office:office"
     xmlns:x="urn:schemas-microsoft-com:office:excel"
     xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
     xmlns:html="http://www.w3.org/TR/REC-html40">
     <OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
      <Colors>
       <Color>
        <Index>2</Index>
        <RGB>#E8FDE8</RGB>
       </Color>
       <Color>
        <Index>3</Index>
        <RGB>#FDFDE8</RGB>
       </Color>
       <Color>
        <Index>4</Index>
        <RGB>#FDE8E8</RGB>
       </Color>
      </Colors>
     </OfficeDocumentSettings>
     <Styles>
      <Style ss:ID="s16">
       <Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
       <Font ss:Size="12" ss:Color="#000000" ss:Bold="1"/>
       <Interior/>
       <Protection/>
      </Style>
      <Style ss:ID="s17">
       <Alignment ss:Vertical="Center"/>
       <Borders>
        <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
        <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
        <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
        <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
       </Borders>
       <Font ss:Color="#000000"/>
       <Interior ss:Color="#E8FDE8" ss:Pattern="Solid"/>
       <Protection/>
      </Style>
      <Style ss:ID="s18">
       <Alignment ss:Vertical="Center"/>
       <Borders>
        <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
        <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
        <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
        <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
       </Borders>
       <Font ss:Color="#000000"/>
       <Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/>
       <Protection/>
      </Style>
      <Style ss:ID="s19">
       <Alignment ss:Vertical="Center"/>
       <Borders>
        <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
        <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
        <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
        <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
       </Borders>
       <Font ss:Color="#000000"/>
       <Interior ss:Color="#FDFDE8" ss:Pattern="Solid"/>
       <Protection/>
      </Style>
      <Style ss:ID="s20">
       <Alignment ss:Vertical="Center"/>
       <Borders>
        <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
        <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
        <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
        <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1" ss:Color="#000000"/>
       </Borders>
       <Font ss:Color="#000000"/>
       <Interior ss:Color="#FDE8E8" ss:Pattern="Solid"/>
       <Protection/>
      </Style>
     </Styles>
     <Worksheet ss:Name="Пример">
      <Table>
       <Column ss:Width="210"/>
       <Column ss:Width="64"/>
       <Column ss:Width="80"/>
       <Column ss:Width="210"/>
       <Column ss:Width="270"/>
       <Row ss:Height="15.75">
        <Cell ss:StyleID="s16"><Data ss:Type="String">Столбец 1</Data></Cell>
        <Cell ss:StyleID="s16"><Data ss:Type="String">Столбец 2</Data></Cell>
        <Cell ss:StyleID="s16"><Data ss:Type="String">Столбец 3</Data></Cell>
        <Cell ss:StyleID="s16"><Data ss:Type="String">Столбец 4</Data></Cell>
        <Cell ss:StyleID="s16"><Data ss:Type="String">Столбец 5</Data></Cell>
       </Row>
    <?
      while ($row = mysqli_fetch_assoc($res)) {
    ?>
       <Row ss:Height="15.75">
        <Cell ss:StyleID="s18"><Data ss:Type="String"><?=$row['str1']?></Data></Cell>
        <Cell ss:StyleID="s18"><Data ss:Type="String"><?=$row['str2']?></Data></Cell>
        <Cell ss:StyleID="s18"><Data ss:Type="String"><?=$row['str3']?></Data></Cell>
        <Cell ss:StyleID="s18"><Data ss:Type="String"><?=$row['str4']?></Data></Cell>
        <Cell ss:StyleID="s18"><Data ss:Type="String"><?=$row['str5']?></Data></Cell>
       </Row>
    <?
      }
    ?>
      </Table>
     </Worksheet>
    </Workbook>
    <?
    Ответ написан
    2 комментария
  • Сильно ли отличается Yii от Yii2?

    @zugo
    Yii2 еще пока особо не глядел, но по первым впечатлениям "идеология, концепция и логика разработки" не отличается. Чем отличается - использует Composer, построен на неймспейсах (нет больше нужды в глобальном сервис локаторе), есть REST, и как следствие всего этого - требует как минимум PHP 5.4.
    Через Composer можно сгенерить 2 типа boilerplate-приложения - "basic" и "advanced". Во втором сразу разделена клиентская и административная часть, и есть админка из коробки.
    Ответ написан
    Комментировать
  • Как устранить ошибку open_basedir при генерации XSL документа (использую PHPExcel)?

    Quber
    @Quber Автор вопроса
    PHP Team lead
    Решил проблему другим путём.
    В ispmanager пользователю дал права использовать PHP как CGI.
    Далее в "www домены" выбираем нужный домен, нажимаем изменить и выбираем пункт "PHP как CGI"
    Далее всё заработало.. правда в моём случае, еще необходимо было в начале скрипта вставить функцию:
    date_default_timezone_set('Asia/Vladivostok');
    Ответ написан
    Комментировать