Ответы пользователя по тегу PHP
  • Можно ли считать это задание "тестовым"?

    viktorvsk
    @viktorvsk
    А где, вы думаете, такой проект может быть использован?

    UPD: Ладно, перефразирую. Какому заказчику для каких целей может понадобиться такой проект?

    Для чего в тестовом задании на джуниора - алгоритмы, мне понятно сложно. Да нафига мне нужно, что б вы умели какие-то алгоритмы решать, если вы будете пилить свой велосипед 3 недели, вместо того, что б взять готовое решение, за полчаса осилить докуменатацию и за 2 часа применить ?
    Реалистичность и схожесть с ТЗ для тестового задания - это плюс.

    С другой стороны, тестовые задания вообще - это спорный вопрос, хорошая ли практика. Так же, работодатели часто к этому относятся абы-как и встретить можно разное. Тут уже будет вопрос, действительно, в том, стоит ли оно того - если предлагают после этого задания испытательный срок и 100 баксов в месяц - врядли. А если нормальных джуниорских 400-500 баксов - то ничего такого тут нет
    Ответ написан
    2 комментария
  • Как красиво вывести JSON?

    viktorvsk
    @viktorvsk
    $json_string = json_encode($data, JSON_PRETTY_PRINT);

    Источник
    Мануал
    Ответ написан
    Комментировать
  • Как перенести строку в XML документе?

    viktorvsk
    @viktorvsk
    Или регулярками добавлять перевод строки (если данные ограничены). Либо использовать XSLT
    Ответ написан
  • Как отправить HTML письмо не программисту?

    viktorvsk
    @viktorvsk
    MailChimp и аналоги. Собственно, ищите по "Сервис для отправки email"
    Ответ написан
  • Как сохранить отступы при замене текста?

    viktorvsk
    @viktorvsk
    Хм, а что вы ожидаете?
    У вас {{ inlucde='file' }} имеет отступ в один таб. Его и получайте в результате (который вас не устраивает) перед первым h1.
    h1 и latest_news наравне, потому что h1 получил отступ от первоначального шаблон. а latest_news - видимо, в файле тоже имеет 1 таб отступа.
    И, в завершении, закрывающийся h1 не имеет отступа, как в файле откуда он взят, так и в файле куда он вставлен.

    Вывод: все вставляется так, как и должно.

    Вы хотите, что б вставляемый файл учитывал отступы родителя? Плюс, наверное, хочется, что б была произвольная вложенность ?

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

    viktorvsk
    @viktorvsk
    Сделал инструмент на Ruby для парсинга произвольного количества источников используя формат JSON + немного псевдо-DSL - обертку над DOM-парсером (css/xpath селекторы + фильтры). В качестве бонуса - веб-админ, более-менее простое масштабирование, кое-какой Планировщик. Все очень сыро, но, надеюсь, будет активно разрабатываться. В какой-то мере, реально используется уже сейчас.

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

    Судя по Вашему вопросу, Вам для реализации описанного нужен будет квалифицированный исполнитель. Но, авось, пригодится: https://github.com/victorvsk/apify-kit
    Ответ написан
    Комментировать
  • Обязательно ли нужен html шаблон при разработке сайта?

    viktorvsk
    @viktorvsk
    Краткий ответ: что б вы не сделали, это все является html-шаблонами. Потому что в итоге все рендерится в html. Натягивать его куда-то сразу или нет, завист от поставленной задачи, целей и ресурсов. Например, если вы хотите сделать шаблон и выставить его на Envato, то нет ровно никакого смысла верстать его именно под друпал.

    Длиииииииинный ответ:
    Вам, прежде чем задавать такими глобальными философскими вопросами, сначала надо получше структурировать осознание тех самых процессов разработки.
    И для начала, например, отделять идеальное от реального.

    Как происходит в реальном мире?
    У человека есть идея
    С ней он идет к бизнес-аналитику. Тот, в свою очередь, указывает на базовые ошибки, недочеты, формирует какую-то общую картину продукта
    Потом он знакомит человека-заказчика с архитектором. На своем языке аналитик объясняет архитектору задачу. Архитектор решает, какой стек технологий лучше всего применить в данном случае.
    Далее архитектор идет к проектному менеджеру и ставить уже конкретные задачи.
    Менеджер распределяет и доводит задачи до разработчиков и идет на поиски дизайнеров и юзабилистов, которые решают, зачастую уже с заказчиком, как будет выглядеть интерфейс.
    После чего результат работы дизайнеров и юзабилистов передается верстальщикам, что бы он мог воплотить их реализацию в машинное представление.
    После этого верстальщик отдает html в руки front-end разработчика, который в простейшем случае подключает плагины jquery, в сложном - делает SPA.
    Ну, а дальше, по крайней мере сегодня, завист от того, толтый клиент или тонкий. Если сделана SPA, то господа backend'erы могут ограничиться документацией API. А если рендер идет в основном на сервере - то будут "натягивать" результат работы фронтендера на свой движок.
    А после этого в игру может вступить (а может и раньше, для поднятия тестового\стейджинг окружения) - администратор для деплоя на серверы. Или даже группа оных, модно именуемых сегодня - DevOps

    К чему так много писанины? К тому, что б понять, как примерно выглядит идеальный процесс. Конечно, все описано очень абстрактно, какие-то з венья могут дублироваться, могут дробиться на более узкоспециализирвоанные и т.д., но в общем случае часто выглядеть должно как-то так. Хорошо о процессе расписано у Ф. Брукса (например, Мифический человекомесяц).

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

    Мораль: спрашивается, если это все может сделать 1 человек, то зачем городить целый хор разных чуваков, называть их модными словечками и настолько сильно обкрадывать карман заказчика?
    Все дело в том, какие цели и ресурсы. И когда за "серьезность" решения хочется заплатить - вначале, или уже в хайлоад-продакшене (уже много модных словечек употребили).
    И на самом деле, на перспективных проектах, получается так, что цена ошибки с каждой "роли" по нисходящей - увеличивается. Например, если вы выловили ошибку на уровне общения с бизнес-аналитиком - это дешевле, чем выловить ее в процессе продумывания архитектором решения. А поймать ошибку при отрисовке дизайна - дешевле, чем во время натягивании очередной фичи бекендерами.

    Вывод: всегда исходить из задачи, целей и ресурсов. Знание html нужно в любом случае, backender вы или frontender. А сверстанный голый статический html имеет гораздо более высокий показатель переиспользования, чем шаблон друпала.
    Ответ написан
    Комментировать
  • Где хранить данные, которые меняются раз в 3-6 месяцев?

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

    viktorvsk
    @viktorvsk
    Как раз занимаюсь этой проблемой.
    Скачать сейчас можно только https://github.com/victorvsk/apify-core
    Но уже есть сервер, клиент (админка), и готовится рецепт ansible/chief/puppet, где, в принципе, нужен будет только vps, и синтаксис типа:
    {
      "index": {
        "url": ["https://github.com/blog"],
        "js": false,
        "paginate": [
          "\\/?+$",
          "/?page=<% 1,2,1 %>"
        ]
      },
      "posts": {
        "from": "select('h2.blog-post-title a') from('index')",
        "js": false,
        "host": "http://github.com",
        "pattern": {
          "title": "<% .blog-title %>",
          "meta": {
            "calendar": "<% .blog-post-meta li:first %>",
            "author": "<% .blog-post-meta .vcard %>",
            "category": "<% .blog-post-meta li:last %>"
          },
          "body": "<% .blog-post-body %>"
        }
      }
    }

    (Этот "код" скачивает все посты с первых двух страниц гитхаба https://github.com/blog)
    Код на руби, но задумывается как standalone демон, так что можете или поучаствовать или подождать готового решения.
    Самая большая сложность, в ближайшее время, наверное, в нормальной документации.

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

    UPDATE: Выложил кривоватый кусок на хероку
    Если интересно, можете поэкспериментировать. Конечно, без документации тяжело, но, возможно, что то получится, используя примеры:
    Например, json указанный выше, можно отправить на адрес:
    https://agile-river-6704.herokuapp.com/crawler?apify_secret=secret

    POST запросом, Content-type: application/json
    А для проверки непосредственно синтаксиса, можно передавать не ссылки, а html. Например, вот такой json:
    {
    "html": "<html><head></head><body><div id='text'>Текст</div></body></html>",
    "pattern": { "title": "Значение", "title-2": "Это: <% #text %> <% html |first |html %>", "text-html": "<% #text | first | html %>" }
    }

    POST запросом на https://agile-river-6704.herokuapp.com/parser?apif...
    Важно указать в адресе ?apify_secret=secret

    Это, конечно, совсем черновой вариант, и хероку обрывает запросы более 30 секунд... Но может кто-то заинтересуется.
    Ответ написан
    5 комментариев
  • Система бана на MySql, будет ли это работать?

    viktorvsk
    @viktorvsk
    Конечно. В тех местах, где нужна авторизация, при условии, что авторизация "обеспечивает защиту".
    Ответ написан
    Комментировать
  • Как реализовать логику работы с БД для нестандартного решения?

    viktorvsk
    @viktorvsk
    Где нестандартность то и зачем делать кеш джсона?
    Ну есть "статья". Ну есть у нее статус "в черновиках". Ну да, по нажатию "сабмит" у нее обновляется последнее время доступа. Действительно, мобильный девайс при сравнении имеющейся инфы не смотрит на ту, где время совпадает с уже загруженным.

    Зачем локалсторадж? У вас мобильное приложение без базы? Тогда, если уж так критично по производительности, просто кешируйте ответы на сервере и обновляйте кеш при нажатии "кнопки сабмит".

    В общем, ничего нестандартного, вариантов ответов масса. Конкретной информации - ноль: зачем джсон, что за файлы в контенте, что и для чего нужно искать, как часто происходит чтение\обновление данных, собственно, какие стеки технологий и т.д.
    Ответ написан
    1 комментарий
  • Как сделать редактор правил дорожного движения?

    viktorvsk
    @viktorvsk
    Ответа все еще нет. Возвращайтесь снова через полгода.
    Ответ написан
    Комментировать
  • Как быстро искать по базе, ФИО?

    viktorvsk
    @viktorvsk
    Как быть с вариантами 6 и 11, в перворм приближении, хз.
    В остальных случаях, если интересует "хотя бы частичное совпадение", я бы предложил перевести все в нижний регистр, представить, что у вас есть "3 элемента (составляющих)". Один из них - фамилия. Другие - имя и отчество (неважно, какой порядок, инициалы или полное и т.д.). А далее - сравнивать с заранее подготовленной базой фамилий. Думаю, для русскоязычного населения, для 80% случаев, этот список все же будет не сильно большим.

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

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

    viktorvsk
    @viktorvsk
    Ситуация такова что когда накопится количество групп и лет, то вывод из таблицы будет тормозить.

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

    viktorvsk
    @viktorvsk
    Где здесь?
    Какую ошибку?
    Вам сюда, наверное.
    Ответ написан
    Комментировать