четверг, января 19, 2006
Очередной прикол от Sharepoint
Application settings in C# 2.0 continued
void LoadSettings(ref object settings) {
PropertyInfo[] props = settings.GetType().GetProperties();
string path = this.GetType().Assembly.Location;
string cfgpath=path+".config";
if (! File.Exists(cfgpath)) return;
XmlDocument cfg = new XmlDocument();
try {
cfg.Load(cfgpath);
} catch (Exception err) {
....
return;
}
foreach (PropertyInfo prop in props) {
if (!prop.CanWrite) continue;
XmlNode setting = cfg.SelectSingleNode("//setting[@name = '" + prop.Name + "']" );
object value = "";
if (setting != null) {
try {
value = setting.SelectSingleNode("value").InnerText;
prop.SetValue(settings, value, null);
} catch { }
}
}
}
Использование:
object osettings = new Settings();
LoadSettings(ref osettings);
settings = (Settings)osettings;
Примечание. При настройке параметров в VS 2005 область действия (Scope) следует установить User (иначе будет сгенерён класс Settings с readonly свойствами).
вторник, января 17, 2006
«Секретная» страница
Для каждого юзера выдаётся список предназначенных для него файлов, которые можно сгрузить.
Регулируется вот таким конфигом:
<?xml version="1.0" encoding="utf-8" ?>
<users>
<user dirs="adir" pwd="ap" name="anton">
<user dirs="*" pwd="dp" name="DkmS">
</users>
Вполне даже симпатично получилось. Заодно кой-чему научился.
воскресенье, января 15, 2006
Settins & Versions
public static string AnyVersion( Assembly assembly) {
object[] attrs=null;
try{
attrs=assembly.GetCustomAttributes(typeof(AssemblyFileVersionAttribute ),false);
}catch{}
if (attrs != null && attrs.Length > 0) {
return ((AssemblyFileVersionAttribute)attrs[0]).Version;
}
return assembly.GetName().Version.ToString(4);
}
четверг, января 12, 2006
Application settings in C# 2.0
Использование новых возможностей по конфигурированию приложений в VS 2005 применительно к VB.NET описано вот тут.
В C# настройка средствами VS (в т.ч. Express Edition) выполняется точно так же. Отличается, ввиду отсутствия в C# конструкции My.Settings, способ использования этих средств.
В модуле, где необходимо использовать настройки, нужно подключить пространство имён Properties:
using MyProgram.Properties;
В соответствующем классе объявить член класса:
private Settings settings = new Settings();
Поля этого класса уже можно использовать по назначению:
this.Size = settings.MainFormSize;
Замечание.
Такую же операцию следует выполнить во всех использующих настройки модулях (классах, формах и т.п.).
четверг, декабря 29, 2005
среда, декабря 28, 2005
Из Writely
/// <summary>
/// Description for XmlView.
/// </summary>
[DefaultProperty("Text"),
ToolboxData("<{0}:XmlView runat=server></{0}:XmlView>"),
XmlRoot(Namespace="XMLviewer")]
public class XmlView : Microsoft.SharePoint.WebPartPages.WebPart {
private const string defaultText = "XmlView";
private string text = defaultText;
private string xml = "";
private string xmllink = "";
private string xsl = "";
private string xsllink = "";
private Evidence evidence=null;
}
XmlWebPart & XmlView continued
xsl. LoadXml(xslScript); //в строке - текст xsl
XslTransform xslt =new XslTransform();
xslt.Load (new XmlNodeReader(xsl));
xsl.LoadXml(xslScript); //в строке - текст xsl
XslTransform xslt= new XslTransform();
XmlUrlResolver resolver=new XmlUrlResolver();
XmlDocument xsl = new XmlDocument();
xsl.Load( http://...test.xsl);
XmlUrlResolver resolver=new XmlUrlResolver();
resolver.Credentials = CredentialCache .DefaultNetworkCredentials;
XslCompiledTransform xslt= new XslCompiledTransform();
XsltSettings settings = new XsltSettings ();
settings.EnableDocumentFunction = true;
settings.EnableScript = true;
xslt.Load(new XmlNodeReader (xsl),settings,resolver);
вторник, декабря 13, 2005
Очередной прикол от Sharepoint
SPList list = web.Lists[ListName];
SPListItem WholeItem = list.Items[0];
WholeItem["Viewers"] = text;
WholeItem.Update();
и
SPList list = web.Lists[ListName];
list.Items[0]["Viewers"] = text;
list.Items[0].Update();
имеют совершенно разный эффект - второй ничего никуда не пишет!
четверг, декабря 08, 2005
вторник, ноября 29, 2005
WSS & SPS Administrator
Более подробно - здесь
пятница, ноября 18, 2005
Microsoft.SharePoint.WebPartPages.XmlWebPart
четверг, ноября 17, 2005
Sharepoint Portal & .NET 2.0 continued
Установил релиз FW .NET 2.0 (описанное ранее было с beta2) - приключения с атрибутом enableEventValidation закончились.
Обнаружилась бяка хуже - перестала работать как следует функция создания узла в портале. Сам узел создаётся, но до формирования по шаблону дело не доходит - заедает на второй странице " Добавление ссылки на узел".
В итоге в области "Узлы" ссылки на новый узел нет, при первом обращении к узлу по адресу сначала выползает форма выбора шаблонов узла.
Попробовал варианты переключения версии .net на установленном узле портала и установки на сервер с включённым вторым дотнетом - один фиг. Мелочь, но противно.
Правда, у некоторых гладко проходит - Matthew Cosier's Blog: WSS and SPS on .NET 2.0
Но у некоторых - тоже не проходит: Steven Van de Craen's Blog
суббота, ноября 05, 2005
Sharepoint notes 4.
SPFieldLookup newfield = list.Fields[fieldName] as SPFieldLookup ;
newfield.LookupField = lookupFieldName;
AddLookup(list, fieldName, lookupListID, fieldRequired, lookupFieldName);
SPFieldLookup newfield = list.Fields[fieldName] as SPFieldLookup;
XmlDocument fxml = new XmlDocument();
XmlElement xf = fxml.CreateElement("Field");
xf.SetAttribute("DisplayName" , FieldName);
xf.SetAttribute("Type", "Lookup" );
xf.SetAttribute("Required", FieldRequired.ToString ());
xf.SetAttribute("List", LookupListID.ToString("B" ));
xf.SetAttribute("ColName", "int1" );
xf.SetAttribute("ShowField", LookupFieldName);
return list.Fields.AddFieldAsXml(xf.OuterXml);
}
Sharepoint notes 3.
The Delete method of the SPFieldCollection class deletes the field with the specified display name from the collection.
public void Delete(
string strName
);
Sharepoint notes 3.
The Delete method of the SPFieldCollection class deletes the field with the specified display name from the collection.
public void Delete(
string strName
);
пятница, ноября 04, 2005
Sharepoint notes 2.
The Add method of the SPFieldCollection class creates a field in the collection.
public string Add(
string strDisplayName,
Microsoft.SharePoint.SPFieldType type,
bool bRequired
);
вторник, ноября 01, 2005
Sharepoint notes 1.
role.AddUser(user);
В SDK никаких оговорок по поводу этой конструкции не видно. Исполняется молча, но ничего не добавляет :-( Работает только такая конструкция:
role.AddUser( user.LoginName, user.Email, user.Name, user.Notes + "(added by Wss Admin)");
Мелочь, но время потрачено приличное.
.NET 2.0 release
Установил на втором компьютере релиз и SDK.
Попробовал собрать на нём при помощи MsBuild проект от 2005-й Студии beta 2. Собирается, и даже работает.
Скомпилил своего Wss Admin'а На 2005-й Студии. Работает как под второй бетой, так и под релизом на "сервере".
Осталось уговорить заказчика перейти на вторую версию (пусть и без Sharepoint'а пока).
понедельник, октября 31, 2005
Пристали с хернёй!!!
Уйти, что ли, отсюда на хрен, да ещё и рекламу организовать...
Завтра не прекратится этот идиотизм - так и сделаю.
Херня продолжается...
Одумались, едрёныть - "Your blog has been reviewed, verified, and whitelisted so that it will nolonger appear as potential spam."
Тем временем надыбал ещё одну системку - Multiply site - вполне пристойное место для жизни. И даже отсюда импорт постов есть ;-)
воскресенье, октября 30, 2005
Sharepoint Portal & .NET 2.0 continued
Это приключилось в вебчасти на фрагменте
web.AllowUnsafeUpdates = true;
Добавление в web.config элемента <safecontrol assembly="Microsoft.SharePoint.Security, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" namespace="Microsoft.SharePoint.Security" typename="Microsoft.SharePoint.Security.SharePointPermission" safe="True" /> эффекта не возымело :-(
Пришлось поставить trust level="Full"
VistaDB 2.1 database for .NET has been released
Repost this to your blog and receive a FREE copy of VistaDB 2.1!
суббота, октября 29, 2005
Мои изделия для Шарепойта (My Sharepoint's tools)
- Картотека ВШЭ с лихими свойствами. Установлено и работает (с разными приключениями) больше 1000 экземпляров.
- Список страниц, где можно что-то редактировать. Подвесил разок систему заказчика, пока обшаривал рекурсивно все сайты.
- Расширенный редактор на базе FCKEditor - аналог системной веб-части. Работает у заказчика, даже какой-то студент что-то совершенствует.
- Утилита администратора - показывает структуры WSS и Портала (на манер SharepointExplorer) и делает кое-какие действия - копирование, удаление, показ свойств (будет).
Вроде, ничего так, полгода назад ничего про этот "Шарик" не знал.
Sharepoint Portal & .NET 2.0
Результат перевода виртуальных серверов фиг знает от чего зависит - от погоды, что ли, или от магнитных бурь каких...
Порядок действий.
- Установить второй сервиспак для Sharepoint Services
- Установить второй сервиспак для Sharepoint Portal
- Перевести веб-сайт (через консоль управления) на работу под версией .NET 2.0
- В свойствах сайта на табе ASP.NET включить вторую версию FW.
- Организовать специальный AppPool для сайтов под второй версией FW, загнать туда этот сайт.
- Identity для этого пула д.б. account, назначенный главным для доступа к содержимому сайтов
- Проследить, чтоб в этот пул попали и подсайты _layouts, _vti_bin, _wpresources. Если не попали, загнать их туда вручную через свойства подсайта.
- Для модификации web.config выполнить команду stsadm.exe -o upgrade -forceupgrade -url http://YourCoolSite (см. KB894903 ).
- Проследить, чтоб прошла модификация, как сказано в KB.
- Если модификация не выполнилась, то сделать её вручную, при этом проследить, чтобы в теге pages не было атрибута enableEventValidation (этот же атрибут добавляется при сносе/восстановлении портала через Центр администрирования - похоже на глюк!? ).
- Выполнить iisreset.
- Лучше бы перезапустить IE.
Дальше буду пробовать что-то на втором FW сочинить.
пятница, октября 07, 2005
понедельник, октября 03, 2005
Google Web Accelerator
четверг, сентября 29, 2005
Sharepoint web-services
Прочитал тут - http://blogs.msdn.com/trobbins/articles/220551.aspx
суббота, сентября 03, 2005
DSL-200 on Windows 2003 sp1
В конторе провайдера предложили купить модем у них, явно дороже, чем в магазине, но ладно, согласился (в надежде, что бегать покупать не придётся, да и поддержку обещали). Естественно, подсунули самый дешёвый - DSL-200 с USB-интерфейсом. В общем, гадость
Установка.
В начале установки надо обязательно выбрать вариант LAN, указать значения VCI/VPI, как скажет провайдер, и обязательно указать "Bridget LLC Encapsulation":
Дальше можно всё делать по инструкции, в процессе Windows спросит про установку нового устройства - надо согласиться на установку по умолчанию, поставится правильное устройство. В конце длинной процедуры установки драйверов вывалится сообщение, что установка прошла неудачно. Не верить, снять установщик через Task Manager. После перезагрузки запустить DSL-200 Status, нажать там Ctrl-F1, выбрать "Driver Config" и посмотреть, что получилось. Если всё, как ожидалось, можно пробовать работать.
Проверка реестра
Необходимо проверить ключ HKEY_LOCAL_MACHINE\SOFTWARE\GlobeSpanVirata, который должен выглядеть примерно таким образом:
[HKEY_LOCAL_MACHINE\SOFTWARE\GlobeSpanVirata\GVInstDLL]
"OrgTcpipWinSize"=dword:00000000
"DriverType"="LAN"
"Vci"="33"
"Vpi"="0"
"Encapsulation"="2"
"hklmDriverSignPolicy"=hex:01
"hkcuDriverSignPolicy"=hex:01
"Driver"="{4D36E972-E325-11CE-BFC1-08002BE10318}\\0011"
"DriverInstalled"="1"
[HKEY_LOCAL_MACHINE\SOFTWARE\GlobeSpanVirata\GVInstDLL\DriverParameters] "SysTrayIconMode"="1"
"Rfc1483Mode"="0"
"Rfc1577Enable"="0"
"Rfc1483Vci"="33"
"Rfc1483Vpi"="0"
"Standard"="4"
"Win2kSurpriseRemoval"="1"
"Language"="english"
"VendorId"="39"
"CplDebugMode"="1"
"IsLogoTransparent"="0"
Здесь может отсутствовать ключ "Driver", который нужно добавить, а некоторые параметры могут иметь неверное значение - их надо исправить.
В разделе HKEY_LOCAL_MACHINE\SYSTEM найти параметры Rfc1483Vci и установить нужное значение.
После этого всего у меня модем заработал. Вот, через него сейчас и пишу
суббота, августа 06, 2005
"Плагин" для ИЕ
Два дня искал информацию, как же, всё таки, написать плагин к ИЕ, чтоб это сохранение выполнить. Причём писать, желательно, на C# (ну, не люблю на плюсах, не нравится в кишках ковыряться). Чего-то нарыл, каких-то нескладных примеров.
Попытался соорудить ничего не делающий, с простым приветом плагин - дык, добился, что ИЕ падал сразу при запуске. Еле отбился от этой заразы.
В итоге плюнул на все эти мученья и за два часа соорудил "спец-браузер", умеющий загрузить страницу и сохранить её в файл, полный путь к которому указан в конфиге.
Выглядит как настоящий, да и действует, вообще-то.
Думаю, сгодится.
В принципе, можно будет со временем подумать о сооружении собственных браузеров такого типа - задать ему нужную функциональность, отбросив ненужное. Ещё бы разобраться, кто нужный, кто нет...
Давно не брал я в руки шашек...
- Про программирование AddIn'ов для Офиса.
- Про web-парты кой-чего можно.
- Ещё разное, чего в голову придёт.
Ожидайте, скоро будет!
пятница, августа 05, 2005
Пост из Ворда
Из Outlook'а - практически так же.
Всё это накалякано в Word’е
воскресенье, июля 31, 2005
Офисные плагины
- Добавлена возможность вывода списка плагинов в инспекторе Outlook.
Реализовано только для наследников outlookPlugin. По умолчанию возможность отключена, включать надо в плагине атрибутом [ShowInInspector (true)] или установкой поля ShowInInspector = true; Проверить факт работы в окне Инспектора можно по значению логической переменной RunningInInspector. - Добавлена возможность при установке выбрать приложения, в которых будут запускаться плагины (по умолчанию Word, Excel и Outlook выбраны).
- Добавлена возможность в файле конфигурации диспетчера указать приложения, в которые будут загружаться плагины при очередном старте (параметр <runin>, принимает значения * (для всех приложений) или Word, Excel и т.д.). Параметр может повторяться необходимое количество раз и может быть изменён только при использовании внешнего редактора.
- Добавлена возможность на пункте меню плагина выводить рисунки. Файлы рисунков (сам рисунок и маска) добавляются к проекту плагина в виде встраиваемых ресурсов (Bitmap размером 16*16). Имена файлов следует указать в переменных PictureBmpName и MaskBmpName в перегруженном методе InitializePlugin (по умолчанию используются значения " Picture.bmp" и "Mask.bmp" соответственно).
- Добавлена возможность в файле конфигурации задать произвольное количество путей к папкам с плагинами (параметр <path>). По умолчанию используется значение "OfficePlugins".
- Система переписана с использованием некоторых возможностей .NET v.2.0 и требует для работы установленной версии .NET Framework 2.0.50215.
Конкурс на Gotdotnet.ru
понедельник, июля 18, 2005
FxCop
CommandBarButton.Picture
Ё-моё. А всё оказалось достаточно просто.
Несколько строчек кода
string ns = this.GetType().Namespace;
Assembly CurrentAssembly = this.GetType().Assembly;
System.IO.Stream
imgStreamPic = CurrentAssembly.GetManifestResourceStream(ns+"." + "ConfigPicture.bmp"),
imgStreamMask = CurrentAssembly.GetManifestResourceStream(ns+"." + "ConfigMask.bmp");
MyAxHost ax = new MyAxHost();
stdole.IPictureDisp
Pic = MyAxHost.IPictureDisp(Image.FromStream(imgStreamPic)),
Mask = MyAxHost.IPictureDisp( Image.FromStream(imgStreamMask));
ConfigureButton.Picture = Pic;
ConfigureButton.Mask = Mask;
И простой класс
public class MyAxHost : System.Windows.Forms .AxHost
{
public MyAxHost() : base( "59EE46BA-677D-4d20-BF10-8D8067CB8B33"){ }
public static stdole.IPictureDisp IPictureDisp(System.Drawing.Image Image)
{
return ((stdole.IPictureDisp)(AxHost.GetIPictureDispFromPicture(Image)));
}
}
И ConfigureButton имеет картинку.
среда, июля 13, 2005
Testing BlogJet
I have installed an interesting application - BlogJet. It's a cool Windows client for my blog tool (as well as for other tools). Get your copy here: http://blogjet.com/
"Computers are incredibly fast, accurate and stupid; humans are incredibly slow, inaccurate and brilliant; together they are powerful beyond imagination." -- Albert Einstein
������ ��-������ �� �����.
Хренотень - русский текст не постит, картинки не постит.
суббота, июля 09, 2005
Yukon
Под SharePoint'ом задолбал вконец - памяти отъедает по 200-300 Мег, задумывается на 100% процессора на минуту-другую при простейших действиях. Мрак...
В итоге перенёс всё на старый добрый SQL 2000 sp3. Причём пришлось именно переносить - базы просто так через detach/attach уже не переставляются. За хрен так сделали, неясно. Как там другая функциональность, даже не пробовал.
Таблицы свои (трафик и др.) перегнал через DTS, а таблицы Sharepoint'а как-то хитро сделаны, что новый DTS обломался - пришлось новые базы заводить. Благо, никакого особого содержимого у меня там не было. Но целый вечер, считай, провозился.
ASP.NET
SharePoint
Целый месяц, считай, провозился с этой фиговиной.
Если разобраться и вникнуть, то работать можно.
В итоге соорудил отдельный продукт - hse-списки. Точнее даже, формы, похожие на встроенные, но с расширенной функциональностью:
- Выборка данных из разных списков, с разных WSS-сайтов на одном сервере.
- Фильтрование данных для списков выбора по значениям полей формы.
- Присваивание полям формы данных из полей источника данных.
- Расширенный html-редактор (пристроил freeware FCKeditor).
- Комбинирование полей в источнике для выбора (заказчику пока не показываю - много всяких следствий).
суббота, июня 04, 2005
PostgreSQL continued...
1. Установил экземпляр СУБД на новой системе.
2. Придушил сформированный сервис (установить его с подключением к имеющейся базе не удалось) - отключил автозапуск.
3. Сформировал новый сервис с подключением к имеющейся базе.
4. Наставил права для пользователя postgres на все каталоги data имеющейся базы (в т.ч. по связям на другие диски) - практически все права.
В итоге стала работать запись данных tmeter, но пришлось отключить запись hosts - загрузка процессора возрастает со страшной силой. Никаких сообщений по этому поводу не обнаруживается.
Посмотрю ещё, как будет форум работать, а то придётся обратно отползать на MS SQL (благо, есть годовая триалка Yukon'а).
Форум никак не работает - но не из-за PostgreSQL, а из-за .NET b2, похоже.
Так и перелез обратно на Yukon - целый день, блин, провозился. DTS 2005 пока немного освоил - изматерился. Кривая пока штуковина. Зато сам сервер явно лучше стал - и ресурсов жрёт поменьше, и побыстрее работает (строго на глаз).
воскресенье, мая 22, 2005
Список файлов на FTP-сервере при помощи FAR'а
Открыл FarNavigator, зашёл на сервер, запустил S&R (в надежде на его плагин) - и обломался.
Пришлось городить скрипт. Тут тоже оказалось не всё просто. Вот лучшее, что удалось поначалу соорудить:
Sub Script_OnOpen(From)
Far.PostKeySequence far.CreateKeySequence("CtrlF CtrlIns Esc Down"),true
Dim fso 'as FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
set list=fso.OpenTextFile("G:\Music\list.txt",8,True,False)
list.WriteLine Far.Clipboard
end sub
Будучи посаженным на клавишу, этот скрипт даёт возможность получить в указанном файле список имён файлов на панели.
Однако Far.Clipboard выдаёт значение, попавшее туда на предыдущем вызове. Поэтому на последнем файле надо вызывать два раза, а потом вычищать руками мусор из начала списка.
После размышлений поменял вызовы местами и получился макрос "CtrlF CtrlIns Esc Down F11 z e", где на "F11 z e" вызывается скрипт без Far.PostKeySequence .
Изврат, конечно, но работает.
Кстати, средства обработать таким образом только помеченные файлы не придумал :-(
И ещё - плагин FTP от Мамаева не годится - на CtrlF выдаёт имена в кавычках.
В конце концов
Sub Script_OnOpen(From) 'CtrlF CtrlIns Esc
Dim fso 'as FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
set list=fso.OpenTextFile("G:\Music\My Playlists\list.txt",8,True,False)
ss= trim(getCommandLine)
If ss="" then
Far.Msg "Command line empty :-("
exit sub
End If
'Чистим кавычки
if mid(ss,1,1)="""" then ss=mid(ss,2)
if mid(ss,len(ss)-0,1)="""" then ss=mid(ss,1,len(ss)-1)
list.WriteLine ss
end sub
function getCommandLine() 'Присоветовал А.Гутман
set b = FARAPI.newBlock()
b.allocate 1024
FARAPI.Control Cnst.INVALID_HANDLE_VALUE,Cnst.FCTL_GETCMDLINE,b
getCommandLine = b.asString(0)
end function
При этом можно и с плагином Мамаева работать.
В итоге получается файл со списком полных имён без всяких дурацких кавычек. Этот файл можно использовать как плей-лист, а можно и переименовать в m3u этим вот скриптом:
function Script::OnOpen(){
var ib //: IInputBox
=CreateInputBox();
ib.Title="New file name"
ib.Prompt="Rename '"+Far.Panel.Current.Name+"' to "
var fn //: String
=Far.Panel.Current.Path
var Fso //: FileSystemObject
= new ActiveXObject("Scripting.FileSystemObject")
var text //:TextStream
=Fso.OpenTextFile(fn)
ib.Text=text.ReadLine() + ".m3u"
if(ib.Show()){
text.Close()
Fso.GetFile(fn).Name = ib.Text
}
}
А можно и преобразовать в wml (плейлист для WMP) вот этим скриптом:
function Script::OnOpen(){
var fn //:String
=Far.Panel.Current.Path
var ib //: IInputBox
=CreateInputBox();
ib.Prompt="Play List name"
ib.Title="Create WMP-playlist from ["+fn+"]"
ib.History="wpls"
var Fso //: FileSystemObject
= new ActiveXObject("Scripting.FileSystemObject")
var text //:TextStream
=Fso.OpenTextFile(fn)
var ss //: String
=text.ReadLine()
ib.Text=ss;
if(!ib.Show()) return; //Не желают...
//reopen
text.Close(); text=Fso.OpenTextFile(fn)
var wpl //as DOMDocument
= new ActiveXObject("Msxml2.DOMDocument")
var smil //: IXMLDOMElement
=wpl.documentElement=wpl.createElement("smil")
var head //: IXMLDOMElement
=wpl.createElement("head")
var title //: IXMLDOMElement
=wpl.createElement("title")
var ListName=ib.Text
head.appendChild(title)
smil.appendChild(head)
var body //: IXMLDOMElement
=wpl.createElement("body")
var seq //: IXMLDOMElement
=wpl.createElement("seq")
var media //: IXMLDOMElement
var src //: IXMLDOMAttribute
while (!text.AtEndOfStream){
ss=text.ReadLine()
if(ss!=""){
media=wpl.createElement("media")
src=wpl.createAttribute("src")
src.value=ss
media.attributes.setNamedItem(src)
seq.appendChild(media)
}
}
text.Close()
body.appendChild(seq)
smil.appendChild(body)
title.text=ListName
wpl.save(ListName+".wpl")
}
суббота, мая 21, 2005
четверг, мая 19, 2005
cBlog Localization
Ну, мрак.
Собственно, не блог - он то, в итоге, вполне рабочим оказался, а вся система программирования для Sharepoint'а - документация под гордым названием SDK весьма куцая, подробности устанешь искать. Искать, оказалось, лучше всего Googl'ем.
Вплоть до того, что в документации наврано (или перепутано) кое-чего.
Долго говорил всякие непечатности, но что-то соорудил. Спасибо Студии 2005 - хоть и бета, но 2003-ю обгоняет по любым показателям. К сожалению, по потреблению ресурсов тоже обгоняет, и весьма сильно
Отвёз заказчику, тот обещает даже денег заплатить.
Осталась висячей (не работает вовсе) фича RSS - буду разбираться.
Долго вдохновлялся, но разобрался и с этой фигнёй в итоге. Теперь работает и в ИЕ, и в FireFox.
Вот чего получилось:
Щас куда-нить пристрою, может, кому надо будет... Пристроил вот здесь.
четверг, апреля 21, 2005
Веб сервисы на халявном хостинге
Сделал веб-сервис, который по запросу выбирает из базы по одной записи и шлёт их запросившему. Клиента сделал в виде консольной программы, которая данные спрашивает, загоняет в базу (конечно, PostgreSQL), посылает запрос на удаление из базы на сервере, отмечает в местной базе, что запись удалена. Вроде бы, работает довольно шустро (примерно 1 запись в секунду). Одна незадача - пока всё это дело сочинял на локале, сочинилось под 2-ю версию .NET - пересылалась DataTable с запрошенным количеством записей. Всё красиво работало (на локале, опять же ;-) ).
При установке на Brinkster выяснилось, что там версия 1.1, а в ней таблицу пересылать низя. Пришлось делать костыли и обмениваться DictionaryEntry[], паковать/распаковывать и урезать пересылку одной записью - ХЗ, как оно двумерные массивы есть будет...
пятница, марта 04, 2005
PostgreSQL
OleDB и .NET провайдеры работают нормально. Привинтил базу к счётчику трафика tMeter. Нормально работает, кроме одной таблицы, traffic. Написал разработчику, пускай правит.
Надо бы теперь отчёт соорудить по таблице packets. На досуге для тренировки какой-нить заняться надо.
вторник, января 18, 2005
MS Office 2003 Smart Tags
Давно зрела мысль заняться смарт-тэгами для Офиса 2003. По крайней мере, адаптировать имеющийся "Сумма прописью". Случился облом
: управляемые модули требуется регистрировать специальным образом в двух местах - в реестре и в системе обеспечения политики секретности .NET. Мало того - при наличии на компьютере двух версий .net необходимо регистрироваться в обеих. Может, только в последней из них, но проверять этого не хочется. Не совсем ясно при этом, как делать пакет установки: значения в реестр записать можно, а регистрировать в настройках безопасности надо при помощи утилиты caspol.exe, да ещё разбираться с установленными версиями дотнет. Без дополнительного модуля - никак не обойтись. Стоит ли овчинка выделки - ХЕЗ.
For a long time the idea ripened to engage in SmartTags for Office 2003. At least, to adapt available The sum in words. Has happened oblom
: manageded modules are required to be registered in the special image in two places - in registry and in security policy of .NET Framework. Whether it is necessary to be soared?
Music and .NET
Понатыкал описание системы в разные софт-сборники.
Recently I has made a separate page with musical lotions and has placed the description in different soft-collections.
-= In my WMP: I'm Crazy 'Bout My Baby by Louis Armstrong =-
Testing BlogJet
I have installed an interesting application - BlogJet. It's a cool Windows client for my blog tool (as well as for other tools). Get your copy here: http://blogjet.com
"Computers are useless. They can only give you answers." -- Pablo Picasso
ÕÇ, ïîñòàâèë ÷¸-òî, ïîãëÿäèì.
воскресенье, января 02, 2005
четверг, декабря 02, 2004
Плагин Now playing - 2
Оно же утилита ком. строки (хотя и форма на самом деле).
Устанавливается в меню Tools браузера, тут же можно и настроить оперативно. В Maxthon настроил на вызов через "внешние утилиты". В форумах пользоваться довольно удобно - сделал для них шаблон с тегами:
-= Слушаю [I][B]WMP[/B][/I]: [B][COLOR=blue]{0}[/COLOR][/B] от [B]{2}[/B] =-
Выглядит, вроде, ничего.
Описание сунул на ту же страницу, что и предыдущие плагины.
четверг, ноября 25, 2004
Плагин Now playing
Сбылась мечта человечества...
Информация считывается из xml-файлов, сформированных вчерашним плагином WmpNow.
Для форматирования информации используется форматная строка, аналогичная форматной строке .Net-ного метода String.Format().
Получается что-то вроде этого:
[WMP 9.0.0.3128]: Here Comes The Sun [The Beatles]
Можно по-разному отформатировать, в рамках строки формата - довольно широкие рамки там.
Используется диспетчер .NET плагинов для MS Office.
Страничка про оба плагина - здесь.
среда, ноября 24, 2004
Плагины для WMP
Просто сказать, но сделать - мама, не горюй. Кончилось загрузкой в этом плагине СОМ-компонента на C#. Жуть, как люди на этих плюсах чего-то большое пишут? Но получилось ничего так - в дотнетный модуль передаётся объект, который является действующим WMP, в который и загружен плагин. Все характеристики доступны по объектной модели из wmppia.dll, обработчики событий цепляются и вызываются.
Была мысль сделать в этом нетном модуле какой-нить сервер, отдающий информацию из плеера. Оказалось, что Remoting - немного про другое, а городить Web-сервис непонятно пока зачем - не хочется. Остановился на выводе информации в какое-нибудь общедоступное место для последующего считывания теми, кому она нужна.
Таких мест оказалось два - очереди сообщений и файловая система. Реализовал работу с обоими - если нет в системе сервиса "Message Queuing" с локальной очередью "WmpNow", то вываливаем инфу в xml-файлы. Пока реализовал вывод информации о audio-единицах - с прицелом сделать в Outlook вставку о проигрываемой сейчас мелодии. А то в каком-то WinAmp есть, а для WMP - нет.
Положил эту штуковинку на Трипод - wmpnow.zip - там и кратенькое описание есть.
Как это применять, надеюсь, завтра сделаю.
P.S. Сделал и применялку, и страничку с описанием.
понедельник, ноября 08, 2004
Офисные плагины
Добавил разные феньки, сделанные в плагинах:
- сохранение конфигурации в xml-файлах посредством сериализации
- "красивые" сообщения с помощью баллона ассистента (если есть)
- не помню ещё чего...
Повнимательнее почитал статью про конфигурации плагинов и сделал нечто похожее:
Поподробнее это хозяйство описано здесь и here
Запостил также на gotdotnet.ru и gotdotnet.com.
суббота, октября 30, 2004
Видео-музыкальное
В частности, на двух дисках концерт в Лужниках "КИНОпробы". Совершенно растрогали ребята из Воплей Видоплясова и Zdob с цыганами.
Который уже час с женой сидим, смотрим и слушаем - даже про клеветанье Латыниной позабыли.
пятница, октября 29, 2004
Локальный поиск - 3
По методе работы очень похож на остальные - резидент размером ок. 24 Мб дожидается паузы в работе пользователя и остальных сервисов, во время которой и занимается индексированием. Примерно за 3 дня набрался индекс размером около 150 Мб (в настройке были указаны практически все возможные источники информации).
Поиск проводится по ключевым словам, быстро. Ищется в категориях источников (почта, контакты, медиа, видео, pictures и др.) раздельно (в отличие от Гуглёвого поисковика).
Недостаток один, но крутой - почтовые сообщения выводит в неверной кодировке (и никакой настройки этого дела не обнаруживается). Поиск в почте отключил.
Остальные источники выдаются нормально. Из музыкальных файлов выбирает и индексирует названия, артистов, композиторов (лирику не индексирует).
Итог - оставил в списке источников для индексирования музыку, картинки, видео и контакты (с которыми Гуглёвый в нынешнем состоянии не работает). Индекс при этом принял размер ок. 65 Мб.
Теперь живу с двумя поисковиками - Google Desktop Search с индексированием всего, что он может и Copernic Desktop Search с ограниченными настройками источников).
Локальный поиск - 2
Язык запросов весьма причудливый, какие-то доморощенные регэкспы, к которым надо долго пристраиваться. Поиск "интуитивный" (задать интересующие слова, без всяких регэкспов) даёт результаты вовсе непредсказуемые - вываливает документы, этих слов не содержащие, и не даёт документов с поисковыми словами (может, потому, что индекс ещё недостроен).
Нет никаких намёков на индексацию почты.
Итог - тесты закончил, индекс выкинул, сервис остановил. Тем более, Microsoft обещает к концу года представить свой локальный поисковик (на базе LookOut, надо полагать?).
суббота, октября 23, 2004
Сравнительный анализ программ для локального поиска.
1. Google Desktop - http://desktop.google.com
2. LookOut - http://www.lookoutsoft.com/Lookout (куплена нынче Microsoft)
3. Indexing Service - системный поисковик.
Первые два обещают поиск в почте (второй - только в Outlook) и в любых, практически, файлах на диске.
Третий про почту как-то ничего не обещает, что странно.
Все три для быстрого поиска строят индексы.
Google Desktop строил индекс 4 дня, совсем незаметно для производительности. В настройках указаны все возможные источники информации. Получился индекс размером ок.550 Мб. Проиндексировано 81 678 документов (почта - 31 993, Web history - 10 606, файлы - 39 079). Не проиндексировались текстовые файлы, однако при их изменениях (создание, редактирование) они попадают в индекс. Похоже на глюк беты.
Обновление индекса происходит быстро (сразу при появлении "окна" в процессорном ресурсе), как по файлам, так и по почте.
Скорость поиска - "световая" (показывает какие-то цифры типа 0,28 сек, отрисовка страницы в браузере присходит дольше).
Памяти хозяйство (5 процессов) съедает ок. 20 Мб (пополам оперативка и своп).
Для поиска используется форма в браузере (вполне привычная по "большому" Гуглю).
LookOut строит индекс быстро, часа полтора. Сколько проиндексировал документов, не говорит, в процессе наблюдения можно узнать количество обработанных папок - ок. 12 000 (сюда входят папки Outlook и папки файловой системы). Индекс получился размером ок. 210 Мб. Не проиндексировались файлы на диске, ни текстовые, ни офисные (по крайней мере, поиск по словам этих файлов не даёт). Почта проиндексировалась вся, недостатков при поиске в почтовых документах не обнаружено.
Обновление индекса регулируется параметрами (от 10 минут до нескольких месяцев), однако дождаться явления не удалось, запустилось только кнопкой на форме с полной переиндексацией.
Скорость поиска также большая, результаты выдаются практически мгновенно.
Памяти в составе Outlook съело около 100 Мб (оперативной и виртуальной).
Для поиска используется Win-форма (форма как форма, ничего плохого).
Indexing Service на настоящий момент строит индекс третий день, рассказывает о 75000 проиндексированных документах, индекс имеет размер 340 Мб. Можно полагать, что окончательный размер будет меньше, чем у Google Desktop. Что там индексируется, так и не понятно. Пробный поиск даёт совершенно чумовые результаты - выдаются документы, запрошенных слов не содержащие. Запрос выполняется сравнительно быстро (только, что толку-то?) Примеры запросов из хелпа проясняют мало что.
Памяти использует 20-22 Мб (примерно пополам).
Для поиска есть форма в mmc (довольно убогая), результаты запроса выводятся там же. В хелпе помянута возможность запросов через веб-формы.
Промежуточные итоги.
1. LookOut - выкинуть. Пущай MS повозится года два (ну уж, и прикупили чудо).
2. Google Desktop - пускай живёт и развивается. Будет основным инструментом.
3. Indexing Service - пускай закончит постройку своего индекса, в Гугле поискать, как этой фигнёй пользоваться, потом решить, как с ней быть.
вторник, октября 19, 2004
Музыкальное - 3
воскресенье, октября 17, 2004
Музыкальное - 2
Чаще известна в исполнении Simon & Garfunkel. Оказалась гимном инков.
Накачал отовсюду примеров, картинок, текстов. Лежит здесь - на страничке El Condor Pasa
вторник, октября 12, 2004
Музыкальное
Лежит здесь - My Way.html
OlkForward
Запускается под диспетчером .NET-плагинов (http://dyakovkm.tripod.com/dnet/offnet.htm)
От встроенной в Outlook пересылки отличается отсутствием всяких добавок в теме и тексте сообщения (всяких там "FW:" и "Исходное сообщение...").
Групповая пересылка выполняется поштучно (а не кучей аттачментов, как в стандартной функциональности).
Разместил описания и архив на своей страничке на Триподе (http://dyakovkm.tripod.com/office/olkfw.htm) и на на GotDotNet (http://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=5c2bdb73-4fa8-4ac7-aa4a-754a1f0e2e76 и http://www.gotdotnet.ru/Downloads/Examples/77891.aspx)
В новой версии системы (см. тут) включил в дистрибутив.
вторник, октября 05, 2004
суббота, сентября 25, 2004
Облом с Borland Together
вторник, сентября 21, 2004
Проверка плагинов для постинга в блог
Формат д.б. "текст", "html" обламывается, "rtf" вовсе отбрасывается сервером.
среда, августа 25, 2004
MS SQL Server 2005
Результаты краткого изучения
Объект:
Дистрибутив en_SQL_2005_DEV_Beta2_852.02, полученный с сайта http://msdn.microsoft.com.
Выполнена полная установка сервера на компьютеры с различными конфигурациями (Celeron 667 MHz/384 Mb и Pentium 4 2.4 GHz/640 Mb) под управлением Windows 2003.
Установка выполнена в режиме Side-by-side с сервером MS SQL Server 2000.
Общие впечатления:
- Сервер базы данных нормально функционирует на обеих конфигурациях на отдельских задачах (загрузка данных в хранилище). Быстродействие нуждается в специальном измерении.
- Средства управления и разработки на базе Whidbey функционируют также на обеих конфигурациях, однако работа с ними на Celeron 667 практически невозможна из-за низкой скорости.
- Базы предыдущей версии СУБД подключаются (attach…) и нормально функционируют под управлением новой версии.
Database Engine
- Управление и разработка производится через MS SQL Server Management Studio.
- Все программные объекты (триггеры, хранимые процедуры, пользовательские типы) могут быть написаны на .NET языках.
- Расширена поддержка XML – введён соответствующий тип данных, документы можно хранить в полях таблиц. Поддерживается язык запросов XQuery.
- Объектная модель Distributed Management Objects (DMO) заменяется (постепенно) на System Management Objects (SMO). Чем отличаются, информации пока нет. Можно, в принципе, установить различия рассматриванием библиотек в Студии.
- Загрузчик данных (без обработки OLAP-объектов) отрабатывает без ошибок ( в т.ч. блок создания объектов базы через DMO).
DTS
Сервисы изменены полностью. Для утешения добавлена поддержка пакетов из версии 2000, которые исполняются в неизменном виде, а также могут быть конвертированы (ограниченно) в новый формат.
Архитектура
- Две области data flow и control flow. Хорошо это или плохо – сразу сказать сложно. Непривычно.
Объекты и программирование
- Все существовавшие компоненты переписаны на .NET, функциональность часто расширена, иногда заметно изменена. Добавлено много новых.
- Каждый из объектов может читать данные из нескольких источников и писать в несколько источников.
- Добавлена возможность программировать собственные элементы (провайдеры данных, преобразователи и т.д.). Для написания компонентов используются средства .NET.
Разработка и распространение
- Для работы с пакетами (проектирование, модификация и т.п.) используется BI Development Studio – пакет на базе Visual Studio. Разработка идёт в рамках проектов (как и всё в Студии), коллективная работа, контроль версий, отладка и т.д.
- Вместо средств WSH (точнее, наряду с ними) можно использовать «макросы» на VB.NET (штатное средство Студии), значительно более мощное средство.
- Хранятся пакеты в файлах формата XML и в таблице базы данных на сервере.
- Для установки пакетов и изменений к ним генерится специальная утилита (wizard).
OLAP
Движок (Engine)
- Добавлены триггеры (синхронное исполнение хранимых процедур для проверок значений и выдачи предупреждений) и трассировщики (trace) для асинхронного измерения производительности и разрешения проблем.
- Введена возможность использовать xml-описания объектов базы для их создания, модификации и т.п. (Называется это дело почему-то скриптами).
- Можно установить несколько экземпляров на одну машину (как SQL Server).
Средства разработки
- Используется BI Development Studio – пакет на базе Visual Studio. Разработка идёт в рамках проектов (как и всё в Студии), коллективная работа, контроль версий, отладка и т.д.
- Все визарды и редакторы (кубов, измерений и др.) переработаны, интегрированы в Студию. Все возможности BI accelerator’а для OLAP 2000 входят в стандартные возможности (насколько запомнилось).
- Добавлено много шаблонов для различных объектов (cubes, dimensions, key performance indicators (KPIs), calculated members, named sets, calculated cells, actions, and Multidimensional Expressions (MDX) queries). Можно создавать собственные шаблоны и сохранять их в xml-формате.
Программирование
- Полная интеграция с .NET (поддержка XML и SOAP, языков .NET в триггерах и хранимых процедурах, управляемый доступ для администрирования и клиентский доступ).
- Decision Support Objects (DSO) заменён на Analysis Management Objects (AMO). DSO пока тоже поддерживается.
- Введён Object Definition Language (ODL), основанный на xml-синтаксисе, позволяющий описывать объекты и манипулировать ими.
Dimensions
- Базируются на атрибутах (соответствуют колонкам таблицы).
- Можно иметь множественные иерархии в одной оси (напр.,
календарное время и фискальное время). - Поддерживаются отношения многие-ко-многим между осями и
фактами через промежуточную таблицу.







