Pull to refresh
0
0
kithrax @kithrax

User

Send message

Рекурсивные запросы в PostgreSQL (WITH RECURSIVE)

Reading time3 min
Views184K

Как ни странно, чтобы понять рекурсию, в PostgreSQL не надо понимать рекурсию. Потому что WITH RECURSIVE, который присутствует в посгресе (и в других серьёзных базах) — это скорее вычисление чего-то итерациями до того, как будет выполнено некоторое условие.
Тем не менее это очень полезный функционал базы, который можно использовать, например, чтобы вывести все подкатегории заданной категории, если таблица задана в виде (id, parent_id, ...)
Читать дальше →
Total votes 34: ↑31 and ↓3+28
Comments14

Jii: Полноценное приложение с архитектурой Yii2 в браузере

Reading time4 min
Views19K
Привет всем хабровчанам, любителям Yii и Node.js. Продолжаю серию статей про Jii, на сей раз настала очередь рассказать о том, что Jii можно использовать в браузере.


Представьте, уже сейчас все структуры фреймворка, такие как приложения, компоненты, контроллеры, модули, модели, представления доступны в браузере!
Читать дальше →
Total votes 23: ↑16 and ↓7+9
Comments28

Издание в Стиме с минимальными затратами

Reading time3 min
Views58K
Исправление от 07.05.2016
В сети слишком часто ссылаются на этот мой текст, поэтому я хочу предостеречь людей: я не несу никакой гарантии за достоверность данных, рассказанных тут полгода назад. По хорошему, я хотел бы удалить эту статью, но не вижу такой кнопки в интерфейсе сайта. Тем не менее, я счел необходимым удалить некоторые пункты этим исправлением.


Эта статья мой личный опыт размещения игры в Стиме, и в ней я расскажу о тех моментах, которые беспокоили меня самого в процессе этого дела. Надеюсь, она поможет тем, кто решит пройти этим же путём. Этим немного особенным образом, дорогой минимальных усилий.
Читать дальше →
Total votes 107: ↑102 and ↓5+97
Comments66

ZeroRPC — легкая, надежная библиотека для распределенной связи между серверами

Reading time3 min
Views11K
Давече мне понадобилось реализовать некое подобие собственного statsd-like сервера сбора метрики, но с несколько узко-специфичными фичами, под которые без хорошего напильника не ложилось ни одно готовое или полуготовое решение. В связи в этим было решено реализовать простой клиент-сервер протокол на python с использованием tcp/udp soket'ов. Оговорюсь, что с сетевым программированием знаком я был, да и остаюсь постольку-поскольку, хотя общее понимание tcp/ip стека имелись. Решение в лоб на синтетике показало себя замечательно, но стоило мне нагрузить его более-менее реальными данными (всего-то порядка 20к сообщений в секунду с нескольких потоков) и оно начало показывать свои подводные камушки. Наверное, я просто не смог правильно приготовить raw сокеты, но задачу нужно было решить быстро, времени на глубокое понимание и изучение сетевого программирования не было, поэтому я начал искать решения, где за меня уже хотя бы половину придумали бы. Поиск меня привел к библиотеке ZeroRPC, которая была не так давно, как я понял, выпущенна в мир из недр dotCloud.

Меня удивило, что я нашел всего одно упоминание про эту разработку на хабре, да и то в скользь, поэтому решил написать эту заметку.
Читать дальше →
Total votes 16: ↑15 and ↓1+14
Comments12

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

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

Несколько интересностей и полезностей для веб-разработчика #42

Reading time6 min
Views37K
Доброго времени суток, уважаемые хабравчане. За последнее время я увидел несколько интересных и полезных инструментов/библиотек/событий, которыми хочу поделиться с Хабром.

Webtorrent




Полноценный торрент клиент для NodeJS и браузеров. Стримминг будет работать прямо в браузере благодаря WebRTC (data chanels) для P2P транспортировки. А самое главное «It's Just JavaScript™», то есть не нужны никакие дополнительные плагины или расширения. Проект собрал более 3000 звезд на GitHub и на данный момент предоставляет следующие возможности: непосредственно саму потоковую передача данных, загрузка нескольких торрентов одновременно, поддержку magnet uri, peer discovery и protocol extension api, возможность подключения WebTorrent клиентов на разных доменах, стримминг видео в <video> тег в формате (webm (vp8, vp9) или mp4 (h.264)), а также в AirPlay, Chromecast, VLC player и прочие устройства.

var WebTorrent = require('webtorrent')

var client = new WebTorrent()
var magnetUri = '...'

client.add(magnetUri, function (torrent) {
  // Got torrent metadata!
  console.log('Torrent info hash:', torrent.infoHash)

  torrent.files.forEach(function (file) {
    // Get a url for each file
    file.getBlobURL(function (err, url) {
      if (err) throw err

      // Add a link to the page
      var a = document.createElement('a')
      a.download = file.name
      a.href = url
      a.textContent = 'Download ' + file.name
      document.body.appendChild(a)
    })
  })
})

Читать дальше →
Total votes 49: ↑44 and ↓5+39
Comments17

Модульное тестирование поведения Yii2 с помощью Codeception

Reading time8 min
Views46K
В разработке программного обеспечения написание автоматических тестов часто отодвигается на второй план более насущными проблемами. Так и в моем случае, код писать приходилось, а тесты к нему — нет. При этом давно хотелось попробовать модульное тестирование собственного кода, а тут под руку подвернулось поведение Yii2 ManyToMany Behavior, о котором уже писали на Хабре. Это поведение я сначала немного расширил, а затем решил собрать комплект тестов.

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

Далее мы рассмотрим настройку Codeception с модулем для Yii2 и создание тестов для поведения.
Узнать, как...
Total votes 15: ↑14 and ↓1+13
Comments12

JSONB запросы в PostgreSQL

Reading time7 min
Views282K
Ранее я писал, как включить поддержку jsonb в postgres/psycopg2. Сегодня экспериментировал с тем, как запрашивать данные в колонках типа JSON.
На эту тему есть документация, но мне было не совсем понятно, как работают различные операции:

CREATE TABLE json_test (
  id serial primary key,
  data jsonb
);

INSERT INTO json_test (data) VALUES 
  ('{}'),
  ('{"a": 1}'),
  ('{"a": 2, "b": ["c", "d"]}'),
  ('{"a": 1, "b": {"c": "d", "e": true}}'),
  ('{"b": 2}');

Читать дальше →
Total votes 34: ↑33 and ↓1+32
Comments12

TARS, сделай уровень frontend-рутины 0%

Reading time9 min
Views55K
image

Frontend с каждым днём становится сложнее. Задачи — объёмнее, пользовательский интерфейс — насыщеннее, HTML, CSS и Javascript — огромнее, а сон фронтендера — короче и беспокойнее. Необходимо грамотно структурировать код, выполнять множество рутинных задач (компиляция css- и js-препроцессоров, сборка спрайтов, подготовка и оптимизация изображений, минификация файлов и др). Если вы работаете в команде — это автоматически увеличивает сложность разработки. Чтобы решить эти проблемы, я создал TARS — сборщик html-вёрстки, основанный на gulpjs.
Уменьшить рутину
Total votes 41: ↑36 and ↓5+31
Comments44

Дайджест интересных материалов из мира веб-разработки и IT за последнюю неделю №153 (22 — 29 марта 2015)

Reading time4 min
Views35K
Предлагаем вашему вниманию подборку с ссылками на полезные ресурсы, интересные материалы и IT-новости. Сегодня в слегка сокращенном варианте.


Читать дальше →
Total votes 33: ↑29 and ↓4+25
Comments4

Сотрудники со стажем в компании более 2 лет зарабатывают на 50% меньше

Reading time1 min
Views243K
Журнал Forbes обратил внимание на интересную тему, о которой не принято говорить: зависимость зарплаты сотрудника от стажа работы в компании. Выясняется, что на максимальную зарплату могут рассчитывать вовсе не лояльные сотрудники, а совсем наоборот — те, кто часто меняет работу.

У этого явления существует несколько причин. Одна из них — кадровая политика большинства компаний, которая устанавливает потолок на максимальное повышение зарплаты сотрудника. В среднем, в 2013 году зарплаты внутри компаний повышались на 3%. Слабые сотрудники могут рассчитывать на прибавку 1,3%, а самые лучшие — на 4,5%, но не более того. Это примерно соответствует уровню инфляции (2,1% за прошлый год).

В то же время при смене работодателя средняя прибавка к зарплате составляет от 10% до 20%, а иногда и больше.
Читать дальше →
Total votes 152: ↑133 and ↓19+114
Comments305

50 действительно хороших инди игр

Reading time1 min
Views30K
Некоторое время назад здесь находился замечательный пост-перевод о 50 инди-играх, в которые действительно стоит сыграть. В настоящий момент он устарел, но ему на замену пришёл целый цикл постов об инди-играх — «Великолепная подборка инди-игр»:

Читать дальше →
Total votes 95: ↑90 and ↓5+85
Comments121

Yii 2.0. Релиз

Reading time9 min
Views90K
После трёх лет интенсивной разработки и почти 10000 коммитов более 300 авторов вышла стабильная версия PHP фреймворка Yii 2.0! Спасибо за поддержку и терпение!

Как вы, возможно, уже знаете, Yii 2.0 был переписан с нуля. Это решение было принято, так как мы хотели получить отличный PHP фреймворк, который сохранит простоту и расширяемость Yii и, в то же время, будет использовать свежие технологии и возможности, чтобы стать ещё лучше. Сегодня мы рады сообщить, что цель достигнута.

Немного полезных ссылок про Yii и Yii 2.0:



Далее мы рассмотрим самые интересные возможности новой версии. Если вы спешите попробовать фреймворк в деле, начните с чтения раздела руководства Getting Started.

Читать дальше →
Total votes 117: ↑108 and ↓9+99
Comments177

Бесперебойность (HA) для сервисов OpenStack MySQL + rabbitMQ

Reading time10 min
Views10K
Автор: Piotr Siwczak
Последняя статья Олега Гельбуха дала обзор различных аспектов бесперебойности в OpenStack. Все компоненты OpenStack разработаны с учетом бесперебойности, но платформа использует и внешние ресурсы, как, например, базу данных и систему обмена сообщениями. И это забота пользователя — развернуть эти внешние ресурсы для безотказной работы.

Очень важно помнить, что все ресурсы с фиксацией состояния в OpenStack используют систему обмена сообщениями и базу данных, а все остальные компоненты не хранят информацию о состоянии (за исключением Glance). База данных и система обмена сообщениями являются ключевыми для платформы OpenStack. В то время как система управления очередью позволяет нескольким компонентам обмениваться сообщениями, база данных хранит состояние кластера. Обе эти системы принимают участие в каждом запросе пользователя, как при отображении списка виртуальных объектов, так и при создании новой виртуальной машины.

По умолчанию для обмена сообщениями используется RabbitMQ, а база данных по умолчанию — MySQL. В отрасли известны надежные решения и по нашему опыту их достаточно для масштабирования даже в крупных установках. В теории подойдет любая база данных, поддерживающая SQLAlchemy, но большинство пользователей пользуются базой данных по умолчанию. Для обмена сообщениями трудно найти альтернативу RabbitMQ, хотя некоторые пользуются драйвером ZeroMQ для OpenStack.

Как в OpenStack работают сообщения и база данных



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

Пользователь отправляет свой запрос в OpenStack, взаимодействуя с компонентом nova-api. Nova-api обрабатывает запрос на создание экземпляра, вызывая функцию create_instance из API-интерфейса nova-compute. Функция делает следующее:
Читать дальше →
Total votes 16: ↑15 and ↓1+14
Comments5

Верстка like Metro UI

Reading time1 min
Views37K
В последнее время появилось довольно много инструментов для создания сайтов в духе Metro UI. К сожалению, лично у меня, использовать что-то из этого в реальных проектах не получилось: либо страдает качество и приходится вставлять «костыли», либо с качеством все нормально, но нет стилей для нужных компонентов приложения (например, нигде нет стилей для datepicker-а).



Я попробовал написать свое с блэкджеком и шлюхами. Сначала это был просто набор стилей для компонентов, которые были нужны мне в первую очередь. Cейчас все становится похожим на довольно большой CSS framework.

Я пишу об этом сюда, надеясь, что для кого-то мои наработки окажутся полезными, а я получу обратную связь.

Стили в архиве и документация лежат здесь: milk.ecm7.ru, есть .LESS и CSS версии.

Читать дальше →
Total votes 56: ↑47 and ↓9+38
Comments76

Устраняем ошибки при получении от пользователя массива вместо строки

Reading time2 min
Views15K
Недавно я заметил, что на многих сайтах сделанных на Yii Framework есть одна и та же ошибка:
Если в каком нибудь поле ввода в атрибуте name добавить квадратные скобки и отправить форму, то можно получить сообщение об ошибке, типа:
htmlspecialchars() expects parameter 1 to be string, array given
Иногда даже можно увидеть исходный код PHP файлов, если разработчик забыл убрать константу YII_DEBUG.

Эта ошибка присутствует и на крупных проектах и даже на самом yiiframework.com/search/?q%5b%5d=
Читать дальше →
Total votes 38: ↑26 and ↓12+14
Comments5

Каждому окружению своя favicon-ка

Reading time1 min
Views18K
Сделал изменения в коде, дебажишь и не понимаешь в чем дело — код поменял, а результат тот же. Чёрт побери, да я же отлаживаю на продакшене! Случалось такое с вами? Со мной несколько раз, сегодня вот опять. Мне это надоело и я придумал простой способ избежать таких досадных случаев.

Возможно этот трюк не заслуживает отдельного топика, большинство из вас все поймет из одной картинки:



Суть — для каждого окружения(dev, staging, prod, etc.) своя favicon-ка.

Как это сделать на примере Laravel (попиарю лишний раз этот прекрасный фреймворк):
Читать дальше →
Total votes 87: ↑66 and ↓21+45
Comments19

Ретро-игровой центр на Raspberry Pi

Reading time4 min
Views155K
Ну вот и наступили майские праздники, в которые можно расслабиться и отвлечься от дел.
Кто-то поехал на природу, жарить шашлыки, кто-то — копать картошку, а кто-то, как я, решил остаться дома и релаксировать. Но как сделать это с пользой? Не прибегая к загрузке мозга очередными мануалами? И тут мне на глаза попалась моя неприкаянная Raspberry Pi. А вкупе с ностальгическим и тёплым ламповым настроением у меня родилась идея: а можно ли из RPI сделать игровую систему? Вбив в Google, нашлось простое и очень доступное решение, с которым я и хочу с вами поделиться. Кому интересно – прошу под кат.



Читать дальше →
Total votes 59: ↑44 and ↓15+29
Comments11

Bootstrap Dropdown Menus Enhancement v3.1.1

Reading time2 min
Views27K
Около года назад, я создал расширения выпадающих меню для Bootstrap v2 (хабрапост). В связи с пасхальными праздниками наконец нашлось время обновить функционал до версии 3 (Bootstrap v3).
Список функций:
  • Добавлена поддержка подменю
  • radio и checkbox
  • позиционирование
  • bullet

Читать дальше →
Total votes 38: ↑37 and ↓1+36
Comments19

Дайджест интересных новостей и материалов из мира PHP № 36 (9 — 23 февраля 2014)

Reading time5 min
Views21K


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

Приятного чтения!
Читать дальше →
Total votes 72: ↑60 and ↓12+48
Comments32
1

Information

Rating
Does not participate
Location
Владивосток, Приморский край, Россия
Date of birth
Registered
Activity