• Одновременное проигрывание нескольких HTML5 audio. Как и почему?

    Aleks_ja
    @Aleks_ja
    А ещё посмотрите в firebug во вкладке net что там скачивается. Ну и ещё отключить кэш бравзера. Может оно то работает то не работает из-за этого.
  • Исключение определённых ID с условием ИЛИ работает некорректно?

    Aleks_ja
    @Aleks_ja
    Конечно, сейчас поздно и я могу ошибаться, но, походу, всё просто — где жанр не равен такому-то, а также не равен такому-то.

    А в изначальном запросе — он либо не равен такому-то либо не равен такому-то. Т.е. у одного жанра одна айдишка, так что он по-любахе не будет одновременно и 10 и 12ым. Т.е. могли бы и не писать where совсем.
  • MySQL триггер. Возможно ли динамически получить значения OLD и NEW?

    Aleks_ja
    @Aleks_ja Автор вопроса
    Скорее всего — не поняли. Хотелось бы не явно NEW.col1, NEW.col2 указывать, а в цикле их перебирать. Т.е., другими словами, нам всё равно как называется колонка и мы имена их вытягиваем динамически. Т.е. используем их динамически в запросе.

    Получить названия всех колонок — вышло, а вот использовать эти названия в запросе — не получилось.
  • Стоит ли открыть исходный код ORM для PHP?

    Aleks_ja
    @Aleks_ja Автор вопроса
    В большинстве реализаций Active Record для php — громадный косяк — навплевательство на ООП, иногда с формулировкой «чистый ООП не бывает, он неудобен, это прошлый век». В таких реализациях — «Объект класса юзер может содержать несколько юзеров, а может одного».
  • Стоит ли открыть исходный код ORM для PHP?

    Aleks_ja
    @Aleks_ja Автор вопроса
    Есть пользователь, у него есть имэйл, имя, фамилия, страна проживания. У страны есть флаг, 3х и 2х буквенный код, валюта. Из этого и исходили при проектировании.

    «один класс, пытающийся сделать всё и сразу» — помоему здесь неуместно, либо вы что-то недоговариваете )
  • Стоит ли открыть исходный код ORM для PHP?

    Aleks_ja
    @Aleks_ja Автор вопроса
    Про «статические методы — это не ООП, а просто процедуры» — это спасибо. Они здесь так и используются.

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

    Последнее предложение читать не буду, вы ведь также не всё прочитали (судя по вашему комменту)?
  • Стоит ли открыть исходный код ORM для PHP?

    Aleks_ja
    @Aleks_ja Автор вопроса
    А в самом классе идёт просто вызов из парента.

    В самых первых реализациях getByCondition — был пабликом, что посути и есть ваш find. Однако от этого избавились и сделали так, чтобы обязательно вызов размещался в самом классе. Здесь упор на архитектуру.

    В вашем случае было бы так:

    class User extends ActiveRecord{
        protected $_table = 'users';
        public function getById($userId){
              return User::find( array('id'=>3) );
        }
    }
    

    Остальные параметры — нужны из-за отсутствия в PHP5.2 Late Static Binding. Т.е. мы не сможем узнать откуда вызвался «find» и соответственно «new User» не сможем сделать. Но разве сложно написать __CLASS__ параметром? Причём один раз, т.к. под получение пользователя по айдишнику выделен метод.

    User::find как у вас написано — никогда подсказок нам не выдаст, если только не будет описана переменная $user каждый раз.

    В плане целостности — всё что связано с подгребанием юзера находится внутри юзера.

    И, наверняка, были ещё веские причины почему занесли именно внутрь, только это было давно. Возможно, в том числе и для того, чтобы новички не смогли намутить непонятно чего.

    Вы делаете упор на работу с БД. У нас упор на ООП. Чётко получаем юзера с ним что-то делаем, передаём его куда-нибудь, манипулируем им. Если нужно — коллекция юзеров, объединённая в UsersGroup — хотим манипулируем всей группой, хотим перебираем каждого юзера и что-нибудь делаем с ними.
  • Стоит ли открыть исходный код ORM для PHP?

    Aleks_ja
    @Aleks_ja Автор вопроса
    В пропеле — нужно составлять XML, генерить классы. Потом для доставания объектов и коллекций объектов используются эти сгенеренные классы. Причём коллекция — это какой-то базвый элемент.

    Т.е. например, у нас можно сделать так — $user->getDiscounts()->getBest(). Т.е. getDiscounts() — вернёт DiscountsGroup в котором есть метод getBest(), который вернёт, к примеру, самую большую скидку (объект класса Discount), если у пользователя их несколько и они не суммируются.
  • Стоит ли открыть исходный код ORM для PHP?

    Aleks_ja
    @Aleks_ja Автор вопроса
    При такой записи скорее всего PHP5.3 и выше (Late Static Binding). Если убрать поддержку php5.2 — синтаксис также сократится, но оно совсем не критично.

    Но самое важное — у вас вперемешку работа с сущностью и коллекцией сущностей?
  • Стоит ли открыть исходный код ORM для PHP?

    Aleks_ja
    @Aleks_ja Автор вопроса
    Yii, первый доктрин и абсолютное большинство остальных ОРМ для PHP на данный момент — перемешивание работы с одной сущностью и несколькими. Объект класса юзер может содержать несколько юзеров, а может одного.

    Doctrine 2 — работа с данными отделена от объекта.

    Здесь же главный упор делался на то как использовать, ООП.

    Кроме всего можно экстендить классы. Т.е. к примеру, class SuperUser extends User. (User будетe экстендить DataObject и имплементить интерфейс специальный). Тогда если мы сделаем User::getById() и т.п. — может вернуть объект класса SuperUser.
  • Стоит ли открыть исходный код ORM для PHP?

    Aleks_ja
    @Aleks_ja Автор вопроса
    Спасибо за развёрнутый комментарий.

    0) User::create() — это лишь пример, _getByCondition ведь принимает массив. Если много параметров — можно передавать массив, если есть дефолтные значения в БД (например, дата) — её передавать не нужно. Либо её можно потом засетить методом set()

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

    2) производительность считали. всё чики-пуки. Конечно mysql_query быстрее. Самый загруженный сайт, на котором работает ОРМ — 20тыс просмотров страниц на фронте и 500тыс запросов к API в сутки, причём сложная логика и всё летает. По контракту обеспечивали 50 запросов в секунду в среднем за день. Точные бенчмарки где-то валяются.

    3) шардинг — один раз делали на 2 бд. думаю, что не добавит лишних проблем, а скорее поможет.
  • Стоит ли открыть исходный код ORM для PHP?

    Aleks_ja
    @Aleks_ja Автор вопроса
    Жирным выделил для тех, кто будет читать по диагонали и к тому же — новичёк :) чтобы не было лишних вопросов.

    Основные идеи вот:

    как было бы удобно, чтобы именно ООП, без миксования работы с одной сущностью и коллекциями сущностей, ну и без дополнительных структур для хранения данных. И… без оглядки на какие-либо паттерны.
  • MySQL: прерывание скрипта Alter Table (что-то плохое может произойти)?

    Aleks_ja
    @Aleks_ja Автор вопроса
    Пока писал коммент, произошло чудо. Несколько часов назад коннект по SSH слетел, а сейчас MySQL, видимо, довыполнил текущий ALTER TABLE, и завершил себя сам :)
  • У кого-нибудь получилось проксировать Socket.io через nginx?

    Aleks_ja
    @Aleks_ja Автор вопроса
    Разговор вернулся в нужное русло :)

    Про вторую сетевуху я также думал, однако, как-то ведь работают виртуалки (VPS)? И, наверняка, тот, кто шарит может сделать это и без виртуалок (либо подсказать как это делается).
  • У кого-нибудь получилось проксировать Socket.io через nginx?

    Aleks_ja
    @Aleks_ja Автор вопроса
    Тогда сделаем вид, что sannis, ничего не писал, либо не правильно понял задачу.

    Если у нас domain.com:80 (IP1) и domain2.com:80 (IP2), но оба айпишника ведут на один физический сервер?
  • У кого-нибудь получилось проксировать Socket.io через nginx?

    Aleks_ja
    @Aleks_ja Автор вопроса
    Интересует одинаковый (или разный) IP для 100500 хостов, чтобы можно было каждому иметь свой независимый внутренний айпишник и 80 порт. Чтобы нджинкс и mydomain.com шёл на 127.0.0.1:80, а ws.mydomain.com шёл на 127.0.0.2:80. В этих технологиях я вообще не разбираюсь, но…

    Надежда появилась, когда yurtaev написал: «А как на счет поддомена под сокеты типа ws.doamin.com:80?»

    А потом sannis ответил, что второй айпишник не нужен.