Как стать автором
Обновить
66.62

PHP *

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

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

Laravel + Docker: наш успешный опыт использования

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

О чем эта статья


В статье пойдет речь о нашем опыте использования Docker для быстрой настройки масштабируемого dev окружения для web разработки. Я коротко расскажу о задачах, которые стояли перед нами и об инструментах, которые были выбраны для решения этих задач. Статья отмечена значком tutorial, потому что вы найдете в ней инструкцию по разворачиваю окружения у себя. По сравнению с аналогичными статьями (ссылки в конце статьи), здесь будет меньше технических деталей и больше живых примеров.
Читать дальше →

Gitpab. Приятно познакомиться

Время на прочтение7 мин
Количество просмотров6.8K
Здравствуй. Я Gitpab. Рад знакомству. Меня сделали для того, чтобы легче было надзирать за программистами. Я беру часы, которые разработчики отметили в Gitlab, и подсчитываю, кто сколько затратил времени на работы по задачам. И по проекту в целом. Поговаривают, что большие начальники с моей помощью считают зарплату прогеров и рентабельность проектов. И это действительно так. Еще с моей помощью можно повысить маржинальность софтверных проектов. А сейчас я расскажу, чем могу быть полезен твоей команде и тебе лично.

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

Переезд на кластер под управлением «1С-Битрикс: Веб-окружение»

Время на прочтение8 мин
Количество просмотров15K
В определённый момент появилась задача — перевести, существующий и активно работающий в production, проект на работу в кластере серверов. Т.к. проект разработан на базе 1C-Bitrix, было принято решение построить кластер с использованием «1С-Битрикс»: Веб-окружение». Цель данного мероприятия — получить возможность выдерживать большие нагрузки при наплывах посетителей сайта, а также возможность в дальнейшем быстрее масштабироваться горизонтально.
Читать дальше →

DataIncrement 2 — разрешение противоречий, ТРИЗ в реальной разработке

Время на прочтение4 мин
Количество просмотров1.6K
В прошлый раз, из комментариев получилось выделить две конкретные проблемы проекта за что большое спасибо не равнодушным пользователям. Первая проблема — отсутствие SSL сертификата на сайте. И вторая, разглашение паролей доступа кому бы то ни-было — это крайне сомнительная идея.

Решение первой проблемы чисто техническое — установить бесплатный сертификат не вызывают больших сложностей.

А вот решение второй проблемы — исключить разглашение параметров подключения к своей базе данных — это вопрос.
Читать дальше →

Сохранение JS и CSS ресурсов в Локальном хранилище браузера

Время на прочтение3 мин
Количество просмотров17K
Вопрос, стоит ли хранить javascript и css ресурсы веб-страницы в LocalStorage браузера или позволить ему самому отрабатывать кэширование, не имеет однозначного ответа. Есть плюсы и минусы. С моей точки зрения, основной плюс — скорость загрузки — перевешивает все остальное. Это очень хорошо чувствуют пользователи EDGE и 3G.

Для поклонников стандартного кэша браузеров, гордо показывающих на слово «Кэшировано» в Средствах разработчика, советую открыть Fiddler и увидеть, что по каждому кэшированному ресурсу за 304 HTTP ответом всё равно идет запрос. Затем советую зайти на что-нибудь типа pingdom.com и увидеть, что непосредственно передача данных во всем времени исполнения запроса занимает проценты. То есть толку в абсолютном значении от такого кэширования — кот наплакал, особенно если файлы небольшие.
Читать дальше →

Парсер на PHP-коленке или как я свою музыкальную коллекцию пополнял

Время на прочтение10 мин
Количество просмотров25K
А началось все с чего? А началось все одним домашним, зимним, субботним вечером… Ну и конечно же с проблемы, для которой искалось решение)

На днях, по своей же глупости, я потерял навеки всю свою коллекцию музыки (Я — DJ, музыкант). Было очень жалко, ведь коллекция была идеально рассортирована, проанализирована на битрейт, тональность и т.д.

Смирился, думаю ладно, буду заново качать все треки. Качать буду с сайта promodj.com
Почему «промоднище», а не какой нибудь soundcloud? Первая причина — я сижу на этом сайте гораздо чаще, чем на остальных музыкальных порталах. Вторая причина — там есть очень удобный поиск с фильтрами а-ля «Топовое за январь 2017 с качеством 320kbps, длиной не больше 10 минут и не является мэшапом».

Как вы сами понимаете, совсем скоро мне настое… надоело нажимать руками кнопочку «Скачать». И тут и началось самое интересное).
Читать дальше →

Области сокрытия кода и рефакторинг

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

Одним из главных аспектов при разработке программного обеспечения вообще и web-приложений в частности я считаю способность программного обеспечения быть изменяемым — адаптируемым к изменениям окружающего мира. Это не значит, что разработчик должен заранее предусмотреть будущие изменения среды обитания своего кода, это значит, что код должен переносить множество циклов рефакторинга, оставаясь при этом работоспособным как можно дольше. А для этого нужно, чтобы последствия изменений, вносимых в код, были либо обозримы, либо предсказуемы. Под катом я суммировал свое понимание областей сокрытия кода, сформировавшееся в результате тесных, практически интимных, отношений с Magento 2 (платформой для построения интернет-магазинов). Изложенное ниже относится во-первых, к языку PHP, во-вторых — к web-приложениям, в-третьих — ко всему остальному.

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

Microservices и Модель Акторов (Actor Model)

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

Доклад посвящен:

  • Пользовательским интерфейсам ориентированным на задачи (Task Based UI)
  • CQRS (Command/Query Responsibility Segregation)
  • Микросервисы
  • Закон Конвея и его влияние на примере организации команд в Magento
  • Fine-grained сервисы vs Coarse-grained сервисы
  • Синхронность vs Асинхронность
  • Модель Акторов (Actor Model)

Вторая часть доклада находится под хабракатом.

Как написать чат-бота на PHP для сообщества ВКонтакте

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

Laravel подробнее про Homestead

Время на прочтение6 мин
Количество просмотров44K
В официальной документации Laravel написана целая страница о Homestead, но проблема в том, что в ней мало разъяснений зачем это вообще надо. В документации скорее инструкция для тех кто уже знаком и с VirtualBox и с Vagrant и с Linux (Ubuntu). Если Вы из таких — статья не откроет что-то новое, но если Вы прочитали про Homestead в документации и не поняли зачем это вообще надо, или что-то не получилось выполнить по инструкции — в этой статье все будет разжевано подробно.
Читать дальше →

«Runn Me!» — говорит нам очередной фреймворк* на PHP. А слышится «Throw Me!». Часть 2

Время на прочтение6 мин
Количество просмотров7.2K
* вообще говоря это пока еще не фреймворк, а просто набор библиотек, фреймворком он станет чуть позже


Не прошло и недели с момента «безумного успеха» (тут мнения немного расходятся, конечно...) первой части нашего повествования, как пришло время выпустить вторую.

Сегодня мы продолжаем путешествие в бездонную глубину библиотеки runn/core будущего фреймворка «Runn Me!». Под катом нам встретятся следующие обитатели бездны:

  • Концепция «мультиисключения» и ее реализация в библиотеке
  • Понятие объекта с внутренней валидацией и эталонная реализация такого объекта
  • Немного заглянем в мир валидаторов и санитайзеров (подробный рассказ о них будет позже)
  • Рассмотрим реализацию объекта с обязательными полями

Вперед!

Пузырьковая сортировка и бинарный поиск на PHP (обучение, эксперименты)

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

Введение


Хотел бы поделиться с сообществом своей реализацией пузырьковой сортировки и бинарного поиска. Проект сделал исключительно в учебных целях.

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

Итак, приступим к реализации самих алгоритмов. Забегая вперед скажу, что статья состоит из трех логических частей: реализация алгоритмов, тестирование написанного кода (PHPUnit) и проведение нагрузочных тестов (базовые функции языка VS написанный код).

Т.е. как бы имитируется разработка некой системы (выполнение практической задачи) и прохождение по всем обязательным этапам (исходя из существующих на сейчас «стандартов» разработки).


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

Yii2, быстрый старт. Самый простой сайт на Yii2 со статическими страницами без использования БД

Время на прочтение3 мин
Количество просмотров20K
Сначала я написал пространное предисловие к этому тексту, а потом удалил его. В общем, этот текст для тех, кто как и я, любит сначала сделать, а потом уже разбираться с тем, что же он такое сделал. Чтобы собрать нижеизложенную информацию мне пришлось три дня усиленно рыться в различных источниках. Так что, надеюсь кому и пригодится. Это годная шпаргалка.

1. Устанавливаете Yii2 Basic на сервер, как написано в документации. Описано там всё четко и по делу, добавить мне нечего.

Разве что вот: локально на OpenServer поставилось без сучка, без задоринки. А вот удаленно, на KVM Ubuntu 16.04 с 1Gb оперативки Composer-у не хватило памяти. Бился часа два, так и не осилил. Благо, что с локального сервера на удаленный, сайт можно легко перенести простым копированием.

2. Повторюсь, установка — basic (допустим, в папку /www/site/basic, но далее мы для простоты изложения будем вести отсчет именно от папки basic в которую вы создали проект, как рекомендуется в руководстве).

Папку basic/web сразу устанавливаете как DocumentRoot — как это сделать, тоже есть в официальном руководстве на русском языке.
Читать дальше →

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

Дружба OkayCMS и модуля для SMTP

Время на прочтение4 мин
Количество просмотров4.2K
После того, как почтовые сервисы перешли на свою строгую политику, многие клиенты стали жаловаться, что письма с интернет-магазина падают как минимум в спам, а в худшем случае, хостинг просто блочит письмо и не отправляет клиенту. В связи с этим, мы стали прикручивать на сайты популярную библиотеку PHPMailer, которая позволяет гибко настроить отправку почты. Как оказалось, в рамках простой CMS данная библиотека выглядит «мини-монстром» так как содержала в себе файлов больше, чем папка со всеми контроллерами системы.

В итоге мы составили кое-какой алгоритм подключения этого дела к системе Okay.

Итак, шаг номер раз: скачиваем библиотеку PHPMailer с гита.
Шаг номер два: загружаем папку библиотеки в папку api самой системы и подключаем ее к ней.
Читать дальше →

Alameda, Bower и NPM интеграция в CleverStyle Framework

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

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


В то же время есть огромное количество сторонних компонентов в виде Bower/NPM пакетов, работу с которыми фреймворк так же упрощает и с которыми отлично интегрируется.

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

Использование EntryPoints в SuiteCRM

Время на прочтение3 мин
Количество просмотров2.9K
В данном материале речь пойдет о широко известной CRM-системе c открытым исходным кодом – SuiteCRM. Открытость системы дает безграничные возможности для кастомизации, и, как пример, будет рассмотрен процесс создания динамически подгружаемых справочников из БД с использованием jQuery библиотеки select2.

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

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

DevConf-2016: программа мастер-классов

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

На DevConf-2016 как и в прошлом году будут не только доклады, но и мастер-классы. Что такое мастер-класс? Чем он отличается от доклада или сессии на флипчартах.
Читать дальше →

Универсальные многоразовые формы данных. Рецепты приготовления и сервировки

Время на прочтение4 мин
Количество просмотров4.1K
Данные в любом приложении являются ключевым фактором простоты их понимания. Со временем вырабатывается определенный подход к их выборке, обработке и обновлению. Если обрабатывая данные вы все еще задумываетесь над тем в какой форме хранить ваши данные, как из списка выбрать то что нужно — возможно данный подход упростит вашу жизнь. Основные требования к хранению данных могли бы звучать как то так:

Структура максимально близкая к реляционной. Подобная форма хранения данных завоевала популярность у разработчиков и мы не будем от нее отказываться.

Данные должны обеспечивать простоту доступа к основному элементу по идентификатору. Взаимосвязи со смежными элементами строятся на основе использования вторичного ключа в качестве указателя на основной элемент. Быстрый доступ будет плюсом.

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

Дополнительным бонусом будет использование «налету» что позволит обращаться к объектам через несколько уровней.

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

Асинхронное параллельное исполнение в PHP

Время на прочтение14 мин
Количество просмотров63K
Много пик сломано в мире на тему того, можно ли и как создавать многопоточность в PHP. Чаще всего все сводится к тому, что так делать нельзя или дискуссия материализуется в какие-то ужасные костыли (ох, сколько я их уже повидал). Я хочу изложить свою точку зрения на этот вопрос. Легко догадаться, что если бы моя позиция была “так нельзя” или “это зло”, то я бы не писал эту статью. Вот только погодите, не спешите доставать тухлые яйца и вооружаться мелкими бытовыми предметами для рукопашной схватки. Я постараюсь дипломатично изложить тему и максимально объективно раскрыть ситуацию. Так что самые смелые из моих читателей могут прочитать молитву от ереси и открыть статью.


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

Дайджест интересных материалов из мира Drupal #16

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

Мы собираем полезные статьи и свежие новости из мира Drupal и делимся с вами раз в месяц. Встречайте новогодний выпуск!



По-русски


  1. Хабр разворачивает Drupal 8: cначала докером, потом Otto, наследником Vagrant.
  2. Как в восьмёрке сделать банальный $node->save() читайте в заметке Drupal 8: Программное создание сущностей Никиты Малышева.
  3. Тот же автор продолжает: как добавить в восьмёрку семантическую разметку и не умереть (это про JSON-LD).
  4. «Что случилось с hook_menu в Drupal 8?» — перевод отличной статьи луллаботов для хабра.
  5. Блоггер Tlito записал свои заметки о восьмёрке для новичков, не знакомых ни с программированием, ни даже с друпалом (1, 2).
  6. @xandeadx написал модуль-хелпер, позволяющий выполнить всю очередь в фоне без вылета по таймауту — Background Queue.
  7. Он же показывает на красивом примере, как использовать теги db-запросов во Views: Необязательное одно из двух значений раскрытого фильтра с оператором BETWEEN
  8. Обзор методов работы с AJAX с примерами кода.
  9. После того, как AJAX-заработал, можно заняться стилизацией стандартной иконки лоадера.
  10. К новостям сообщества. Первоначальный владелец домена drupal.ru опубликовал прощальное письмо и анонсировал передачу домена из своих рук.
  11. На Dru.io, другом сайте сообщества, активно проходят спринты по переводам восьмёрки. Присоединяйтесь!
  12. Питерское сообщество опубликовало презентации и видео четырёх докладов по Drupal 8.
  13. Отгремел DrupalCamp Siberia 2015 в Новосибирске. Пока официальные материалы обрабатываются и выкладываются, можно посмотреть экранку из нашего спец.выпуска (хочу такое получать).

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