Как стать автором
Обновить
27
0
Алексей @anonimizer_me

Пользователь

Отправить сообщение

Использование ActiveRecord от Yii в игре тайм менеджере

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

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

Напомню, что в проекте используется php(Yii), mysql и memcached. В проекте достаточно много сущностей, для каждой из которой есть своя модель, которая наследуется от CActiveRecord.

Хранятся файлы моделей следующим образом. В папке models создаем папку base. Когда генерируем модель через Gii, то указываем, что ее нужно положить в папку models/base и к имени класса добавляем Base. Затем создаем в models аналогичный класс без Base, который наследуется от базового класса и имеет в себе лишь метод model().

Кстати заранее скажу, что базовые модели наследуем не от CActiveRecord, а от ExtActiveRecord — расширяем CActiveRecord под наши нужды. Но об этом позже. Пока что разницы никакой.

Пример:
models/base/BaseUser.php — стандартный класс, который генерируется через Gii
models/User.php — класс, который наследуется от BaseUser и имеет в себе метод model()
	/**
	 * Returns the static model of the specified AR class.
	 * @param string $className active record class name.
	 * @return User the static model class
	 */
	public static function model($className=__CLASS__) {
		return parent::model($className);
	}
	



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

Не забываем добавить в конфиге 'application.models.base.*'.

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


Читать далее
Всего голосов 11: ↑9 и ↓2+7
Комментарии26

Отложенная обработка команд в социальной игре

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

Сегодня я хочу поделиться с вами решением задачи, с которой мы столкнулись при разработке социальной игры. Игровой клиент был написан на flash, а для back-end был выбран php. Игра относится к тайм-менеджмент играм.
Схема работы была выбрана следующая:
  1. игрок совершает действие на клиенте
  2. клиент проверяет возможность совершения действия
  3. отсылает команду на сервер
  4. сервер проверяет возможность совершения действия, выполняет команду, производя изменения в базе
  5. клиент уведомляется о том, что все ок или информируется об ошибке


Все работало отлично, пока не происходило резкое возрастание количества игроков.
Сначала начались тормоза со стороны php. Основная проблема данной реализации заключалась в том, что на каждое действие игрока дергается сервер, который производит довольно много вычислений по обсчету объектов на карте перед выполнением команды. Эта проблема была решена путем добавления дополнительных серверов с обработчиками php.
Потом мы уперлись в производительность mysql. Было слишком много запросов. Так как шардинг не был заложен в систему, то выкручивались как могли. Что-то перенесли в mongodb, где-то улучшили работу с кэшем.

Кстати, mongodb оказался не таким простым хранилищем, как может показаться на первый взгляд. Учитывая то, что у нас было включено шардирование и стояли правильные индексы, мы все равно словили там тормоза, с которыми не смогли разобраться на тот момент. Периодически просто высыпалась пачка запросов в log, которые вдруг затупили. Хотя через секунду те же запросы работали нормально при том же количестве запросов. Но это тема отдельного поста.


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

Какой же?
Всего голосов 30: ↑25 и ↓5+20
Комментарии28

Приведение к типам в Yii::app()->request

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

Хочу поделиться с вами небольшим решением проблемы, с которой столкнулся при переносе части данных проекта в mongodb.
Изначально у нас использовалась только Mysql и все параметры приходящие от клиента вполне себе позволяли получать данные из базы без каких-либо проблем.

<?php
   $id = Yii::app()->request->getParam('id', 0);
   $data = Data::getForId($id);
?>

А суть в том, что для mysql нет разницы [select * from data where id = 1] или [select * from data where id = '1'].
Но mongodb типы данных различает, по этому нельзя найти запись используя условие id == '1' если id в mongodb является числом.

посмотреть решение
Всего голосов 19: ↑11 и ↓8+3
Комментарии19

Видео по ремонту машины

Время на прочтение1 мин
Количество просмотров1.1K
Всем привет!
Решил вынести на ваш суд идею проекта, которая периодически всплывает у меня в голове.

Часто при возникновении проблем с машиной мы ищем помощи на форумах. Часто с аналогичной проблемой кто-то сталкивался и писал о ее решении. Иногда хорошие люди выкладывают фото отчет по устранению поломки.

Но есть одна проблема. Не всегда по фотографиям можно понять процесс ремонта. Что-то забыли сфотографировать, что-то сфотографированно с непонятного ракурса.

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

Что думаете, уважаемые хабраюзеры?
Всего голосов 81: ↑60 и ↓21+39
Комментарии75

Быстрая отправка screenshots

Время на прочтение1 мин
Количество просмотров6.8K
Здравствуйте хабравчане!
Не так давно обнаружил приятную возможность в Skype, которая позволят быстро и просто отправить screenshot.

Стандартно делаем снимок экрана или выбранного окна (Printscreen / Alt + Printscreen) и просто вставляем в окно чата Skype.

Вот что получается:
image

Жмем отправить, и Skype сам сохраняет изображение и начинает передачу.

UPD. Не работает в Linux версии
Всего голосов 224: ↑127 и ↓97+30
Комментарии84

Аудио игра «Devil's Tuning Fork»

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

Сегодня попалась замечательная игра, работа над которой ведется уже 6 месяцев.
Вот что пишет автор:
В ночь с пятницы 13–ой на субботу 14–ой мы вывели в свет новое игровое творение. Шесть месяцев назад мой университет собрал команду из студентов факультета Компьютерных Игр и поставил задачу: за шесть месяцев разработать и выпустить оригинальную игру для Independent Games Festival. Думали–думали и решили сделать игру, где игрок будет «видеть» через звук.

немного чтива и видео игры
Всего голосов 47: ↑37 и ↓10+27
Комментарии49

USB человечки

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

Если вы ищите флэшку для своих данных, обладающую необычным дизайном, то присмотритесь к USB Man.
USB Man — это флэшка объемом 1Gb (жаль, что не так много, как хотелось бы), напоминающая человечка из конструктора Lego, но имеющая другую голову (колпачок) и сделанная из металла.

Читать дальше →
Всего голосов 13: ↑9 и ↓4+5
Комментарии18

Преобразуем кровь в свет

Время на прочтение1 мин
Количество просмотров712
image
Что если цена потребляемой человеком энергии будет оцениваться для каждого индивидуально?

Средний американец потребляет 3383 КВч энергии в год. Это эквивалентно постоянному освещению 4 комнат в течении года. Простым щелчком выключателя мы можем управлять техникой 24 часа в сутки даже не задумываясь о том, что несет это для окружающей среды.

Для работы Blood Lamp достаточно отбить горлышко, растворить специальную таблетку и воспользоваться небольшим количеством собственной крови для получения небольшого свечения.

Создатель Blood Lamp рассчитывает донести до людей то, что нельзя быть такими расточительными с энергией и стоит переосмыслить её использование.

под катом ещё 3 фотографии
Всего голосов 69: ↑56 и ↓13+43
Комментарии91

Taba.ru и Ning.com — обзор двух интересных зверьков

Время на прочтение2 мин
Количество просмотров1.2K
Сегодня прочитал на Lenta.ru (ссылка на новость lenta.ru/news/2009/09/23/tabaru) статейку о новом для России сервисе – конструкторе социальных сетей Taba.ru. Но поговорить хочется не о нем, а о наметившейся, по утверждению разработчиков, тенденции развития социальных сетей. Они утверждают, что социальные сети якобы эволюционируют в сторону образования нишевых тематических сообществ, создания групп по интересам, а заполнение анкет, поиск одноклассников и коллег по работе отходит на второй план. Обоснованы ли такие громкие заявления?
читать далее
Всего голосов 6: ↑3 и ↓30
Комментарии7

Установить время выполнения консольной команды

Время на прочтение3 мин
Количество просмотров4.3K
Довелось однажды писать скрипт, который в процессе своей работы пробегал по списку видео файлов и для каждого запускал ffmpeg с ключом, позволяющим получить информацию о файле. Мне собственно требовалось время воспроизведения.

Все бы хорошо, да вот на одном файле ffmpeg подвисал и не думал завершаться, а в момент завершения отваливался и php скрипт без видимых на то причин.

После долгих поисков решения данной проблемы, был найден код, который после небольшой переделки я готов представить на ваш суд :)

подробности
Всего голосов 31: ↑27 и ↓4+23
Комментарии23

Романтика большой дороги

Время на прочтение2 мин
Количество просмотров620
Здравствуйте, друзья!
Вот уже несколько долгих лет длится ожидание проекта, некогда перевернувшего представление об отечественной игровой индустрии (а может и просто стоящего у ее истоков), показав, что и у нас могут делать игры интересные геймерам по всему миру. Нет, речь не о S.T.A.L.K.E.R. или Kings Bounty (хотя их вклад сложно переоценить). Я говорю о Hard Truck или как он больше известен простому «советскому» гамеру – «Дальнобойщики». Сейчас речь идет уже о третьей части серии, которая, как это ни странно, носит гордое название «Дальнобойщики 3: Покорение Америки» у нас в России и Rig’n’Roll зарубежом.
Поехали!
Всего голосов 56: ↑40 и ↓16+24
Комментарии85

Qip без ведома пользователя стал вести микроблог

Время на прочтение1 мин
Количество просмотров2.3K
Всем привет!
Сегодня установил x-status в Qip, а вечером друзья стали мне писать о том, что им на почту пришли сообщения следующего вида

Вы получили это письмо, потому что Ваши знакомые написали что-то на проекте mblogi.qip.ru (ссылка на управление Вашей подпиской находится в конце письма).

В 10:21 Aleksey Korzhov: сегодня день радио!

mblogi.qip.ru/msg/6719604

Ответить на сообщение: mblogi.qip.ru/msg/6719604


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

Кто ещё столкнулся с подобной штукой?

UPD
Мне конечно нравится пользоваться Qip'ом, но если и дальше так пойдет, то я посмотрю в сторону миранды.

UPD2
Перенес в блог информационная безопасность
Всего голосов 206: ↑178 и ↓28+150
Комментарии310

Раскрась свой Gmail

Время на прочтение1 мин
Количество просмотров359
Google радует нас с каждым днем все больше и больше, вводя новый функционал в свои сервисы.
Так вот сегодня заметил, что теперь в gmail на странице выбора темы можно самому задать все цвета для интерфейса.
Заходим в настройки -> темы
Жмем на «Выберите собственные цвета»
Image Hosted by pixs.ru

и затем настраиваем, как душе угодно :)

Image Hosted by pixs.ru
Всего голосов 34: ↑26 и ↓8+18
Комментарии10

Обновление интерфейса Gmail

Время на прочтение1 мин
Количество просмотров388
Пока AOL ведет войну с альтернативными клиентами, компания Google совершенствует свои сервисы.
Так сегодня стало заметно приятное изменение интерфейса Gmail.
В основном оно связанно с ярлыками.
Теперь навешивать/снимать ярлыки стало проще. Так же появилась функция позволяющая сразу переместить письмо в «папку»(присваивается ярлык выбранный вами и снимается ярлык «Входящие»)


UPD
запись в оффициальном блоге
gmailblog.blogspot.com/2009/02/new-ways-to-label-with-move-to-and-auto.html
Всего голосов 25: ↑18 и ↓7+11
Комментарии19

«Безопасность» ВКонтакте

Время на прочтение2 мин
Количество просмотров1.1K
Вот такой текст нашёл сегодня в новостях на сайте вконтакте
(курсивом вставил свои комментарии)

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

При попытке загрузки вредоносной программы Вы будете предупреждены два раза: первое предупреждение Вы получите от Контакта, второе — от операционной системы.
операционная система начнёт жутко тормозить и глючить, а потом выдаст ошибку, что пора бы активироваться!
Обратите внимание, что подобные ссылки Вы можете получить по любым видам связи — по электронной почте, по ICQ, через чаты и форумы.
и даже из космоса! По этому обмотайте голову фольгой

далее...
Всего голосов 25: ↑2 и ↓23-21
Комментарии9

Отвлечемся немного от IT

Время на прочтение1 мин
Количество просмотров458
Все вы, наверное, уже заметили, что наступает лето, а где-то уже наступило.
Так о чём это нам говорит? А говорит это нам о том, что пора доставать велосипеды, ролики и другую технику и начинать отдыхать после зимних застоев :) Хотя некоторые и зимой катаются на лыжах и т.п.
Так вот хотелось узнать кто среди Хабрачан чем занимается.
Лично я катаюсь на велосипеде за городом. Стараюсь 100 и более км за раз. Сегодня открыл летний сезон и по этому не шибко много — всего 50км.
Всего голосов 11: ↑2 и ↓9-7
Комментарии3

Шаблонизатор на php

Время на прочтение5 мин
Количество просмотров9.1K
Вообще писать особо не умею, обычно выходит только код, но постараюсь :)
Вот не прижилось во мне свойство использовать чужые готовые решения при разработке сайтов и по этому многое пишу сам, возможно по аналогии, но зато с полным пониманием и надеждой на то, что в будущем смогу разобраться в этом коде. Как-то получил вопрос мол зачем пишешь свой движок если есть куча готовых, бери и модернизируй для своей цели: подключай модули, настраивай и забивай бд. Ответить по сути не смог, но идею передал – нравится мне кодить да и вообще разбираться в новом.
Ну собственно о чём я. В очередной переделке своего движка решил уже написать что-то вроде шаблонизатора. Раньше был вариант, но настолько не удобный, что приходилось много править, за многим следить.

Почитал статьи на эту тему и как-то ничего нового не нашёл, кроме одной реализации.
Читать дальше →
Всего голосов 20: ↑9 и ↓11-2
Комментарии44

Информация

В рейтинге
Не участвует
Откуда
Новосибирская обл., Россия
Дата рождения
Зарегистрирован
Активность