Калибратор Spyder2

•день 18, месяц Октябрь, лето 2008 • Комментариев нет

Не так давно приобрел калибратор монитора Spyder2Express для, очевидно, калибрования и настройки цветового профиля монитора, в особенности - монитора ноутбука.
Для чего это нужно? Нужно это, чтобы фотографии отображались как можно ближе к тому, как они будут выглядеть на печати/в жизни. Также оказывается, что правильно обработанные (в смысле цвета) фотографии лучше выглядят и на обычных, некалиброванных мониторах.
После покупки (за 2990 рублей) выяснилось, что софт, шедший с собственно прибором, является самой урезанной версией - большая часть возможностей просто отключена. Хотите больше? Не вопрос. Доплатив еще порядка 4,5 тыщ, можно проапгрейдиться прямо на сайте производителя. Но при этом сам дистр в свободном доступе, увы, не лежит. Пришлось искать. Линк можно найти на странице ссылок. Кому не страшно - может попробовать найти в интернетах кряк. Но, если вам данный софт понравился, конечно, лучше его приобрести легально.
ЗЫ Да, все три версии (Express, Suite и Pro) комплектуются одной моделью сенсора.

роли в DotNetNuke

•день 22, месяц Сентябрь, лето 2008 • 1 комментарий

Итак, страницы и пользователи у нас программно создаются. Самое время заняться распределением прав на страницы.
На самом деле, задача решается не совсем тривиально, поэтому буду давать детальные пояснения по коду.
Также следует добавить, что, в 4.5.1 (и позднее) есть группы ролей (RoleGroups). Скорее всего, целесообразно будет добавлять новые роли в какую-нибудь группу.

Ну, поехали.

var rc = new RoleController();
//find rolegroups
var rolegroups = RoleController.GetRoleGroups(PortalId);
var rgId = -1;
//find a rolegroup where to add role. -1 goes for Global Roles
foreach (RoleGroupInfo rg in rolegroups)
{
    if (rg.RoleGroupName.Equals("GroupName"))
    {
        rgId = rg.RoleGroupID;
        break;
    }
}

Здесь всё понятно - создаем объект контроллера, который ищет группу ролей GroupName. Имя группы, понятно, надо заменить на реальные.

var roleinfo = new RoleInfo();
roleinfo.RoleName = "Role Name";
roleinfo.PortalID = PortalId;
roleinfo.RoleGroupID = rgId;
rc.AddRole(roleinfo);

тут тоже всё стандартно.

var tc = new TabController();
var tInfo = tc.GetTab(tabid, PortalId, true);

находим страницу, которой присваиваются роли на чтение и редактирование

var tpInfo = new TabPermissionInfo();
tpInfo.AllowAccess = true;
tpInfo.RoleID = roleinfo.RoleID;
tpInfo.RoleName = roleinfo.RoleName;
tpInfo.PermissionID = 3; //view
tpInfo.TabID = tInfo.TabID;
tInfo.TabPermissions.Add(tpInfo);

Начинается “нетривиальность”. Чтобы добавить роль на страницу, надо создать объект TabPermissionInfo, затем указать id и имя нашей созданной роли (она должна быть уже добавлена в общую коллекцию ролей!), затем указать id разрешения - то есть какое конкретно действие мы разрешаем. для страниц это 3 - view и 4 - edit. Для каждого действия должен быть добавлен свой объект TabPermissionInfo. Также обязательно надо указать id страницы, иначе будет исключение. В конечном итоге добавляем объект в коллекцию разрешений страницы.
После того, как мы добавили все нужные нам разрешения, нужно сохранить изменения:

tc.UpdateTab(tInfo);

Без этого ничего работать не будет!
Делегирование пользователю роли происходит тривиально:

rc.AddUserRole(PortalId, userid, roleinfo.RoleID, Null.NullDate);

Программное создание пользователя в DotNetNuke

•день 19, месяц Сентябрь, лето 2008 • Комментариев нет

В данном посте рассмотрим, как создать пользователя в DotNetNuke 4.5.1, используя собственный контрол.
Первое, что нужно знать - контрол, в code behind которого мы будем добавлять нового пользователя, должен быть унаследован не от PortalModuleBase (как обычно), а от UserUserControlBase. Это важно!
Далее, нужно создать объекты классов UserMembership и UserProfile:

var usermembership = new UserMembership();
usermembership.CreatedDate = DateTime.Now;
usermembership.Email = email;
usermembership.Username = username;
usermembership.Password = password;
usermembership.Approved = true;
usermembership.LockedOut = false;

var userprofile = new UserProfile();
userprofile.FirstName = username;
userprofile.LastName = "";

тут указаны только обязательные к заполнению поля объектов. Остальные можно заполнять или не заполнять - по вкусу.
Далее, заполняем собственно объект класса UserInfo. Далее в коде использовано свойство, определенное в UserUserModuleBase - User.

User.Membership = usermembership;
User.Profile = userprofile;
User.Username = username;
User.FirstName = userprofile.FirstName;
User.LastName = userprofile.LastName;
User.DisplayName = username;

Затем вызываем собственно функцию создания пользователя. Так как эта функция принимает объект с модификатором ref, приходится создавать новый объект:

var uinfo = User;
var ucs = UserController.CreateUser(ref uinfo);
if (ucs != UserCreateStatus.Success)
{
//error occured
}

Далее - неочевидный, но важный кусок кода (без него пользователь не создастся):

var uceargs =  new UserCreatedEventArgs(User);//defined in UserUserControlBase
uceargs.Notify = false;//no user notification
uceargs.CreateStatus = ucs;
//next two methods defined in UserUserControlBase
OnUserCreated(uceargs);//generates UserCreate event
OnUserCreateCompleted(uceargs);//generates UserCreateComplete event

Пользователь создан. Теперь нужно раздать пользователю соответствующие роли. Об этом - в следущем посте.

Программное создание страниц в DotNetNuke

•день 12, месяц Сентябрь, лето 2008 • Комментарии (2)

Как программно создать страницу в DotNetNuke (С#):
Нижеследующий код создает страницы в DNN. Страницы являются дочерними (child) по отношению к RootTab. Затем применяется шаблон страницы. Как сделать шаблон страницы, написано здесь.

var tc = new TabController();
var newtab = new TabInfo();
//если вы не хотите использовать корневую страницу,
//можно вместо roottab брать Activetab
var roottab = tc.GetTabByName("RootTab", PortalId);
newtab.IsVisible = false;
newtab.PortalID = PortalId;
newtab.ParentId = roottab.TabID;
newtab.TabName = "name";
newtab.Title = "name";
newtab.TabPermissions = roottab.TabPermissions;
newtab.SkinSrc = roottab.SkinSrc;
newtab.SkinPath = roottab.SkinPath;
newtab.ContainerPath = roottab.ContainerPath;
newtab.ContainerSrc = roottab.ContainerSrc;
newtab.TabPath =
    DotNetNuke.Common.Globals.GenerateTabPath
        (newtab.ParentId, newtab.TabName);
//собственно, добавляем страницу
tc.AddTab(newtab);
//дальше мы применяем шаблон.
//Первая хитрость - снова находим страницу,
//чтобы узнать ее TabID
newtab = tc.GetTabByName(name, PortalId);
//загружаем шаблон. Это XMLка
var XmlDoc = new XmlDocument();
XmlDoc.Load(Server.MapPath(
                      Page.TemplateSourceDirectory +
                      @"/Portals/_default/Templates") +
    @"\pagetemplate.page.template");
//считывает информацию с шаблона
//у нас PortalController!!!
var pc = new PortalController();
pc.ParsePanes(XmlDoc.SelectSingleNode(
                        @"//portal/tabs/tab/panes"),
                    newtab.PortalID, newtab.TabID,
                    PortalTemplateModuleAction.Ignore,
                    new Hashtable());
//всё. шаблон применен.

Как сделать page template в DotNetNuke

•день 12, месяц Сентябрь, лето 2008 • 1 комментарий

Возможно, кого-то мучает вопрос - как создавать макеты страниц (page templates) в DotNetNuke? Рассказываю.

В начале, понятно, надо сделать страницу, с которой будем снимать шаблон. Этот этап я опускаю :)
К сожалению, на данный момент в DotNetNuke отсутствует возможность создавать шаблоны страниц отдельно. Можно только создать шаблон целиком портала. Для этого:

  1. залогиниться под хостом,
  2. зайти на вкладку portals (если вы не знаете где это - можете спросить в камментах),
  3. Нажать кнопку Export Portal Template,
  4. Выбрать портал и указать имя файла, не забыть проставить галку в Include Content
  5. Нажать собственно Export Template

Всё - шаблон портала со всеми страницами готов. Скорее всего, он сохранен в подпапке _default папки Portals. Так как шаблон представляет собой XMLку, следующее, что нам надо сделать - убить всё лишнее. Это можно сделать в любимом текстовом редакторе :)
Оставить нужно следующую структуру (вместо квадратных скобок, понятно, треугольные):
[portal]
[description][/description]
[tabs]
[tab] - вот тут надо оставить только ту страницу, с которой и делаем шаблон
….тут все pane-ы и модули с содержимым.
[/tab]
[/tabs]
[/portal]
В принципе - нам надо привести файл к виду, похожему на дефолтный шаблон, лежащий в Portals/_default/Templates.
Далее шаблон называем [имя].page.template и складываем рядышком с дефолтным, в папку Portals/_default/Templates.
Всё.
Этот шаблон можно использовать для создания страниц, как в админке, так и программно.

Как установить приложения для Windows XP на Windows Server 2003

•день 4, месяц Сентябрь, лето 2008 • Комментарии (6)

Итак. Берем софтину от Microsoft под названием Application Verifier. Устанавливаем.
Как я понял, данная программа предназначена для тестирования приложений в условиях различных осей, переменных окружения, COM-объектов и прочего. Понятно, что устанавливать кучу разных осей для этих целей может (легально) только программист микрософта, да и то - не всегда.
Далее. Запускаем ее. Добавляем через File->Add Application файл setup.exe из установочной папки Photoshop’а. В правом окне появится список доступных опций. Снимаем все галочки, кроме Compartibility -> HighVersionLie
Дальше правой кнопкой на HighVersionLie и открываем properties.
В появившейся таблице проставляем значения:
major version 5,
minor version 1,
build number 2600.

Advanced:
service pack major 2,
service pack minor 1

Остальные оставляем пустыми, сохраняем.

Запускаем Setup…. Вуаля!!!!! Немного тормозит, но мы ведь уже особо не торопимся, верно?

http://forum.rudtp.ru/showthread.php?t=27761

Также опубликовано на 0-stalker-0.livejournal.com, stalker-notes.blogspot.com