Pull to refresh
0
0
Send message

Делаем GraphQL API на PHP и MySQL. Часть 1: Установка, схема и запросы

Reading time9 min
Views47K
image

В последнее время я все чаще и чаще слышу про GraphQL. И в интернете уже можно найти немало статей о том как сделать свой GraphQL сервер. Но почти во всех этих статьях в качестве бэкенда используется Node.js.

Я ничего не имею против Node.js и сам с удовольствием использую его, но все-таки большую часть проектов я делаю на PHP. К тому же хостинг с PHP и MySQL гораздо дешевле и доступнее чем хостинг с Node.js. Поэтому мне кажется не справедливым тот факт, что об использовании GraphQL на PHP в интернете практически нет ни слова.

В данной статье я хочу рассказать о том, как сделать свой GraphQL сервер на PHP с помощью библиотеки graphql-php и как с его помощью реализовать простое API для получения данных из MySQL.
Читать дальше →
Total votes 22: ↑22 and ↓0+22
Comments40

Пишем URL, получаем бесплатную иконку

Reading time2 min
Views19K
Сервис omg-img позволяет вставлять иконки вот так:

<img src="https://png.icons8.com/search">



Чувствуете, к чему я клоню? Сделали вставление иконок не выходя из IDE. Просто пишете URL, параметры вроде цвета и стиля — мы отрендерим иконку и отдадим через хороший, годный CDN.

Вместо search можно написать любое название иконки:

  • home
  • sheep-on-bike
  • trump

Читать дальше →
Total votes 76: ↑72 and ↓4+68
Comments105

Как запустить ClickHouse своими силами и выиграть джекпот

Reading time15 min
Views77K

Мы решили описать простой и проверенный путь для тех, кто хочет внедрить аналитическую СУБД ClickHouse своими силами или просто испробовать ClickHouse на собственных данных. Именно этот путь прошли мы сами в новостном агрегаторе СМИ2 и добились впечатляющих результатов.


Clickhouse-client


В предисловии статьи — небольшой рассказ о наших попытках внедрить Druid и InfluxDB. Почему после успешного запуска ClickHouse мы смогли отказаться от использования InfiniDB и Cassandra.


Total votes 59: ↑59 and ↓0+59
Comments50

Кластер высокой доступности на postgresql 9.6 + repmgr + pgbouncer + haproxy + keepalived + контроль через telegram

Reading time32 min
Views56K
image

На сегодняшний день процедура реализации «failover» в Postgresql является одной из самых простых и интуитивно понятных. Для ее реализации необходимо определиться со сценариями файловера — это залог успешной работы кластера, протестировать его работу. В двух словах — настраивается репликация, чаще всего асинхронная, и в случае отказа текущего мастера, другая нода(standby) становится текущем «мастером», другие ноды standby начинают следовать за новым мастером.

На сегодняшний день repmgr поддерживает сценарий автоматического Failover — autofailover, что позволяет поддерживать кластер в рабочем состоянии после выхода из строя ноды-мастера без мгновенного вмешательства сотрудника, что немаловажно, так как не происходит большого падения UPTIME. Для уведомлений используем telegram.

Появилась необходимость в связи с развитием внутренних сервисов реализовать систему хранения БД на Postgresql + репликация + балансировка + failover(отказоустойчивость). Как всегда в интернете вроде бы что то и есть, но всё оно устаревшее или на практике не реализуемое в том виде, в котором оно представлено. Было решено представить данное решение, чтобы в будущем у специалистов, решивших реализовать подобную схему было представление как это делается, и чтобы новичкам было легко это реализовать следуя данной инструкции. Постарались описать все как можно подробней, вникнуть во все нюансы и особенности.
Читать дальше →
Total votes 43: ↑41 and ↓2+39
Comments45

Как создать своего бота для Skype. Что не написано в документации

Reading time3 min
Views89K


Некоторое время назад я рассказывал о своем боте для Telegram, который умеет данные из Google Analytics показывать. А тут Microsoft объявила о запуске ботов в Skype — самое время изучить как это работает. Под катом — небольшое описание возможных проблем. Кому не терпится посмотреть результат, вот он — MetricsBot Add Bot to Skype.
Куда смотреть и что делать?
Total votes 31: ↑28 and ↓3+25
Comments31

Чтение больших объемов данных в Python/Postgresql

Reading time3 min
Views26K
Стек рассматриваемых технологий: Postgresql 9.3, Python 2.7 с установленным модулем «psycopg2».

Проблема


Как часто в вашей практике приходилось сталкиваться с задачей обработки таблиц большого объема (более 10 млн. записей)? Думаю вы согласитесь, что данная задача является довольно ресурсоемкой как в плане времени обработки, так и задействованных ресурсов системы. Сегодня я постараюсь показать альтернативный способ решения задачи.

Предложение:


В СУБД Postgresql есть прекрасный оператор для работы с большими объемами информации, а именно «COPY». Применение данного оператора позволяет нам читать и записывать огромные объемы информации в таблицу. В данной статье мы будем рассматривать режим чтения.

Согласно документации оператора «COPY» нам доступны несколько режимов чтения в файл либо в поток STDOUT, а также различные форматы, в том числе и «csv». Как раз его мы и постараемся использовать с максимальной пользой.
Читать дальше →
Total votes 21: ↑19 and ↓2+17
Comments15

6 впечатляющих веб-технологий 2015 года

Reading time5 min
Views55K
2015 год выдался богатым на нововведения, связанные с улучшениями веб-платформы. Аксель Рошмайер рассматривает 6 технологий, которые ему кажутся наиболее интересными:

1. Electron;
2. React Native;
3. Прогрессивные веб-приложения;
4. Visual Studio Code;
5. Rollup;
6. WebAssembly.



Читать дальше →
Total votes 29: ↑20 and ↓9+11
Comments37

Многопользовательский онлайн-шутер на WebGL и asyncio, часть вторая

Reading time17 min
Views24K

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

Введение
1. Структура игры
2. Импорт моделей и blender
3. Подгрузка моделей в игре с babylon.js и сами модели
4. Передвижения, миникарта и звуки игры в babylon.js
5. Вебсокеты и синхронизация игры
6. Игроки и их координация
7. Балансировка игроков по комнатам и объектный питон
8. Asyncio и генерация поведения бота
9. Nginx и проксирование сокетов
10. Асинхронное кэширование через memcache
11. Послесловие и RoadMap

Всех кому интересна тема асинхронных приложений в Python3, WebGL и просто игр, прошу под кат.
Читать дальше →
Total votes 28: ↑27 and ↓1+26
Comments5

Обход DPI провайдера на роутере с OpenWrt, используя только busybox

Reading time5 min
Views45K
image
Всем привет, в свете последних новостей от РосКомНадзора решил я глянуть, как дела с блокировками у моего провайдера. Оказалось, что гугловский DNS не спасает, а блокировка работает путем выделения HTTP запроса на запрещенный сайт и последующего дропания пакетов найденной TCP сессии. Однако после небольшого ковыряния оказалось, что для обхода достаточно одного busybox'а. Кому интересно — велком под кат.

Читать дальше →
Total votes 29: ↑29 and ↓0+29
Comments53

Опасное видео: как я нашёл уязвимость в видеохостингах и не умер через 7 дней

Reading time6 min
Views103K


Всем привет! Я Максим Андреев, программист бэкенда Облака Mail.Ru. В свободное время я люблю искать баги. В сегодняшнем посте я хочу рассказать об одной довольно интересной уязвимости, которую я нашёл и зарепортил в bug bounty нескольких крупных компаний, за что получил солидное вознаграждение. Уязвимость заключается в следующем: если сформировать специальный видеофайл и загрузить его на сервер, то:

  • можно получить на нём SSRF;
  • можно получить local file read;
  • если пользователь скачает этот файл, то автоматически будет подвержен уязвимостям, даже если его не откроет: можно будет получить доступ к данным на компьютере пользователя и узнать его имя.

Читать дальше →
Total votes 255: ↑250 and ↓5+245
Comments66

Исповедь Google-спамера

Reading time10 min
Views48K

Правдивая история о том, как беспринципный «ботаник» заработал миллионы долларов на поисковом гиганте


image

Прежде чем заняться телемаркетингом, я как-то умудрился заработать за месяц $50 000, и все благодаря спаму в Google. Причем занятию этому нужно было уделять всего порядка 10 часов в неделю. Но, признаться честно, не советую, вот совершенно откровенно, повторять такие «подвиги».

В этом посте я как раз и решил пояснить, почему.

Мое видение мира в 2009 году


Я вовсе не собирался спамить в интернете. Но Google не оставил мне выбора, да тогда я рассуждал, примерно, так.

Если спамить так плохо, думал я, почему же спам всегда отлично работает? Большинство черных SEO-шников, вероятно, придерживаются той же точки зрения. Они просто находят ряд подходящих оправданий спаму, направленному против индексации Google:

  • Мы же помогаем Google совершенствовать существующий алгоритм индексации!
  • Кто сказал, что контент наше все?!? LOL! Ссылки, вот что вам нужно. Google врет. Спам по ним плачет.
  • Если не будем спамить мы, этим займутся наши конкуренты, а, значит, они нас сделают. Придется спамить.
  • Вообще-то, если вы не в курсе, мы заботимся о своих клиентах: только так мы сможем выиграть битву против гигантской империи зла, которая того и гляди поработит всех, наживаясь на плате за клики!

Читать дальше →
Total votes 59: ↑37 and ↓22+15
Comments24

Android. Автозапуск приложения при загрузке: теория и практика

Reading time7 min
Views95K
Простой поиск на stackoverflow.com показывает, что тема получения сообщения ACTION_BOOT_COMPLETED остается актуальной и по сей день. Как видно, многие новички сталкиваются с проблемой: они не получают в своих приложениях сообщение ACTION_BOOT_COMPLETED. В этой статья я попробую резюмировать данные из официальной документации, опыт многих разработчиков из stackoverflow.com, а также свой опыт. Итак, как же победить этого «коварного врага» под названием «ACTION_BOOT_COMPLETED»?
Читать дальше →
Total votes 28: ↑26 and ↓2+24
Comments7

Бесплатные панели управления хостингом. Красивое совершенство

Reading time4 min
Views44K
Не так давно нами была запущена услуга облачных VPS. За счет полного root-доступа к виртуальному серверу и своей небольшой стоимости она стала довольно популярной среди наших клиентов. Кто-то переезжал на облачные VPS с виртуального хостинга, так как клиентам было важно иметь именно доступ суперпользователя, а кто-то хотел использовать своим выделенный IP-адрес и не делить его с недобросовестными соседями.

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



Если говорить о большинстве наших услуг хостинга, то в стоимость практически всех из них включена лицензия панели управления ISPmanager, чего не скажешь про облачные VPS. Учитывая цену данных виртуальных серверов — это и не удивительно. Но многие наши клиенты хотели и вместе с такой бюджетной услугой иметь возможность использовать удобную панель управления хостингом, но при этом мало кто готов был оплатить лицензию разработки той же компании ISPsystem — ISPmanager, которая довольно популярна в рунете. Здесь их позицию понять можно, и после того как обращения в нашу поддержку по данному вопросу участились — мы решили составить свой обзор бесплатных панелей управления хостингом. Те, кому это интересно — милости просим под хабракат…
Читать дальше →
Total votes 25: ↑24 and ↓1+23
Comments17

Захват видео с USB камер на устройствах под управлением Linux

Reading time7 min
Views37K

Предыстория


Некоторое время назад я загорелся желанием “улучшить” танк из известного набора “Танковый бой”, добавив возможность играть, как «если бы я был водителем танка». Идея появилась после прочтения нескольких статей на Хабре (например здесь: geektimes.ru/post/257528), в них же я нашел, как это можно сделать имея маленький WiFi-роутер и USB-камеру. Решение выглядело подкупающе простым: роутер прошивается специальной прошивкой, к нему подключается камера, танк управляется родным пультом, а видео смотрится в браузере. Быстро собрав прототип, я обнаружил, что видео захватывается в отвратительном качестве. Это было либо 320х240х30, либо 640х480х30. При включении режима 1280х720 в лучшем случае было рваное видео с артефактами, в худшем — его не было вообще. Режим 1920х1080 не работал в принципе. Меня это сильно расстроило, так как на PC камера поддерживала режимы вплоть до 1920х1080х30 и имела аппаратное MJPG сжатие. Моя интуиция подсказывала, что реализация далека от совершенства.
Читать дальше →
Total votes 25: ↑25 and ↓0+25
Comments12

Как нам удалось построить видеохостинг за 1¢/ГБ

Reading time4 min
Views26K

Почему видеохостинг такой дорогой


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

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

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

Чтобы решить эту проблему, нам пришлось сделать софт умнее.


Читать дальше →
Total votes 31: ↑29 and ↓2+27
Comments68

Создание GUI приложений на PHP

Reading time6 min
Views53K

Темой о разработке GUI приложений на PHP сегодня, пожалуй, уже никого не удивишь. Для этого существует не одно решение, есть как развивающиеся проекты, так и умершие. Но этот пост будет не о тех и не о других, а о новом расширении для PHP — библиотеке PHPQt5, а точнее о её более продвинутой реинкарнации — о PQEngine.

P.S. PHPQt5 не имеет ничего общего с более известной библиотекой php-qt!
Читать дальше →
Total votes 41: ↑36 and ↓5+31
Comments34

jQuery Video Extend — расширение возможностей HTML5 видео плеера

Reading time3 min
Views25K
Часто вижу, что владельцы сайтов и разработчики используют видео-плееры вроде VideoJS, Flowplayer, Uppod и т.д., но очень редко вижу стандартные HTML5 плееры на сайтах. Мне это кажется странным, ведь обычные плееры в браузерах тоже выглядят очень симпатично. Что есть у стандартного «браузерного» видео плеера:

  1. Стильный дизайн. Зависит от браузера, но везде на хорошем уровне.
  2. Поддержка самого популярного формата — Mpeg4 (H.264) (Chrome, Firefox, IE, Safari, Opera).
  3. Очень удобное API — http://www.w3.org/2010/05/video/mediaevents.html
  4. Быстрая работа и поддержка мобильных устройств.

Почему же такие плееры не популярны? Вот список возможных причин:

  1. Нет простого способа добавить свой логотип.
  2. Нет поддержки FLV видео, которое часто ещё встречается.
  3. Нет возможности ставить метки на видео и создавать свои расширения.
  4. Нет возможности менять внешний вид и стиль плеера.

С последним пунктом сложнее всего, но довольно редко эта возможность используется и на плеерах, о которых я писал в начале. Чаще используется первая стандартная тема оформления. Первые три пункта я решил восполнить, написав jQuery плагин, так появился Video Extend.
Читать дальше →
Total votes 29: ↑29 and ↓0+29
Comments13

Десятка лучших движков для создания своих собственных игр

Reading time1 min
Views203K
Десять лучших, по мнению ресурса BytesWire, игровых движков для создания собственных игр.

Unity 5


image
Лучший выбор для разработчика, позволяет создавать игры как 2D, так и 3D.

Construct 2


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

libGDX


image
Кросплатформенный фрейморк, написанный на Java и работающий с OpenGL (ES).
Читать дальше →
Total votes 38: ↑19 and ↓190
Comments27

Нескучные выходные или «тачка на прокачку»

Reading time14 min
Views120K
Некоторое время назад я сказал: "«Тюнить» авто лично мне как-то не интересно...", но «никогда не говори „никогда“». Звезды встали в таком порядке, что пришлось экстренно сменить машину Peugeot 307sw на Mazda5.

Машина ездит, все хорошо, но некоторые «плюшки», которые были в прежней машине штатно, почему-то отсутствовали в текущей.

Одна из таких полезных вещей — парктроник. Установка парктроника не является проблемой, но вот как-то «неродной» дисплей парктроника меня в салоне не устраивал. Внутренний перфекционист был жутко против «чужеродного тела».
Заводи, поехали!
Total votes 128: ↑125 and ↓3+122
Comments54

Хочется взять и расстрелять, или ликбез о том, почему не стоит использовать make install

Reading time5 min
Views170K
К написанию сей заметки меня сподвигло то, что я устал делать развёрнутые замечания на эту тему в комментариях к статьям, где в качестве части инструкции по сборке и настройке чего-либо для конкретного дистра предлагают выполнить make install.
Суть сводится к тому, что эту команду в виде «make install» или «sudo make install» использовать в современных дистрибутивах нельзя.

Но ведь авторы программ в руководствах по установке пишут, что нужно использовать эту команду, возможно, скажете вы. Да, пишут. Но это лишь означает, что они не знают, какой у вас дистрибутив, и дистрибутив ли это вообще, может, вы вступили в секту и обкурилисьчитались LFS и теперь решили под свою хтоническую систему скомпилять их творение. А make install является универсальным, хоть и зачастую неправильным способом это сделать.

Читать дальше →
Total votes 385: ↑339 and ↓46+293
Comments185

Information

Rating
Does not participate
Registered
Activity