• Какая идеальная страна для айтишника?

    aRegius
    @aRegius
    Python Enthusiast
    Я бы ориентировался на отчеты проекта Всемирного банка Doing Business - 2017 год
    стр.15 - Общая сводная таблица ("Ease of doing business ranking")
    стр.196 - По странам в алфавитном порядке, краткие таблицы по всем показателям ("Country Tables")
    Ответ написан
    3 комментария
  • Вывести количество подписчиков страницы ВК?

    webinar
    @webinar
    Учим yii: https://youtu.be/-WRMlGHLgRg
    $('#vkontakte_counte').html(e.response.count)
    Ответ написан
    Комментировать
  • Как с нуля построить MVC движок?

    mashletov
    @mashletov
    Math.random()
    1. Если возникают подобные вопросы, значит ещё не дорос.
    2. Нужно использовать фреймворки, а не городить костыли.
    Ответ написан
    1 комментарий
  • Как оптимизировать видео, вставляемое в качестве фона?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Уменьшите битрейт и разрешение видео.
    Переместите метаданные в начало mp4 контейнера
    Установите preload="metadata"
    htmlbook.ru/html/video/preload

    Чтобы пиксели в глаза не бросались наложите на видео сеточку из маленьких черных точек
    https://jsfiddle.net/soumyabg/wefLyrhp/
    css background dotted overlay
    Ответ написан
    5 комментариев
  • База данных городов, стран и регионов без дубликатов на английском?

    sokolnikov
    @sokolnikov
    https://github.com/x88/i18nGeoNamesDB

    Содержит

    234 страны
    3 721 регион
    2 246 813 населенных пункта

    Названия переведены на

    Русский, Украинский, Белорусский, Английский, Испанский, Португальский, Немецкий, Французский, Итальянский, Польский, Японский, Литовский, Латышский, Чешский

    Кодировка - utf8
    Ответ написан
    1 комментарий
  • Как решать проблему недостаточного менеджмента в небольшой команде веб-разработчиков?

    Руководитель правильно думает. Должно быть такая схема: продажник -> менеджер проектов -> разработчики.

    Продажник ищет и ведет клиентов, все хотелки клиента оговаривает менеджеру, тот в свою очередь планирует весь проект (вместе с вами, либо сам), описывает все задачи вам, отслеживает вашу работу и тд. Вы в свою очередь делаете ровно то, что вам сказано, все это фиксируется (в трелло каком-нибудь). Каждый занят своим делом. Конечно, где-то вы можете пересекаться, но по-нормальному - должно быть именно так.
    Ответ написан
    Комментировать
  • Фото по хэштегу из Инстаграм и фэйсбук?

    Вот так -
    https://www.instagram.com/explore/tags/%TAG%/?__a=1

    Ключевое это ?__a=1

    Для этого есть класс - https://github.com/smochin/instagram-php-crawler
    Ответ написан
    4 комментария
  • Почему многие современные сайты верстают на флексах?

    Wolfnsex
    @Wolfnsex Куратор тега CSS
    Если не хочешь быть первым - не вставай в очередь!
    очень часто вижу такое мнение что построение сеток на основе "float" или "inline-block" лучше, потому что флексы поддерживаются не всеми браузерами. Так ли это и почему в таком случае они так популярны?
    Это действительно так. Но я Вам больше скажу, даже CSS как таковой (или HTML-5), поддерживается не всеми браузерами (IE-1 насколько я помню, CSS не поддерживал). Но я не думаю, что это повод отказаться от CSS или HTML5. И вообще, само по себе выражение "не всеми браузерами" - довольно размытое, что-то из области "не все продукты одинаково полезны".

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

    P.S. А ещё по тому, что FLOAT'ы были придуманы изначально не для того, для чего их в последствии приспособили, впрочем как и некоторые другие параметры/свойства/атрибуты...
    Ответ написан
  • Насколько у меня правильный код ООП php?

    PravdorubMSK
    @PravdorubMSK
    $this->resultDB = $this->dbh->prepare("SELECT {$this->params} FROM `order` WHERE `id` = :orderID");
    $this->resultDB->bindParam(':orderID', $this->orderID);
    $this->resultDB->execute();
    $this->resultDB = $this->resultDB->fetch(PDO::FETCH_OBJ);
    вместо этого треша надо использовать обертки.
    есть 2 в сети:
    https://github.com/Vasiliy-Makogon/Database - моя
    phpfaq.ru/SafeMysql - чужая
    Ответ написан
    2 комментария
  • Насколько у меня правильный код ООП php?

    @D3lphi
    Здесь плохо всё, к сожалению.

    Начнем с того, что вы неверно наследуете классы. Почему у вас класс, отвечающий за подключение к базе данных является родителем класса, работающим с заказами? Наследование применяется, если можно сказать, что что-то является чем-то. Например, разработчик является работником; компьютер является устройством и тд. Здесь же у вас вообще близко такой логике не получится следовать. Вы должны передавать хотя бы объект для работы с бд через инъекцию, например, в конструктор. В идеале, нужно использовать паттерн репозиторий для работы с базой данных.

    Класс SearchOrder у вас не только выполняет запросы, но еще и работает с данными, хранит состояние этих самых данных, фильтрует данные (strip_tags()). Непорядок. Это все нужно разделять. У вас вообще получаются какие-то богообъекты, которые умеют во все.

    Вы каждый раз повторяете строки с подготовкой запроса, биндингом параметров, отправкой запроса и тд. Не думали, что неплохо бы было написать какую-нибудь обертку и выполнять запросы как-нибудь так:
    $result = $wrapper->select("SELECT * FROM `tablename` WHERE `id` = :id", ['id' => 5]);

    ?

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

    Зачем вы используете свойства, если можно обойтись обычными локальными переменными:
    $this->orderID = (int) strip_tags($orderID);
    $this->column = (string) strip_tags($column);
    $this->value = (string) strip_tags($value);

    ?

    Почему вы стриппите тэги у идентификатора? вы настолько не уверены в том, что влетает в функцию:
    strip_tags($orderID);
    ?

    Если вы не используете php 7 и, как следствие, скалярный тайпхинтинг, то должны делать проверки на тип входящего аргумента. Если что-то не так с типом, бросаем исключение (А не приводим его к нужному)! Например:
    if (!is_string($arg)) {
        throw new InvalidArgumentTypeException('string', $arg);
    }

    Это в идеале. Вы не обязаны это делать, конечно же. Но вот такие проверки делают приложение безопаснее. Хотя, опять же, повторюсь, в 2017 нужно начинать новые проекты на php 7.1+.

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

    Кроме всего прочего, почитайте про стандарты оформления кода. Вы им не следуете.

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

    Желаю успехов!
    Ответ написан
    1 комментарий
  • Оптимизация загрузки видимого контента в PageSpeed?

    VasyaPertrov
    @VasyaPertrov
    Изготовление и безопастность сайтов. WP и др.
    Забей на этот никчёмный фейк гугла.
    Делай правильно, а не как он "советует".
    Используй нормальные сервисы для определения скорости и выявления проблем: tools.pingdom.com/fpt https://gtmetrix.com/ и тп.
    Для мобил - quirktools.com/screenfly и куча др.
    Ответ написан
    5 комментариев
  • Какой программой импортировать большую БД?

    latteo
    @latteo
    Navicat Очень хорошая программа для работы с БД и дампа/синхронизации небольших баз.
    А вот пару гигабайт у меня ни разу не потянула. Вываливается с ошибками разной степени тяжести и приходится всё заново начинать. Хотя в v11+ такое заметно реже чем на 8 и 9 версиях.

    Sypex Dumper, phpmyadmin и прочие php-скрипты - не смотря на их описание несколько гигов не тянут. Дампят часть базы.

    HeidiSQL и прочие раскрученные Open source не потянули даже несколько сотен метров дампа - зависают или падают

    mysqldump - единственный адекватный, который быстрее всех и без ошибок перемолол огромный дамп на несколько гигов
    Ответ написан
    1 комментарий
  • Какая best practice защиты от записи в файл в несколько потоков?

    latteo
    @latteo
    Записать в файл с уникальным именем потом собирать в один.
    Я microtime(true) при запуске скрипта запоминаю и формирую из него имя файла. Есть нативная uniqid(). При записи проверка, что файл не существует, пересечения на 100 потоков бывают очень редко. Но у вас может быть и иначе, в зависимости от времени работы каждого потока и их количества.
    По сути это медленный аналог очереди в памяти, но зато могу быть уверенным, что на диске информация точно осталась.
    Ответ написан
    Комментировать
  • Откуда geo-ip SaaS берут свои данные?

    latteo
    @latteo
    2) Провайдер укртелеком - по IP адресу можно точно определить только то, что это Украина. Один и тот же IP может быть выдан хоть Киеву, хоть Одессе (разница 500км) и такая смена происходит после вкл/выкл модема, грубо говоря раз в сутки.

    При этом HTML5 Geolocation очень часто показывает с точностью до дома, если нужна точность лучше пользуйтесь последним.

    PS: подменить можно оба.
    Ответ написан
    Комментировать
  • Куда можно выставить на продажу скрипт PHP сайта?

    latteo
    @latteo
    Есть максимум 2 десятка посещаемых ру форумов для вебмастеров, разместив объявления на которых вы получите огромную аудиторию потенциальных заказчиков. И, довольно часто, еще и адекватную критику.
    Ответ написан
    Комментировать
  • Как перенаправлять весь трафик на домен и получать ответ?

    latteo
    @latteo
    Тех. подробности давай там вариантов море:
    1) фильтр по домену - регаешь домен и вешаешь на него анонимайзер. А может и поднятие прокси проканает, смотря как настроено.
    2) фильтр по ip + хостинг от провайдера - то же самое решение.
    3) внутренний сервис провайдера. Самое простое это mail. Раньше можно было найти скрипты сайт2mail, которые выкачивают url и отправляют по мылу. Чисто теоретически такое же можно замутить на систему внутренних сообщений или чата.
    4) еще есть способ через dns проксировать, получая ответы в NS записях

    Все они рабочие и медленные, последние два очень медленные.
    Ответ написан
    3 комментария
  • Подготовленные запросы в yii2?

    latteo
    @latteo
    Попробуйте вот так:
    $where = ''; 
    if(!empty($filter_time)) $where =" and date_created > now()-Interval :filter_time minute ";
    if(!empty($filter_category))
    $where.= "and path LIKE ':filter_category%' "; 
    
    $sql = Yii::$app->db->createCommand("SELECT COUNT(*) FROM Pages
    JOIN categories ON categories = id_categories WHERE status = 1 $where")
      ->bindValue(':filter_time', $filter_time)
      ->bindValue(':filter_category', $filter_category)
      ->queryScalar();
    Ответ написан
    2 комментария
  • Почему вместо +1 добавляет +2?

    latteo
    @latteo
    Не нашел у вас unit-тестов, возможно всё дело в этом ;)

    После выполнения такого кода

    А как выполняете?
    Через браузер? Да еще и на главной? Тогда есть частая ошибка с favicon, которого нет и вместо которого второй раз грузится главная, наращивая счётчики.
    Попробуйте через консоль или рядом лежащим файлом через file_get_contents($url);
    Ответ написан
    3 комментария