Как стать автором
Обновить
-1
0
Дикусар Владимир @vovich

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

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

Через тернии в маркет

Время на прочтение8 мин
Количество просмотров24K
image

Хочу поделиться опытом разработки приложения на Windows Phone 7.5, миграции его на Windows Phone 8, и что я думаю о перспективах в целом. Информация будет интересна в первую очередь начинающим разработчикам, так как сам я только недавно перешел с web разработки на мобильную и опыта у меня еще не очень много.

Читать дальше →
Всего голосов 59: ↑53 и ↓6+47
Комментарии45

Выбираем предыдущую и следующую запись зная id

Время на прочтение3 мин
Количество просмотров20K
Столкнулся недавно с задачей показа кнопок [ВПЕРЕД] [НАЗАД] на странице просмотра. Но сложность задачи в том, что сортировка может быть по произвольному полю таблицы.

Постановка задачи:

CREATE TABLE `contacts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name_prefix` varchar(50) DEFAULT NULL,
`name` varchar(100) DEFAULT NULL,
`infix` varchar(100) DEFAULT NULL,
`surname` varchar(100) NOT NULL,
`primary_email` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

Для наглядности объясню где это все работает:
есть две страницы, работающие с этой таблицей:
— index, на ней отображаются все записи из таблицы contacts, есть фильтр и есть сортировка по столбцам
— view, просмотр текущей записи из таблицы contacts. На это странице есть кнопки [ВПЕРЕД] [НАЗАД], с учетом фильтра и сортировки заданной на странице index;
Трудность возникла в этих двух кнопках.
решение . . .
Всего голосов 25: ↑14 и ↓11+3
Комментарии39

Подсчет количества событий календаря в каждом месяце года

Время на прочтение4 мин
Количество просмотров4.7K
Постановка задачи:
вывести количество событий (events) каждого месяца года.

Каждое событие имеет два поля
— start_date — дата начала события
— end_date — дата завершения события

Структура таблички с событиями календаря:
CREATE TABLE `events` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `start_date` date default NULL,
  `end_date` date default NULL,
  `created` datetime default NULL,
  `modified` datetime default NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8


Читать дальше →
Всего голосов 25: ↑13 и ↓12+1
Комментарии47

Как построить сектор на карте Google Maps?

Время на прочтение2 мин
Количество просмотров2.3K
Стала задача построить сектор на карте Google maps (GM). Насколько известно мне, это возможно сделать только при помощи прямых. http://maps.forum.nu/ вот тут есть примеры как строить окружность, но мне это немного неподходит. Так как окружность строится по следующему принципу: вычисляются координаты произвольной точки на окружности по формулам:
Читать дальше →
Всего голосов 3: ↑2 и ↓1+1
Комментарии1

Cakephp HABTM автосоздание моделей

Время на прочтение2 мин
Количество просмотров578
В кейке появилась такая неприятная штука как uto-create a model.
С одной стороны это конечно полезно, но с другой стороны очень мешает жить.
К примеру ваша связывающая табличка должна выполнять не только функцию связи но и нести некую функциональсть.
Такой неприятный случай как раз произошел у меня. проект был написан на бетта версии кейка и теперь стала задача поставить релиз.
Разберем на примере что же происходит.

пусть у нас есть три таблички

— users
список юзеров;

— teams
команды (ну например футбольные команды )

— teammates
табличка, связывающая юзеров и команды.
кроме основных полей id, user_id, team_id в ней будут дополнительные поля,
к примеру такие как имя юзера в команде, его номер, дата добаления юзера в команду и флаг удаления из команды.

На каждую табличку мы создаем соответствующую модель: User, Team, Teammate.
Теперь описываем связи для модели Team
var $hasAndBelongsToMany = array(
'User' => array('className' => 'User',
'joinTable' => 'teammates',
'foreignKey' => 'team_id',
'associationForeignKey' => 'user_id',
'unique' => true,
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
'deleteQuery' => '',
'insertQuery' => ''
)
);
для модели Teammate
var $belongsTo = array(
'User' => array('className' => 'User',
'foreignKey' => 'user_id',
'conditions' => '',
'fields' => '',
'order' => ''
),
'Team' => array('className' => 'Team',
'foreignKey' => 'team_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
кроме того, в моделе Teammate мы создадим несколько методов, для работы с ней. ну к примеру test() и test1()
Теперь в контроллере TeamsController подключим модель Teammate и в любом action сделаем pr($this->Teammate).
Увидим, что наша модель Teammate обладает не теми свойствами которыми мы ее наделяли.
Я довольно много убил времени, пока не понял что же происходит. А происходит следующее:
В релиз кейка добавили uto-create a model (http://book.cakephp.org/view/83/hasAndBelongsToMany-HABTM)
Теперь умный кейк видит что есть HABTM и по joinTable создает модель (в нашем случае Teammate) и перетирает существующую,
то что такая модель уже есть его почему-то совсем не волнует.
Затем я увидел параметр with для HABTM — Defines the name of the model for the join table.
By default CakePHP will auto-create a model for you.
Using the example above it would be called RecipesTag.
By using this key you can override this default name.
The join table model can be used just like any «regular» model to access the join table directly.
Хмм, хорошо, подумал я. А не использовать ли мне этот парметр и написал 'with'=>'TeamsUsers', но кейк решил, что модель есть,
а таблички нету, а то, что табличка описана в joinTable его опять же не волнует.
На данный момент я нашел единственный выход:
переименовать таблицу teammates в таблицу teams_users, Teammate прописать $useTable = «teams_users»;, параметр 'joinTable' => 'teams_users'

если у кого-то есть другие идеи поделитесь, как выключить автосоздание моделей ненашел.
Всего голосов 11: ↑0 и ↓11-11
Комментарии3

Система контроля доступа на cakePHP.

Время на прочтение9 мин
Количество просмотров1K
Как вы знаете существуют различные системы контроля доступа.
Некторые из них простые, реализованные только на основе сессий, другие же сложные, такие как ACL. Каждая из них имеет свои плюсы и минусы. Простые системы легки в понимании и в обращении, но при увеличении количества привелегий и необходимости их динамического изменения будут возникать и соотвествующие трудности, ACL же довольно громоздка, не столь гибка и сложна в понимании. Долгое время использовав обе системы, пришел к выводу, что нужно разработать свою систему контроля доступом, которая бы имела следующие возможности:
  • простота понимания и простота исполнения
  • динамическое сосздание групп\ролей и перемещение юзера по ролям\группам
  • юзер может состоять в любом количестве групп\ролей
  • легкое, быстрое и понятное изменение доступа
  • минимизация кода при использовании системы
  • мимнимизация размера таблиц связанных с контролем доступа
  • минимизация количества запросов к БД


Читая существующие топики о системах разделения доступа часто натыкался на коментарии: «Зачем городить огород, если есть ACL». Сразу же отвечу чем меня не устраивает ACL.
  • сложность понимания
  • юзер не может быть в нескольких группах одновременно
  • при необходимости ограничения доступа отдельныи юзерам сильно раздуваются таблички (необходимо хранить id каждого юзера )
  • сложность с перемещением юзеров по группам
  • отсутсвие кеширования
  • необходимость делать визуализацию для работы с группами и правами
  • своя тельняжка ближе к телу (в том смысле, что свой код легче потдерживать)


Читать дальше →
Всего голосов 15: ↑11 и ↓4+7
Комментарии10

Информация

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