Как стать автором
Поиск
Написать публикацию
Обновить
121.33

PHP *

Скриптовый язык общего назначения

Сначала показывать
Период
Уровень сложности

ПитательныйБот или как я хочу отобрать хлеб у фитнес-тренеров

Время на прочтение5 мин
Количество просмотров6K
Всем привет! Все разработчики сталкиваются однажды с желанием покодить что-нибудь для себя, и даже становится неважна материальная ценность продукта, главное, что оно работает само по себе. Кайф.  

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

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

И я решила: а создам-ка я такую систему, которая будет автоматически высчитывать людям продукты в граммах, в зависимости от их цели и параметров.

Так как я бэкенд разработчик, с фронтом сталкиваюсь редко, обдумала и решила сделать бота. На выбор мессенджера повлияли несколько факторов: востребованность и наличие платежных систем. Подошла социальная сеть Вконтакте.

Для расчетов я использовала формулу Харриса- Бенедикта. В учет брала такие входные параметры ( которые пользователь бота вводит):

  • Вес
  • Рост
  • Цель (похудеть/ набрать массу/ поддерживать)
  • Физическая активность (вся информация доступная и стандартная для расчетов по формуле Харриса-Бенедикта)
  • Переносимость лактозы
  • Пол

Создала базу продуктов, в которой у продукта были поля: Белки, Жиры, Углеводы, Ккал, ГИ (гликемический индекс), а также содержание лактозы. Вообще, хочу привести листинг и по ходу комментировать.

У Вконтакте доступный и понятный API

Использовала язык PHP.
Читать дальше →

Принципы разработки современных приложений от NGINX. Часть 1

Время на прочтение9 мин
Количество просмотров7K
Привет, друзья. В преддверии запуска курса «Backend разработчик на PHP», традиционно делимся с вами переводом полезного материала.

Программное обеспечение решает все больше и больше повседневных задач, при этом становясь все сложнее и сложнее. Как однажды сказал Марк Андрессен, оно поглощает мир.



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

Пишем меньше дублирующего кода, используя биндинг в Laravel

Время на прочтение6 мин
Количество просмотров9.2K
image

Доброго времени, уважаемые господа.

Не так давно столкнулся с явлением дублирующегося и повторяющегося кода при код ревью одного проекта на Laravel.

Суть в следующем: у системы существует некоторая структура внутреннего API для AJAX запросов, по сути возвращающая коллекцию чего-либо из базы (заказы, пользователи, квоты, etc...). Вся суть данной структуры — вернуть JSON с результатами, не более. При код-ревью я насчитал 5 или 6 классов, использующие один и тот же код, разница была лишь в инжекте зависимостей ResourceCollection, JsonResource и непосредственно модели. Такой подход мне показался в корне неверным, и я решил внести свои, как я считаю, правильные изменения в данный код, воспользовавшись мощным DI, который предоставляет нам Laravel Framework.
Читать дальше →

Приватные классы. Сокрытие в php

Время на прочтение3 мин
Количество просмотров8.8K

В php как и в большинстве других ООП языков существуют модификаторы видимости. Это ключевые слова public, protected и private. Но они применимы исключительно к свойствам, методам или константам. Данные модификаторы тесно связаны с возможностью инкапсуляции данных. Стоит заметить, что в таких языках как java, C#, go (https://golang.org/doc/go1.4#internalpackages), ruby (https://habr.com/post/419969/), crystal (https://crystal-lang.org/reference/syntax_and_semantics/visibility.html) есть возможность ограничивать область видимость пакетов (packages) или классов\типов. В php нет возможности ограничивать область видимости для классов — любой подключенный класс доступен из любого другого класса. Однако можно эмулировать данную возможность с применением нескольких трюков.

Читать дальше →

MVC + Scenario против Толстых Контроллеров

Время на прочтение8 мин
Количество просмотров8.4K

MVC + Scenario Против Толстых Контроллеров


Современные PHP фреймворки (Symphony, Laravel, далее везде) убедительно показывают, что реализовать паттерн Model-View-Controller не так уж просто. Все реализации почему-то склонны к Толстым Контроллерам (fat controllers), осуждаемыми всеми, и разработчиками, и самими фреймворками.


Почему все так? И можно ли с этим как-то справиться? Давайте разбираться.

Читать дальше →

Локальный веб-сервер под Linux, с автоматическим поднятием хостов и переключением версий PHP

Время на прочтение4 мин
Количество просмотров49K
Скорее всего какие-то части этой статьи уже знакомы многим хаброжителям, но в связи с покупкой нового рабочего ноутбука я решил собрать все крупинки воедино и организовать удобное средство для разработки. Мне часто приходится работать со множеством маленьких проектов, с разными версиями PHP, часто переводить старые проекты на новые версии. В далёком прошлом, когда я был пользователем Windows то использовал OpenServer. Но с переходом на Linux мне нехватало той простоты создания хостов и переключений версий которые были в нём. Поэтому пришлось сделать еще более удобное решение на Linux =)

Цели


  1. Использовать текущий на момент написания статьи софт
  2. Чтоб разграничить локальные домены, будем использовать специальный домен .loc
  3. Переключения версий PHP реализуем через поддомен c помощью fast-cgi
  4. Автоматическое создание хоста с помощью vhost_alias и dnsmasq

Что имеем в итоге. При переходе на
56.test.loc
Apache запустит c версией PHP 5.6.36
/var/www/test.loc/public_html/index.php
Поменяв поддомен на
72.test.loc
будет запущен тот же файл но уже с версией PHP 7.2.7

Другие версии доставляются аналогичным описанным ниже способом.

Для создания еще одного сайта просто создаем в /var/www/ папку имеющую окончание .loc, внутри которой должна быть папка public_html являющаяся корнем сайта

Вот собственно и все. Как без дополнительных мучений, перезапусков, и редактирований конфигов имеем автоматическую систему для работы с сайтами.
Читать дальше →

Как я генерил XML-статформу для таможни и про объединение ФТС с налоговой

Время на прочтение9 мин
Количество просмотров11K
Все началось, когда пришло оно. Загадочное письмо с Владимирской(?!) таможни. Внутри обнаружилось требование предоставить статистические данные по торговле с Беларусью и Казахстаном аж за весь прошлый год. И ссылка на указ государев, как и полагается.
«Ибо теперича ежели со странами таможенного союза торг ведешь — изволь ответ держать. Кому, куда, чего позапродал. Все без утайки пиши и особливо номер ГТД не забудь. Око государево — не глаз дремотный. Системы электронные псами железными за вами, нерадивыми, ныне следить поставлены, потому не хитри. Срок положенный помни.»



Забегали бухгалтера, засуетились манагеры. Об указе век они не слыхали, не было им такой печали. Оказалось надо было еще год назад зарегистрироваться на сайте ФТС и ежемесячно передавать данные о всех торговых операциях со странами ЕАЭС (иначе административный штраф до 50 тысяч рублей за каждую форму. См. N 510-ФЗ от 28.12.2016).
Читать дальше →

Эффективный способ загрузки большого количества точек (геометрий) на карту

Время на прочтение3 мин
Количество просмотров7.4K

Привет, Хабр.


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

Читать дальше →

Система управления складом с использованием CQRS и Event Sourcing. Постановка требований

Время на прочтение4 мин
Количество просмотров4.8K
image

В последнее время стала популярна концепция Omnichannel, когда чтобы улучшить качество обслуживания клиентов, различные каналы продаж интегрируются в один. И не важно как и где совершается продажа, для продавца имеет смысл объединить все каналы сбыта для того, чтобы выполнить заказ. На практике это означает, что неважно клиент пришел к вам оффлайн, сделал заказ на сайте, в мобильном приложении или в телефонном режиме — вы должны использовать все доступные средства для его выполнения. И для вас, как для продавца, каждый отдельный канал не должен представлять большой разницы. Презентация omni channel на примере Франкфуртского аэропорта (англ.).

Для интеграции описанной выше, со стороны продавца очень важно иметь возожность интегрировать уровни запасов товаров. Потому что инфраструктура розничной торговли может быть достаточно сложной и объединять внешние склады, магазины, магазины с возможностью заказа товаров в магазин (store pick-up), дропшиппинг (схема торговли, при которой Вы продаёте изделия фирмы-поставщика, которая сама пересылает их покупателю от Вашего имени, а Вы только принимаете от покупателя деньги).

Читать дальше →

Тайп-хинтинг по всем канонам полиморфизма в старых версиях PHP

Время на прочтение8 мин
Количество просмотров11K
tl;dr Вкратце, в данной статье я создам трейт, позволяющий даже в версиях PHP младше 5.6 (до версии 5.4) добиться от компилятора поведения, подобного любому статическому языку программирования. Причём трейт будет валидировать не только входные, но и выходные парамеры тоже. Так сказать, полное погружение в тайп-хинтинг.
Данный трейт вы сможете без проблем подключить и использовать в своих веб-приложениях.

Читать дальше →

Регистрация и авторизация пользователя на сайте — одним кликом — через кастомную кнопку Facebook. 2017

Время на прочтение4 мин
Количество просмотров42K
Итак, начал я разрабатывать один проект по фану. Основная идея проекта проста: площадка, где все могут ставить на всё что угодно, заключать пари, сделки и БЕЗ каких либо ограничений. Развлекательный проект по сути своей.

Ну и конечно стал вопрос Удобной авторизации пользователей с наименьшим «трением». Подумав немного, я выбрал авторизацию через Facebook, но думаю, на этом я не остановлюсь и вы прочтете ещё несколько статей, с авторизацией через Google Acc, VK и Tweet.

image
Итак к делу! В интернете я нашел несколько тем, которые описывают вопрос авторизации, некоторая информация мне помогла, но я не нашел ни одной, которая бы решила поставленную мной задачу, поэтому, завершив задачу я и решил написать эту статью.
Читать дальше →

Вышел драйвер PDO MSSQL(pdo_sqlsrv) для PHP7

Время на прочтение1 мин
Количество просмотров13K
image

Небольшая заметка для тех, кто по роду деятельности работает с базой MSSQL через PDO,
теперь данная возможность появилась и в PHP7

Что такое PDO и зачем стоит им пользоваться можно прочитать в этой статье:

habrahabr.ru/post/137664

Скачать драйвер можно здесь:

github.com/Azure/msphpsql/releases/tag/v4.0.2

Установка сводится лишь к копированию соответствующей *.dll в папку PHP\ext и подключением в php.ini
Это предварительная версия, но вполне рабочая, по крайней мере проблем за 2 дня использования замечено не было,
работает отлично!

Symfony: обработка запросов в API

Время на прочтение2 мин
Количество просмотров11K
image

Я думаю, для многих не секрет, что компонент Form плохо подходит для работы в API,
каждый изобретает свой велосипед на замену, одним из таких велосипедов я решил поделиться. На звание “лучшего решения” я не претендую, но если мое решение кому-нибудь окажется полезно, либо я получу новые знания – будет очень здорово.
Читать дальше →

Ближайшие события

На каком фреймворке вы будете писать PHP приложение в 2016 году?

Время на прочтение1 мин
Количество просмотров33K
С пятницей коллеги!
Заинтересовал меня намедни такой вопрос: какой PHP фреймворк вы выберете для создания среднего или крупного проекта (корпоративный портал, магазин и т.п.) в 2016 году?
Уточню, что это не холивар, какой фреймворк лучше, речь идет именно о вашем личном выборе, причины которого, могут быть любыми.
И да, Bitrix это не совсем фреймворк, но тем не менее.
UPD: Подразумевается, что стадия сравнения, споров и выбора уже прошла, и тимлид или команда или бизнес решили: по факту будем писать на этом. Хочется узнать фактический мейнстрим на 2016 год, то есть, что будет на самом деле, а ни этот хороший, а тот плохой.

Мультиисключение или Хочу поделиться одним интересным архитектурным приемом

Время на прочтение6 мин
Количество просмотров15K
Мне никогда не нравилась в фреймворках на PHP работа с ошибками. И даже употребление этого слова не нравилось. Чтобы сразу уточнить — я не про фатальные ошибки, не про error_reporting, я про то, что называют ошибками валидации. То в моделях, то в формах — это уж от фреймворка зависит.

Вы только гляньте. Вот например Yii и Yii2, получение ошибок валидации модели:
$errors = $model->getErrors();

Symfony, ошибки формы:
$errors = $form->getErrors();

Активно рекламирующийся Pixie (давненько про него ничего не было):
$result = $validator->validate($data);
$errors = $result->errors();


Что тут не так?
Да всё. Всё не так. Весь этот код очень дурно пахнет, он пахнет временами PHP4, спагетти-архитектурой и диким смешением понятий.

Что же делать?

Читать дальше →

Автоматизация вывода виджета Яндекс.Карты на платформе 1C Bitrix

Время на прочтение3 мин
Количество просмотров8K
С недавних пор, не по собственной воле, пришлось использовать 1С Битрикс. Не скажу, что получил эстетическое удовольствие от работы с системой, однако ожидал худшего. Итак, проблемы:

  • на странице >200 блоков, каждый из которых содержит информацию о местоположении и виджет bitrix:map.yandex.view. В результате, когда пользователь пытается открыть страницу — процесс браузера съедает все что видит;
  • исходный код страницы — это >6000 строк html текста с элементами php для вывода виджета карт;
  • никакой БД нет. Редактирование этой страницы производилось только руками;
  • местоположение было дано только в виде почтового адреса, от чего добавление карты происходило руками в визуальном редакторе;

Читать дальше →

WordPress. Бесплатный курс от GeekBrains

Время на прочтение5 мин
Количество просмотров88K
В ноябре 2015 года вышел свежий обзор Venturebeat.com и W3Techs. Выяснилось, что каждый четвёртый сайт в Интернете базируется на открытой системе управления контентом (CMS) WordPress. В исследование включались только сайты из Alexa TOP 1.000.000, что говорит о том, что это были не какие-то ресурсы, сделанные второпях или в учебных целях, а действительно крупные проекты. Занявшая второе место CMS Joomla набрала только 2,8%.



Свой 8-ми летний рубеж в 2011 году WordPress встретила с результатом всего 13,1%. Затем плавно, без скачков или других резких потрясений четыре года непрерывного роста, и в итоге 14-й год существования этой CMS принес ей абсолютное лидерство: 25% всех сайтов в мире отдали ей предпочтение. Надо отметить, что и сервис WHOIS присудил ей в своем рейтинге 1-е место: 36% проверок на тип CMS его пользователями он выдал ответ: WordPress.
Читать дальше →

Как нам обустроить альтернативу 1С

Время на прочтение8 мин
Количество просмотров42K
Поскольку задача написания «аналогов» и «альтернатив» 1С нетривиальная, есть смысл изложить свое видение и ключевые моменты на основе опыта написания своей наколенной поделки. Ну и как бонус услышать критику и вовремя переделать где промахнулся.

По факту, на данный момент 1С занимает подавляющий сегмент в нише учетных систем. Это объясняется рядом причин, в том числе и агрессивным маркетингом. Напомню техническую сторону. 1С в общем виде, состоит как бы из двух физически отдельных частей — собственно платформы (ядра, движка) и так называемой конфигурации.

Конфигурация — это та часть, где собственно и реализуется прикладная бизнес-логика. Платформа предоставляет персистентное хранилище, бизнес-объекты высокого уровня, всякого рода конструкторы и построители отчетов, и специальный язык программирования. Но сама по себе технологическая платформа, даже с такими возможностями, не имела бы успеха. Поэтому конфигурация поставляется с уже написанной логикой — бухучет, торговля, склад и т.д. с учетом действующего законодательства. Это достаточно объемный труд, но в результате пользователь получает готовое законченное решение. А поскольку код самой конфигурации открыт, то остается возможность, как угодно корректировать бизнес-логику и подстраивать под свой бизнес.

Это плюсы. Но есть и масса минусов. Чтобы не описывать тут можно почитать например здесь.

Попыток вытеснить 1С предпринимается великое множество. Большинство проектов пытается переплюнуть плюсы 1С. Тягаться с огромной корпорацией дело малоперспективное. Продукты, писанные на Делфи или .NET, то есть требующие перекомпиляции, вообще неконкурентные, те, кто пытаются прикручивать в качестве DSL движки javascript или VBA выглядят чуть получше, но в любом случает такие решения могут использоваться в основном если есть штатный программист, чего малый бизнес, как правило, позволить себе не может.

Попробуем подобраться с другой стороны. Не пытаться переплюнуть достоинства 1С а предложить решения тех проблем где 1С имеет минусы.

Поскольку минусы где то уравновешивают плюсы а у нас этих минусов не будет то, даже если у нас не будет плюсов на уровне 1С, сальдо примерно будет такое же.
Читать дальше →

Загрузка моделей, трейтов

Время на прочтение2 мин
Количество просмотров13K
Итак, узнал сегодня небольшую фитчу Laravel/Eloquent, которая практически не описана и лишь вскользь упомянута в документации фреймовика.
Читать дальше →

PHP для маленьких. MVC по-своему

Время на прочтение4 мин
Количество просмотров14K
Хочу предложить легкий курс статей, который бы помог начинающим, а у старичков вызвал бы только теплую улыбку на лице за прожитые годы, направленный на простое освоение концепции MVC.

Концепция


Курс статей, призванный рассказать новичку о том, как же на самом деле устроены такие страшные гиганты, как PHP MVC Фреймворки.

Курс ни в коем случае не претендует на звание «Всеобъемлющее пособие: „Сделай сам все то, что уже давно изобретено“», но поможет понять самым маленьким и только начинающим программистам мира веб, каким образом все это написано, да еще и работает. Но прежде чем загружать вас тоннами кода, необходимо разобраться с самим понятием MVC. Что это такое?
Читать дальше →