• Что делать веб разработчику, если уже всё придумано?

    dom1n1k
    @dom1n1k
    "Всё уже придумано" - это конечно ерунда.
    Если посмотреть на мир более пристально, то оказывается, что в большинстве инструментов/приложений/систем/етц есть серьезные минусы. И почти всегда можно сделать лучше.
    Ответ написан
    Комментировать
  • Время php или как его удобней сформировать?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    $date = new DateTime();
    $date->setTimezone( new DateTimeZone('+0000'));
    $date->setTimestamp( time());
    $date->add(new DateInterval('PT2H')); // добавим 2 часа про запас – просят же больше текущей
    
    echo $date->format('c') . "\n";
    Ответ написан
    4 комментария
  • Как запустить Cron-задачу чаще минуты?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Стопудово это какая-то тупая задача вообще крона не требующая, эти "секреты" задолбали, напиши нормально - "я не могу сообразить как делать правильно %определенный_функционал%, пришла идея делать неправильно, как сделать правильно?". Нет же, все пишут - "мои лыжи не едут по асфальту, подскажите как приделать к ним колесики и ракетный двигатель, для чего не скажу, это ВеликаяТайна".
    Ответ написан
    Комментировать
  • Как реализовать свою (желательно чистый js) или готовое решение?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Первоначальный вариант ответа с contentEditable
    Надо использовать div с contentEditable="true" и фоном, который даст подчёркивание.

    Фиддл.

    <div class="textfield" contentEditable="true">напиши-ка!
    </div>

    .textfield {
    	font-size:16px;
    	color:white;
    	min-height:16px;
    	line-height:20px;
    	width:200px;
    	border:1px solid #999;
    	background:  url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACtJREFUeNpiNDY2ZiAXMDFQAEY1j2oe1TyoNLNoOu0nX/P1fY4D42yAAAMA7aYDxR1GwC8AAAAASUVORK5CYII=')
    }
    body {background:#333; font-family:Arial, sans-serif}

    Upd. лушче всё-таки в данной задаче использовать TEXTAREA, т.к. это решает проблему paste'а HTML-разметки с форматированием, рушащим высоту строки. Брать при каждом изменении свойство scrollHeight и под него подгонять шагами высоту textarea. Fiddle
    <textarea rows="1" cols="20" id="ta1" class="textfield">напиши-ка!
    </textarea>

    var ta1 = document.getElementById('ta1');
    ta1.addEventListener('input', function(){
    	var rows = Math.ceil( ta1.scrollHeight / 20 ) - 1;
    	ta1.style.height = 20 * rows + 'px';
    });
    Ответ написан
  • Как ускорить обработку запроса к бд?

    @MadridianFox
    Web-программист, многостаночник
    Что касается производительности, то вы столкнулись с проблемой N+1 запроса.
    Это когда вам надо получить список записей и для каждой из них вы делаете дополнительный запрос к БД. 900 записей? Ок, будет первый запрос + ещё 900, по одному на каждую запись.
    Быстрее может быть выполнить всего два запроса. Первый берёт записи, а второй берёт все дополнительные данные сразу для всех записей и потом уже на стороне php вы в цикле засовываете данные в каждую запись.
    Вот абстрактный пример:
    $shops = query("Select * from shop where city='Moscow'");
    $shops = indexBy("id",$shops);
    $employes = query("Select * from employe join shop on(shop.id = employe.id_shop) where shop.city='Moscow'");
    foreach($employes as $eml){
        $shops[$emp["id_shop"]]["employes"][] = $emp;
    }
    Ответ написан
    1 комментарий
  • Установка старой версии PHP (5.4) на Debian 9?

    nazarpc
    @nazarpc
    Open Source enthusiast
    Используйте Docker и запускайте старую версию PHP в контейнере.
    Ответ написан
    Комментировать
  • Как написать файловую систему на ассемблере для своей ОС 16 bit?

    Moskus
    @Moskus
    Practical File System Design,
    Dominic Giampaolo, Be Inc.
    Ответ написан
    Комментировать
  • Какую книгу по php можно взять для изучения, актуальную на сегодняшний день?

    riot26
    @riot26
    <:З )~~
    да и тем более вроде как все говорят что это простой копипаст офф доки и википедии

    Не стоит искать технической литературе уникальных сюжетов. Подозреваю что речь о "PHP7 в подлиннике" Котерова и Симдянова. Если нет ­- можно ознакомиться. Выпуск книг никогда толком не успевал за развитием технологий.
    Ответ написан
  • Для чего нужен Docker?

    @viiy
    Linux сисадмин \ DevOps
    Представьте что нет никакой ложки докера.

    1) Есть одна физическая машина. Вы устанвливаете софт, разные приложухи, базы, web сервера, заходят тестовые юзеры, что-то запускают. Первая проблема - вы не понимаете кому что надо, кто владелец файлов, приложух, зачем висят демоны и кто за это ответственнен. Как выход, вы решаете это разделить на виртуалки.

    2) У вас есть физическая машина + на ней виртуалки. Вы выделяете под каждую задачу свою виртуалку, там сидят отдельные пользователи, вы навели какой то порядок. Появляется задача - пользователи хотят php 6, а его нет, хотят python3, а его нет, хотят Mongo, а она старой версии. Вы обновляете репозитарии, качаете новые пакеты, ставите, часть пользователей довольны, часть нет - им нужна старая версия какая была. Упс!

    3) Одна физическая машина + еще больше виртуальных машин. Вы разделили всех пользователей так, чтобы никто не дрался за версии софта, если нужен php6 - иди на эту машину, нужен php5 - вот на эту. Все счастливы, но появляются разработчики, которые говорят буквально так - "а у меня на рабочей машине все работает, я перенес все как было на виртуалку, а у меня появляется ошибка missing library libXXX.so.X". И вы понимаете что вам остается только создать полную копию машины разработчика, чтобы софт поехал на этой виртуалке без ошибок... И тут появляется Docker! :)

    4) Docker решает именно эту проблему. Вам не нужно заботится о софте который установлен на сервере/виртуалке. Вы просто берете и переносите софт со всеми "кишками" на другой сервер и он просто работает. Работает за счет того, что все "кишки" это слои файловой системы нанизанные как бисер друг на друга. Дополнительно решается проблема свободного места, т.к слои многократно переиспользуются контейнерами, если вам нужен php + одна библиотека, а другому php + другая библиотека, вы используете (грубо говоря) слой php, а для дополнительной библиотеки делаете отдельный слой, одновременно другой человек делает над php другой слой и вы не деретесь между собой и не видите чужих библиотек. Это грубо и скорее всего ради одной библиотеки никто новый слой не делает, делают слой пожирнее.

    Все запущенные процессы Docker помещает в изолированную среду процессов, файловой системы и сетевого стека. Есть много особенностей по работе с Docker, т.к он предполагает, что в одном контейнере вы запускаете один процесс. Если вам нужно запустить целый набор демоном, тут появляются проблемы, нужно писать шелл-скрипт, который все это поднимет в контейнере. Так же есть особенности по сети, файловой системе. Для кого то Docker спасение и решение всех проблем, но я как сисадмин от этого всего не в восторге.
    Ответ написан
    15 комментариев
  • Как сделать условие в pdo?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Пдо здесь не при чем. Он не выводит номера страниц. И соответственно никакие условия "в pdo" здесь не нужны.
    Чтобы вывести 3 точки, надо написать программу на пхп. Все что тебе нужно - это математика на уровне 4 класса средней школы.
    Ответ написан
    Комментировать
  • Как сделать версионность как на вики?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Не работал с бухгалтерскими базами, но для своей базы MySQL хранение истории изменений использую JSON. Есть отдельная таблица history с полями - table_name, table_id и history (JSON) с данными типа массив [], в который добавляются записи формата JSON, за которыми производится наблюдение. На пользовательской таблице висят триггеры на добавление, изменение, удаление. Как только в пользовательской таблице производятся изменения, то триггеры записывают изменения в таблицу history. Это позволяет отслеживать всю историю работы с записью от момента создания, до удаления не вставляя код во всякие процедуры или бизнеслогику, а работая абстрактно только средствами базы.
    Ответ написан
    4 комментария
  • Создание вероятности на php. Можете помочь?

    GeneMoss
    @GeneMoss
    void
    /**
     * Случайная выборка с учетом веса каждого элемента.
     * @param array $data Массив, в котором ищется случайный элемент
     * @param string $column Параметр массива, содержащий «вес» вероятности
     * @return int Индекс найденного элемента в массиве $data 
     */
    function getRandomIndex($data, $column = 'ver') {
      $rand = mt_rand(1, array_sum(array_column($data, $column)));
      $cur = $prev = 0;
      for ($i = 0, $count = count($data); $i < $count; ++$i) {
        $prev += $i != 0 ? $data[$i-1][$column] : 0;
        $cur += $data[$i][$column];
        if ($rand > $prev && $rand <= $cur) {
          return $i;
        }
      }
      return -1;
    }
    
    // Использование
    $games = [
    	['name' => 'Игра 1', 'ver' => 2], // вероятность 2/15
    	['name' => 'Игра 2', 'ver' => 0], // вероятность 0/15
    	['name' => 'Игра 3', 'ver' => 1], // вероятность 1/15
    	['name' => 'Игра 4', 'ver' => 4], // вероятность 4/15
    	['name' => 'Игра 5', 'ver' => 8], // вероятность 8/15
    ];
    $i = getRandomIndex($games);
    echo $games[$i]['name'];

    В параметре массива «ver» задается вероятность выпадения данного элемента таким образом, что вероятность выпадения каждого элемента равна ver/sum, где sum — сумма вероятностей в данном массиве (в примере это: 2 + 0 + 1 + 4 + 8 = 15).

    После миллиона испытаний получено следующее количество выпадений:
    • Игра 1 = 13.3958%
    • Игра 2 = 0%
    • Игра 3 = 6.671%
    • Игра 4 = 26.6124%
    • Игра 5 = 53.3208%

    Что до сотой доли процента совпадает с заданной вероятностью в параметре «ver».

    P. S. Суть алгоритма — имитация случайной выборки из массива, который заполнен элементами, которые дублируются с заданной частотой.
    Ответ написан
    Комментировать
  • Не перебор ли для тестового задания?

    maxxannik
    @maxxannik
    Сайты на WordPress + Интернет магазины WooCommerce
    Норм для джуниора. Поверьте мидлу или сеньору это сделать можно за час-два :)
    Тут по сути задача на умение гуглить и читать доки. Ничего сложного.
    Ответ написан
    1 комментарий
  • Почему возникает ошибка в синтаксисе?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    $a=4;
    $b=10;
    $z= $a*$b;
    
    if ($a && $b > -1) { 
        echo $a-$b;
    }
    elseif ($a && $b < 0) {
        echo $a * $b;
    }    
    elseif ($z < -1) {
        echo $a+$b;
    }

    20170726-054354.png
    Ответ написан
    Комментировать
  • Стоит и какие наработки выкладывать на github для будущего портфолио?

    @backender_ru
    https://backender.ru/
    Любой код, который не стыдно показать. В котором нет говнокода. Ну это смотря чем вы специализируетесь. А на чем кстати? К примеру, могли бы написать свой сайт и будущему работодателю показывать его исходник.
    Ответ написан
    2 комментария
  • Стоит и какие наработки выкладывать на github для будущего портфолио?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    1. Стоит выкладывать свои классы (PHP) и библиотеки (JS).
    2. Стоит выкладывать нетривиальный и востребованный функционал.
    3. Целый проект чего-либо - лучше не выкладывать: мало кто поверит, что Вы делали его в одиночку и это достаточно трудоёмкая задача.
    4. Стоит в коде показать ваши знания и умения по владению структурой кода, алгоритмами, работой с текстом или бинарными данными, рекурсией и т.д.
    5. Лучше всего - взять отсутствующую реализацию востребованного алгоритма с википедии на том языке, на котором планируете показать свои навыки и реализовать (предварительно поискав на гитхабе и в гугл, и убедившись в отсутствии его реализации или недостаточном качестве).
    6. Можете ДАЖЕ ОДНУ функцию сделать, но чтобы она была востребована и делала свою работу лучше (качественнее и быстрее) существующих аналогов и привести таблицу сравнения по скорости исполнения вашего и других аналогичных решений.
    7. Задача портфолио на гите - не только показать качество кода и знания языка программирования (и различных подходов), но и способность мыслить не стандартно с максимально возможным результатом на выходе.
    Ответ написан
    2 комментария
  • Почему MySQL находит точку внутри полигона, хотя она находится не в нем?

    @glebn Автор вопроса
    Золото, а не человек!
    Всем спасибо! Нашел решение. Это ST_Within (с версии mysql 5.6) Обращаю внимание что для ее правильной работы нужно поменять местами переменные из примера в моем вопросе т.е
    select if(ST_Within(@p, @r), 'yes', 'no') as contain;
    Ответ написан
    5 комментариев
  • Как поиграться со скроллингом?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Можно без JS, только-CSS: слой приблизить по оси Z и уменьшить  – для «ускорения» прокрутки; и наоборот, отдалить и увеличить (чтобы он воспринимался таким же по размеру) – для «замедления». Демо.

    CSS:
    .forefront-element {
        -webkit-transform: translateZ(999px) scale(.7);
        transform: translateZ(999px) scale(.7);
        z-index: 1;
      }
    
      .base-element {
        -webkit-transform: translateZ(0);
        transform: translateZ(0);
        z-index: 4;
      }
    
      .background-element {
        -webkit-transform: translateZ(-999px) scale(2);
        transform: translateZ(-999px) scale(2);
        z-index: 3;
      }


    via.
    Ответ написан
    7 комментариев
  • Почему погружаемый JavaScript на локальной машине работает, а при загрузке на сервер не хочет?

    Вот тут видно, что XHR sortable-table.js загрузился до события load (красная линия), а значит в момент события он выполняется. При этом сам динамический контент (таблица, синий блок profiles_rank/) еще только загружается, а значит его пока нет в DOM.
    70556ab2962046829cb932305890a6ae.png

    Иногда работает, когда контент появляется раньше, чем срабатывает инициализация библиотеки сортировки. Подгружать скрипт сортировки асинхронно не нужно, он уже в себе ждет когда страница и все ресурсы загрузятся полностью. Но если он начнет выполняться (инициализация LightTableSorter.init()), пока в DOM еще не погрузилась таблица (точнее заголовки), то вот тут будет пусто, и никакие клики не забиндятся
    var ths = document.getElementsByTagName('th');
    Arr.forEach.call(ths, function (th) {th.onclick = onClickEvent;});

    Вам надо провести "ручную" инициализацию после подгрузки таблицы. К сожалению, эта библиотека написана так, что вы не сможете вызывать код в Immediately-Invoked Function Expression (function (document) {})(document); без модификации библиотеки

    Удалите этот код:
    document.addEventListener('readystatechange', function(){
    if (document.readyState === 'complete') LightTableSorter.init();
    }, false);
    а вместо него добавьте этот:
    window.LightTableSorter = LightTableSorter;

    Теперь вы можете после загрузки данных через load выполнить инициализацию. В момент вызова callback function таблица уже должна быть вставлена. Только оберните в jquery.ready
    $(function() {
        $('#to_load').load('/stat/rating/profiles_rank/ #for_including1', function () {
            window.LightTableSorter.init();
        });
    });
    Ответ написан
    2 комментария
  • PHP foreach: почему валится с ошибкой?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Пытался наиболее подробно все изложить и разжевать:

    /* @var string Исходный текст в синтаксисе HEREDOC */
    $process = <<<TEXT
    Lorem ipsum
    Lorem ipsum
    Lorem ipsum
    TEXT;
    
    /**
     * Оборачивает элемент в тег <span>
     * @param type $element 
     * @return type
     */
    function spanElement( $element )
    {
    	return "<span>{$element}</span>";
    }
    
    // Получаем построчно исходный текст
    // примечание: если есть средство работающее без регулярок, то лучше использовать его
    $arProcess = explode("\n", $process);
    
    // Применяем к каждому элементу нашу функцию, модицифируя ее значения
    // см: http://php.net/array-map
    $arProcess = array_map('spanElement', $arProcess);
    
    /*
    При вызове var_dump на $arProcess результат будет следующим:
    
    array(3) {
      [0] =>
      string(24) "<span>Lorem ipsum</span>"
      [1] =>
      string(24) "<span>Lorem ipsum</span>"
      [2] =>
      string(24) "<span>Lorem ipsum</span>"
    }
    */
    
    // Вновь объединяем это все в исходный текст
    $process = implode("\n", $arProcess);
    
    /*
    При вызове var_dump на $process результат будет следующим:
    
    string(74) "<span>Lorem ipsum</span>
    <span>Lorem ipsum</span>
    <span>Lorem ipsum</span>"
    
    */


    Для усвоения работы foreach, рекомендую ознакомиться с документацией: php.net/manual/ru/control-structures.foreach.php
    Ответ написан
    Комментировать