• Работа с данными при построении API на основе GraphQL

      Преамбула


      В первую очередь, данная статья расcчитана та тех читателей, которые уже знакомы с GraphQL и больше повествует о тонкостях и нюансах работы с ним. Тем не менее, я надеюсь, что она пригодится и новичкам.


      GraphQL замечательный инструмент. Думаю, о его преимуществах уже знают и понимают многие. Тем не менее, есть некоторые нюансы, которые следует знать, когда вы строите свои API на основе GraphQL.


      Например, GraphQL позволяет возвращать потребителю (пользователю или программе) запросившем данные только ту их часть, в которой этот потребитель заинтересован. Тем не менее, при построении сервера довольно легко совершить оплошность, которая приводит к тому, что внутри сервера (который может быть, в том числе, — распределенным) данные будут курсировать полными "пачками". В первую очередь это связано с тем, что "из коробки" сам GraphQL не предоставляет удобных инструментов для разбора входящего запроса, а те интерфейсы, которые в нем заложены недостаточно документированы.

      Читать дальше →
      • +15
      • 5.6k
      • 2
    • Canvas Gauges 2.0

        image

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


        Как и раньше, библиотека OpenSource и распространяется по лицензии MIT, так что берите, используйте и, вообще, далайте что хотите без каких-либо ограничений.


        Читать дальше →
      • Добавляем чуть больше рефлексии: декораторы

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

          Под катом свой метод решения задачи, вылившийся в небольшую библиотеку, доступную для общего пользования.
          Читать дальше →
        • Манипулирование URL'ами в JavaScript

            Из года в год, сталкиваюсь с одной и той же проблемой. Как добавить, изменить или удалить параметр к некоторому адресу в строковом виде. Быстро и грязно это можно делать с помощью, например, регулярных выражений или найти каке-то готовое решение. Зачастую также может потребоваться, к примеру, подменить путь в адресе или изменить протокол с HTTP на HTTPS и т.д.

            В целом, это хочется делать просто и понятно. При этом хочется разумного компромиса. Я встречал некоторые библиотеки, которые дают мощный функционал, но при этом по объему — десятки килобайт JavaScript кода. Несколько десятков килобайт, чтобы, например, подменить параметр в QueryString? Эх…
            Читать дальше →
          • CanvGauge — измерительный прибор с помощью canvas для HTML5

              HTML5 Canvas GaugeДобрый день, хабровчане!

              Сегодня я хочу поделиться своей небольшой разработкой, которую я делал для одного из своих проектов. На самом деле, в сети множество реализаций gauge, как платных, так и бесплатных. Но найти хоть одно решение с использованием именно canvas мне не удалось, поэтому было принято решение написать свое.
              Читать дальше →
            • Smart-IP.net 2.0 — тотальное обновление сервиса

                Привет Хабровчане!


                Спешу поделиться тем, что после упорного труда я наконец-то решился и отправил в свободное плавание вторую версию своего сервиса Smart-IP.net. Если кто-то помнит старую версию сайта, или же даже регулярно им пользовался, легко заметит существенные изменения. Остальные под катом могут ознакомиться с тем, что же это за сервис и что в нем изменилось.
                Читать дальше →
              • Nested Grids с помощью ExtJS 3.0

                  Введение



                  image

                  Суть проблемы, рассматриваемой в данной статье заключается в том, что Grid объекты библиотеки ExtJS не предназначены для использования в контексте вложенности. В общем случае, такая задача редко становится перед разработчиком. И все же, иногда, как, например, в моем случае, с ней приходится сталкиваться. Ниже я попытаюсь поделиться накопленным опытом, и, возможно, окажу тем самым кому-нибудь неоценимую помощь, на что искренне надеюсь :). Итак, в добрый путь…

                  Читать дальше →
                • Экспертавто — новый сайт публикации объявлений о продаже авто

                    Буквально сегодня мы запустили новый проект ориентированный на украинский рынок — http://expertauto.com.ua/.

                    Не буду говорить об уникальности идеи, хочется лишь отметить что мы стремились сделать проект максимально простым и качественным.

                    Именно поэтому я обращаюсь к хабрасообщесту, чтобы услышать конструктивную и полезную критику — нам очень важны такие отзывы.

                    Оговорюсь сразу, что к моменту запуска у нас не получилось реализовать все, что мы задумали, тем не менее мы будем очень признательны за любые интересные идеи, которые могут быть реализованы в рамках подобного проекта.
                  • Разработка модуля для Apache 2.x

                      Предисловие



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

                      Читать дальше →
                    • Иерархические структуры данных и производительность

                        Введение



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

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

                        Читать дальше →
                      • Иерархические структуры данных и Doctrine

                          Введение



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

                          В первую очередь, это связано с тем, что реляционные базы не приспособлены к хранению иерархических структур (как, например, XML-файлы), структура реляционных таблиц представляет из себя простые списки. Иерархические же данные имеют связь «родитель-наследники», которая не реализована в реляционной структуре.

                          Тем не менее, задача «хранить деревья в базе данных» рано или поздно возникает перед любым разработчиком.

                          Ниже мы подробно рассмотрим, какие существуют подходы в организации хранения деревьев в реляционных БД, а также рассмотрим инструментарий, который нам предоставляет ORM Doctrine для работы с такими структурами.
                          Читать дальше →
                        • Веб-сервисы в теории и на практике для начинающих

                            Что такое веб-сервисы?



                            Прежде всего, веб-сервисы (или веб-службы) — это технология. И как и любая другая технология, они имеют довольно четко очерченную среду применения.

                            Если посмотреть на веб-сервисы в разрезе стека сетевых протококолов, мы увидим, что это, в классическом случае, не что иное, как еще одна надстройка поверх протокола HTTP.

                            С другой стороны, если гипотетически разделить Интернет на несколько слоев, мы сможем выделить, как минимум, два концептуальных типа приложений — вычислительные узлы, которые реализуют нетривиальные функции и прикладные веб-ресурсы. При этом вторые, зачастую заинтересованы в услугах первых.

                            Но и сам Интернет — разнороден, т. е. различные приложения на различных узлах сети функционируют на разных аппаратно-программных платформах, и используют различные технологии и языки.

                            Чтобы связать все это и предоставить возможность одним приложениям обмениваться данными с другими, и были придуманы веб-сервисы.
                            Читать дальше →
                          • Контроль скалярных типов в PHP 5

                              [Обновлено]: Внесены некоторые изменения в код. Спасибо ithilion и LoneCat

                              Все уже знают что в PHP 5 в аргументах функций можно указывать их тип, за исключением… скалярных типов, т.е.: integer, string, boolean, float, и т.д.

                              Однако на странице мануала о контроле типов, в комментариях, Daniel L. Wood приводит достаточно интересное решение этой проблемы с помощью класса-обработчика ошибок. Единственный существенный недостаток этого решения — это его производительность.

                              Ниже я попытаюсь рассказать, как можно оптимизировать это решение, а также стоит ли им пользоваться, в принципе, в продакшн релизах.
                              Читать дальше →