среда, 28 января 2015 г.

Joomla 3: управление пользователями через API (создание пользователя Joomla)

Задача

Возникла задача программного управления пользователями Joomla 3.

Решение

Начал изучать API Joomla + изучил ряд материалов по теме

В результате сделал набор тестовых файлов работы с пользователями


Архив содержит такие файлы

_joomla_inizialize.php - инициализация окружения Joomla
create_user.php - создание пользователя Joomla
delete_user.php - удаление пользователя Joomla
get_current_user.php - получение текущего пользователя Joomla
get_user_bycode.php - получение пользователя Joomla по коду
program_authorisation_user.php - программная авторизация пользователя Joomla


Материалы по теме


                Используем API CMS Joomla!
                http://joomfans.com/faq/ispolzuem-api-cms-joomla.html

                Two ways to add Joomla users using your custom code
                http://www.diademblogs.com/content-management-systems/two-ways-to-add-joomla-users-using-your-custom-code

                Accessing the current user object
                https://docs.joomla.org/Accessing_the_current_user_object​

                JFactory/getUser
                https://docs.joomla.org/JFactory/getUser

                JUser (joomla api)
                https://api.joomla.org/cms-3/classes/JUser.html#method_save

                How can I create a new Joomla user account from within a script?
                http://stackoverflow.com/questions/1904809/how-can-i-create-a-new-joomla-user-account-from-within-a-script

                JFactory/getUser - documentation
                https://docs.joomla.org/JFactory/getUser

                Использование метода getUser() в Joomla
                http://poleshuk.ru/ispolzovanie-metoda-getuser-v-joomla/

                Функция програмной авторизации в Joomla
                http://stackoverflow.com/questions/12959065/joomla-login-function

                Работа с обьектами базы Joomla
                http://stackoverflow.com/questions/21240910/how-to-work-with-joomla-database-object

                Программная авторизация в Joomla 2.5+
                http://inet-reklama.com/blog/joomla/programmnaya-avtorizatsiya-v-joomla-2-5

пятница, 23 января 2015 г.

MS SQL: Создание нового последовательного Guid в базе данных

База данных: MS SQL 2008
Возникла потребность при создании записи в таблице генерировать новый последовательный Guid. Причем генерировать на уровне базы данных.

К сожалению, newsequentialid() имеет ограничения: её можно использовать только в качетсве default-значения колонки. Соответственно пришлось прибегнуь к обходному маневру: создать свою хранимую процедуру

CREATE PROCEDURE dbo.GenerateNewSequentialId(
  @NewId uniqueidentifier output
)
AS 
BEGIN
  declare @returnid table (id uniqueidentifier default newsequentialid(), fakefield int)

  INSERT INTO @returnid(fakefield)
  VALUES(1)
    
  set @NewId =  (select top 1 id from @returnid)
END


Статьи по теме
MS SQL использование GUID как первичных ключей (Primary key)


четверг, 22 января 2015 г.

Что меня смущает в SCRUM

Перечитал несколько книг по методологиям SCRUM и Agile.
Методологии нравятся и я их стараюсь применять.
Какие-то применяю (парная разработка, пользовательские истории, итерационная разработка)
Какие-то принимаю, но еще не научился "правильно готовить" (test driven development, непрерывная интеграция)

Но есть 2 вещи, которые меня смущают

1. Ежедневные собрания
Это идет в разрез с большинством книг для управленца, где говорится:
собрания - способ потратить время, и не брать на себя ответственность,
чем меньше собраний - тем лучше.
А в скраме рекомендуются ежедневные собрания :(

2. Отсутствие персональной ответственности
Везде в книгах пишется: "за код отвечает команда".
А как тогда мотивировать выдающихся людей, как выяснять кто тянет команду вверх, а кто вниз?
С кого спрашивать за допущенные ошибки?
В книгах по менеджменту обычно говорится: "нет ответственного, считай что задача не будет выполнена"

Книги
Джонатан Расмуссон "Гибкое управление IT-проектам"
Майк Кон "Scrum. Гибкая разработка ПО"

Ссылки по теме

Scrum в одной картинке
https://image-store.slidesharecdn.com/671c33ed-13c8-41b3-a768-91e785debcfd-original.jpeg

Отзыв о книге: Джонатан Расмуссон "Гибкое управление IT-проектам"

Гибкое управление IT-проектами. Руководство для настоящих самураев от Расмуссон Джонатан - скачайте цифровую книгу Гибкое управление IT-проектами. Руководство для настоящих самураев в fb2, txt, pdf, epub, mobi и других форматах | ISBN 978-5-459-01205-7Гибкое управление IT-проектами. Руководство для настоящих самураев от Расмуссон Джонатан - скачайте цифровую книгу Гибкое управление IT-проектами. Руководство для настоящих самураев в fb2, txt, pdf, epub, mobi и других форматах | ISBN 978-5-459-01205-7

Прочитал достаточно быстро - понравилась. Пока, в моем рейтинге, первое место в номинации  "введение в Agile".

Автор прошелся по разделам Agile как организационным
  • подготовка проекта, планирование
  • работа на основе пользовательских историй
  • принципы общения с клиентами
  • управление итерациями
  • оформление рабочего пространства

так и практическим

  • тестирование
  • рефакторинг
  • интеграция


Книга вызывает ощущение "написано человеком для людей".

Мысли изложены доступно и, главное, идеи донесены ясно, а не запутаны между кучей ненужных абзацев.
Если кто-то хочет углубиться - в конце многих технических глав (по тестированию, рефакторингу, непрерывной интеграции) даны ссылки на более подробные книги/ресурсы по каждой теме.

Примеры в книге на C#, но их минимум и они простейшие. Это позволило книге сохранить универсальность и независимость от языка, поэтому она будет полезна как разработчикам на .NET так и на Java.

Автор видимо увлекается восточной философией, поэтому в книге некоторые мысли изложены в виде вставок "беседы с сенсеем". Также много отсылок к миру конг-фу, самураев и ниндзей. Это позволило материалу стать более "живым". Меня совсем не раздражало.

Читалась книга быстро и легко. Осилил за полторы недели неспешного чтения.

Цитата
Не забудьте о том, что смысл заключается не в том, чтобы быть гибким, а в том, чтобы писать высококлассные программы и оказывать клиенту безупречные услуги.

Моя оценка: 4 из 5
Для кого: разработчики практикующие или желающие практиковать Agile, менеджеры проектов, начинающие Agile-мастера
Стоит ли читать: да

Ссылки
Книга на Озоне
Книга на Литресе

пятница, 16 января 2015 г.

CHM файлы в Windows 8 (64 бит): не отображается содержимое

Ситуация

Закачал старые файлы помощи в формате CHM. Пытаюсь открыть в Windows 8 (64 бит).

Выскакивает предупреждение что файл мол потенциально опасный.

Потом файл открывается, но содержимого не видно



Решение

Просто снял галочку "Показывать это сообщение" на окне с предупреждением о потенциально опасном содержимом.

Ссылки по теме


Windows 8 64bit can't open chm files
http://answers.microsoft.com/en-us/windows/forum/windows_8-files/windows-8-64bit-cant-open-chm-files/7dec5d51-f621-4753-ab13-ea3b59a07cb8

Read your old CHM files from network storage on Windows 8
http://tenbulls.co.uk/2014/02/11/read-your-old-chm-files-from-network-storage-on-windows-8/

Opening a CHM file produces: “navigation to the webpage was canceled”
http://stackoverflow.com/questions/11438634/opening-a-chm-file-produces-navigation-to-the-webpage-was-canceled


вторник, 6 января 2015 г.

Сохранение знаний о новых технологиях

Часто в проектах приходится применять новые технологии (модули/плагины/компоненеты/библиотеки),
чтобы он их не терять, рекомендую оставлять на корпортаивном портале оставлять заметку, освещающую 2 вопроса:
где скачать, с чего начать

тут в общем случае будет 1. ссылка на скачивание и 2. ссылка на обучающие материалы.

Потом, если технология приживется, можно будет расширять статьи, но с этих 2-х пунктов вполне можно стартовать.

Распределенные вычисления

Нашел несколько ссылок. сохранил здесь

Распределенные вычисления
Эх, ухнем! Распределенные вычисления вчера и сегодня
http://habrahabr.ru/company/intel/blog/165585/

продай время процессора и заработай
http://cloud.mql5.com/ru

От себя добавлю.
Ради интереса попробовал установить программу расчетов с cloud.mql5.ru.
Компьютер грузит на полную т.е. на рабочем компьютере использовать маловероятно.

Шаблон учетной системы: Настройки "по умолчанию"

(ВНИМАНИЕ! статья в работе! обратная связь принимается)


У настроек должно быть значение "по умолчанию". это должно обеспечить
возмоность использовать настройки более высокого уровня

Шаблон учетной системы: Удаление документов

(ВНИМАНИЕ! статья в работе! Обратная связь принимается)

Как удалять документы в учетной системе?
Или вопрос в общем виде: как удалять ОБЪЕКТЫ в учетной системе?

Обычный ответ: SQL-команда delete.

Но если вы делаете долгоживущую учетную систему, рекомендую задуматься о мягком удалении документов.

Суть: не давать обычному пользователю жестко удалить объект из системы.
Вместо удаления объект помечается удаленным.

Техническим языком можно описать так: у объекта добавляется реквизит: "удален".
Удаление документ интерпретируется как изменение объекта, а именно установка реквизита "удален"

Этот принцип реализован в 1С.

Какие объекты удалять мягко

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

О справочниках и документах см. в статье Шаблон учетной системы: основные виды объектов

Преимущества

В системе хранятся все объекты. Т.е. вы всегда сможете восстановить историю: кто удалял документ. Это основное преимущество больше относится к потребностям клиента/бизнеса, а не разработки, но бизнесу оно бывает очень важно и, если заложить мягкое удаление в архитектуру системы, вы сэкономите много времени в будущем.

Накладные расходы


Дополнительное поле
Во всех объектах системы, которые вы захотите мягко удалять, нужно будет внедрять признак удаления. Облегчить эту задачу можно с использованием базового объекта.
Эта методика описана в статье
Шаблон Учетной системы в БД: Наследование в базе

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

Ориентировочный вид команды:

update (имя_объекта) set IsDeleted = 1

Скрытие удаленных объектов в выборках
Вам нужно отслеживать, чтобы в выборках по умолчанию не было удаленных объектов.



Шаблон Учетной системы в БД: Наследование в базе

(Внимание! статья находится в процессе написания)

В цикл статей Шаблон Учетной системы:

Тема
наследование в базе

Обычно в учетных системах возникает 2 вида основных объектов

  •   справочник
  •   документ

идея такая:

в ключевых объектах существует ряд реквизитов, общих для всех объектов системы это
  • Дата создания
  • Автор
  • Дата последнего изменения
  • Последний изменивший
  • Признак удаления
Для справочников обычно выделяются такие поля
  • код
  • название
Для документов список общих полей такой
  • дата/время операции
  • номер документа
  • состояние (отношение к проведению)
Если позволяют возможности БД  я бы рекомендовал использовать общую таблицу типа "Системный объект" или "Базовый объект" в которой дублировать записи о любом объекте системы.

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

Тема использования уникальных идентификаторов применительно к MS SQL раскрыта в статье
MS SQL использование GUID как первичных ключей (Primary key)

UPD

ПРОБЛЕМА ВИРТУАЛЬНОГО НАСЛЕДОВАНИЯ!


Все хорошо звучало в теории.

Когда начал реализовывать систему на практике столкнулся с такой проблемой:

Суть проблемы: СУБД ничего не знает о выдуманном нами наследовании :(

Детали

Есть 2 таблицы объект (к примеру заказ: DocOrder) и таблица предок (BaseObject).
Объект связан с предком связью 1 к 1 (первичный ключ в DocOrder = первичный ключ в BaseObject)
Общие поля объектов находятся в BaseObject. в общих полях в частности есть поле "изменивший пользователь".
И теперь на триггере объекта DocOrder не могу повесить проверку контроля прав. т.к. триггер срабатывает до появления записи в таблице-предке BaseObject с общими полями.

Не нашел пока элегантного способа решения этого вопроса.
А это неудобство сводит на нет преимущества новой модели.

Отзыв о книге: Райан Бенедетти "Изучаем работу с jQuery" (серия "Head First")

Книга "Изучаем работу с jQuery" Р. Бенедетти, Р. КрэнлиКнига "Изучаем работу с jQuery" Р. Бенедетти, Р. Крэнли (на Озоне)
Книга "Изучаем работу с jQuery" Р. Бенедетти, Р. Крэнли (на Литресе)




Простая книга для начинающих. Думаю - неплохой старт для изучения jQuery. Читается быстро (я осилил за неделю), понимается легко.

Принципиально понравился подход с оформлением издательства HeadFirst: код и рисунки прямо по тексту. Врезки прямо в исходниках.

Обратная сторона медали - упрощенная подача материала. Простіе примеры.

Рекомендую новичкам для вхождения в тему или более опытным для систематизаци знаний.

Краткое описание

    место jQuery в триединстве: HTML-CSS-JAVASCRIPT
    По сути утилитная библиотека в двух словах её можно описать как "выбирай и действуй"


    ВЫБОР

        Главная функция
        jQuery() => $()

        $('id|класс|хтмл тег в css нотации' или элменеты страницы)

        $(document).ready(function(){
        })

        $(this) - текущий элемент

        методы для обхода дерева DOM.

    ДЕЙСТВИЯ

        визуальные (css: сдвиг, прозрачность, изменение размеров)
        события на действия объектов
        Ajax-вызовы
        работа с jSON


    + расширяем jQuery UI

        это
          + элементы (календари, попапы, таб-шиты, аккордеоны, бегунки, и др.)
          + расширенная анимация
          + локализация и стилизация


Главы книги

    1. Знакомство с jQuery
    2. Селекторы и методы
    3. События и функции
    4. Операции со структурой страниц
    5. jQuery эффекты и анимация
    6. jQuery и JavaScript
    7. Пользовательские функции для пользовтаельских эффектов
    8. jQuery и Ajax
    9. Данные JSON
    10. jQuery UI
    11. jQuery и API

Моя оценка: 4 из 5
Стоит ли читать: да, если вы начинаете знакомство с jQuery

Ссылки

Книга "Изучаем работу с jQuery" Р. Бенедетти, Р. КрэнлиКнига "Изучаем работу с jQuery" Р. Бенедетти, Р. Крэнли (на Озоне)
Книга "Изучаем работу с jQuery" Р. Бенедетти, Р. Крэнли (на Литресе)


Отзыв о книге: Роберт Матрин "Принципы, паттерны и методики гибкой разработки на языке C#"

Книга "Принципы, паттерны и методики гибкой разработки на языке C#" Р. С. Мартин, М. Мартин - купить книгу Agile Principles, Patterns, and Practices in C# ISBN 978-5-93286-197-4Книга "Принципы, паттерны и методики гибкой разработки на языке C#" Р. С. Мартин, М. Мартин - купить книгу Agile Principles, Patterns, and Practices in C# ISBN 978-5-93286-197-4

Интересная книга.

Главы:

Принципы гибкой разработки: итерации, тесты, пары, отсутствие перегрузов
принципы проектирования​ (SRP, OCP, Принцип подстановки лисков, ISR, DIP)

Обзор доступным языком UML диаграмм (Диаграммы классов, Объектов, Последовательности, Состояний )

Основные паттерны (Команда, Шаблонный метод, Стратегия, Одиночка, Моносостояние, Нулл-объект)

Что понравилось

В одной книге освещены разные аспекты и SOLID и UML и гибкая разработка

Что странно:

Базы данных - почти пофигу. О некоторых вещах автор говорит: я не разобрался и вы не лезьте.


Моя оценка: 4 из 5
Стоит ли читать: да.

Плохие практики при работе с БД

1. Запрос "СЕЛЕКТ ЗВЁЗДОЧКА"

Запрос вида

"SELECT * ..."

Почему плохо: потому что это мина замедленного действия, которая может приветси к торможению при расширении модели БД.
Пример: была таблица из 2-х полей к которой мы применили запрос select * и реально нам для работы в конкретном сценарии нужно было только эти 2 поля.
Через 2 года модеь расширилась, таблица выросла до 20-ти полей, причем появились "длиннотекстовые" поля и блобы(картинки).
Этот же запрос, даже там, где дотстаточно было бы 2- полей теперь всегда выбирает 20.
как нужно: явно указывайте выбираемые поля через запятую. Используйте sql-менеджер для ускорения работы (Детали - у Луценко)

2. Обращение к полям в датасете по номеру.


Это тоже "бомба замедленного действия" , т.к. запрос и обращение к его полям могут быть визуально разделены в прграмме. И, если через год кто-то добавит в средину запроса новое поле (расширяя модель), то сразу нарушится порядок полей. И весь ваш код, в котором Вы обращаетесь к полю по номеру - рушится.
И хорошо, если ошибка видна сразу, а может же случиться, что одно поле переместится на место другого поля, такого-же типа, явной ошибки не будет, и система будет продолжать считать, только данные уже будут не те (например если из-за сдвига подменится поле "сумма заказа" на "сумма заказа со скидкой").
Кроме того очень ухудшается читаемость кода. Как например найти нужное поле в 20-ти строках присваивания вида

ДатаСет.Поле[1] = значение
ДатаСет.Поле[2] = значение
ДатаСет.Поле[3] = значение
...
ДатаСет.Поле[20] = значение


Как нужно: обращайтесь к полям по имени.

3. Формирование запроса в коде путем склеивания строк (подстановка параметров в виде текста)


почему плохо:
а) увеличивается риск получить простейшую ошибку, если вы подставляете в запрос строку, а в строке есть кавычка - она сломает ваш код.
б) увеличивается риск хакнуть систему путем sql injection (посмотрите в вики).
в) сложно отлаживать запрос, например если захотиете вытащить его из программы и проверить в скл-менеджере

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

Перегнать DVD в AVI

Оставлю пока здесь

перегнать DVD в AVI