среда, декабря 28, 2005

Из Writely

Из C# Express через Word: с заменой абзаца на разрыв строки

/// <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

Заказчику потребовалось использовать в xslt-преобразователе конструкцию <xsl:apply-templates select="document(file)..."/>
В стандартном XmlWebPart - работает. В моём XmlView - ни в какую.
При раскопках выяснилось, что загружать xsl нужно не конструкцией, которая сама напрашивается

XmlDocument xsl = new XmlDocument();
xsl.
LoadXml(xslScript); //в строке - текст xsl
XslTransform xslt =new XslTransform();
xslt.Load (new XmlNodeReader(xsl));
а немного поширше:

XmlDocument xsl = new XmlDocument();
xsl.
LoadXml(xslScript); //в строке - текст xsl
XslTransform xslt= new XslTransform();
XmlUrlResolver resolver=new XmlUrlResolver();
xslt. Load(new XmlNodeReader(xsl), resolver, XmlSecureResolver .CreateEvidenceForUrl(XslLink));
В .NET 2.0 опять по-другому:

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();


имеют совершенно разный эффект - второй ничего никуда не пишет!

вторник, ноября 29, 2005

WSS & SPS Administrator

Утилита для курочить Шарепойнт - копирование, редактирование, добавление всяких разных элементов.

Более подробно - здесь

пятница, ноября 18, 2005

Microsoft.SharePoint.WebPartPages.XmlWebPart

Ну и штуковина! Долго пытался выяснить, что же и как она делает - полный облом. Похоже, и никто не ухитрился её в деле использовать :-(.

А всего-то и надо было - прочитать из файла xml, преобразовать его через xsl и выдать юзеру. В итоге пришлось изобретать свой аналог, который даже и работает.


четверг, ноября 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-полей к списку list в примерах рекомендуют нечто вроде:
 
list.Fields.AddLookup(fieldName, lookupListID, fieldRequired);
SPFieldLookup newfield = list.Fields[fieldName] as SPFieldLookup
;
newfield.LookupField = lookupFieldName;
 
Всё это проходит на примерах, где поле называется Title.
 
На самом деле, приходится использовать такой код:

AddLookup(list, fieldName, lookupListID, fieldRequired, lookupFieldName);
SPFieldLookup newfield = list.Fields[fieldName] as SPFieldLookup;
 
...
 
string AddLookup(SPList list, string FieldName, Guid LookupListID, bool FieldRequired, string LookupFieldName) {
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
);

Parameters
strName   A string that specifies the display name of the field
 
На самом деле
strName   must be InnerName.

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
);

Parameters
strName A string that specifies the display name of the field
На самом деле
strName must be InnerName.

пятница, ноября 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
);

Return Value
A string that contains the display name of the new field.
 
На самом деле
возвращает InnerName для нового поля.

вторник, ноября 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

После установки релиза FW вылезла ошибка при обращении к классу Microsoft.SharePoint.Security.SharePointPermission в сборке Microsoft.SharePoint.Security, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c.
Это приключилось в вебчасти на фрагменте

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

This 2.1 update includes over 60 improvements, including new support for .NET 2.0 and Visual Studio .NET 2005. VistaDB is a small-footprint, embedded SQL database alternative to Jet/Access, MSDE and SQL Server Express 2005 that enables developers to build .NET 1.1 and .NET 2.0 applications. Features SQL-92 support, small 500KB embedded footprint, free 2-User VistaDB Server for remote TCP/IP data access, royalty free distribution for both embedded and server, Copy 'n Go! deployment, managed ADO.NET Provider, data management and data migration tools. Free trial is available for download.

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

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

Порядок действий.
  1. Установить второй сервиспак для Sharepoint Services
  2. Установить второй сервиспак для Sharepoint Portal
  3. Перевести веб-сайт (через консоль управления) на работу под версией .NET 2.0
    1. В свойствах сайта на табе ASP.NET включить вторую версию FW.
    2. Организовать специальный AppPool для сайтов под второй версией FW, загнать туда этот сайт.
    3. Identity для этого пула д.б. account, назначенный главным для доступа к содержимому сайтов
    4. Проследить, чтоб в этот пул попали и подсайты _layouts, _vti_bin, _wpresources. Если не попали, загнать их туда вручную через свойства подсайта.
  4. Для модификации web.config выполнить команду stsadm.exe -o upgrade -forceupgrade -url http://YourCoolSite (см. KB894903 ).
    1. Проследить, чтоб прошла модификация, как сказано в KB.
    2. Если модификация не выполнилась, то сделать её вручную, при этом проследить, чтобы в теге pages не было атрибута enableEventValidation (этот же атрибут добавляется при сносе/восстановлении портала через Центр администрирования - похоже на глюк!? ).
  5. Выполнить iisreset.
  6. Лучше бы перезапустить IE.
После этого сайт вполне себе заработал.
Дальше буду пробовать что-то на втором FW сочинить.

понедельник, октября 03, 2005

Google Web Accelerator

Ну и какашка! Сгружает файлы как бы "заранее", а при начале загрузки пользователем качает их снова.
В общем, в 100 Мб трафика мне эта "радость" обошлась. Бля!

четверг, сентября 29, 2005

Sharepoint web-services

Вот бред - просто так в Студии подключить в проект эти сервисы не получается:
The document at the url http://localhost/_vti_bin/sites.asmx was not recognized as a known document type.
 
Помогает написать вместо, например, http://localhost/_vti_bin/Lists.asmx  немного другое -  http://localhost/_vti_bin/Listswsdl.aspx .
 
Ещё вот так срабатывает - http://localhost/sites/test/_vti_bin/Lists.asmx
Прочитал тут - http://blogs.msdn.com/trobbins/articles/220551.aspx

 
Здесь sites/test - существующий сайт.
 
Полный капец

суббота, сентября 03, 2005

DSL-200 on Windows 2003 sp1

Решил тут подключиться к Инету цивилизованным способом - через ADSL-модем.

В конторе провайдера предложили купить модем у них, явно дороже, чем в магазине, но ладно, согласился (в надежде, что бегать покупать не придётся, да и поддержку обещали). Естественно, подсунули самый дешёвый - 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

Офисные плагины

Новое по сравнению с ранее выставлявшимся:
  1. Добавлена возможность вывода списка плагинов в инспекторе Outlook.
    Реализовано только для наследников outlookPlugin. По умолчанию возможность отключена, включать надо в плагине атрибутом [ShowInInspector (true)] или установкой поля ShowInInspector = true; Проверить факт работы в окне Инспектора можно по значению логической переменной RunningInInspector.
  2. Добавлена возможность при установке выбрать приложения, в которых будут запускаться плагины (по умолчанию Word, Excel и Outlook выбраны).
  3. Добавлена возможность в файле конфигурации диспетчера указать приложения, в которые будут загружаться плагины при очередном старте (параметр <runin>, принимает значения * (для всех приложений) или Word, Excel и т.д.). Параметр может повторяться необходимое количество раз и может быть изменён только при использовании внешнего редактора.
  4. Добавлена возможность на пункте меню плагина выводить рисунки. Файлы рисунков (сам рисунок и маска) добавляются к проекту плагина в виде встраиваемых ресурсов (Bitmap размером 16*16). Имена файлов следует указать в переменных PictureBmpName и MaskBmpName в перегруженном методе InitializePlugin (по умолчанию используются значения " Picture.bmp" и "Mask.bmp" соответственно).
  5. Добавлена возможность в файле конфигурации задать произвольное количество путей к папкам с плагинами (параметр <path>). По умолчанию используется значение "OfficePlugins".
  6. Система переписана с использованием некоторых возможностей .NET v.2.0 и требует для работы установленной версии .NET Framework 2.0.50215.

Конкурс на Gotdotnet.ru

Получил на днях призы за заявки - VB.NET и VS 2003 - всё из себя лицензионное, хоть и устаревшее малость. Одно хорошо - к Студии Server 2003 приложен и SQL 2000 девелоперский. Можно с чистой совестью программки раздавать. И даже продавать, если кто купит.
А Бейсик Варьке отправить надо - поди, в нынешней продвинутой школе заставят программить чего - вот и пригодится.
 
Ну, и заодно вспомнил, что надо и сами разработки выкладывать - пришлось повозиться малость.
Музыкально-развлекушное почти не менял, а с Офисными плагинами поковырялся. Особенно с Outlook'овым, работающим и в Inspector'е - кривота жуткая. Зато научился вставлять текст в письма (даже в те, которые специально на редактирование не открыты пока). Надо будет развить как-нить эту линию.

понедельник, июля 18, 2005

FxCop

Решил поупражняться с сабжем, встроенным в Студию 2005.
Мама дорогая.
В общем, примерно 3 часа возился, выполняя его рекомендации. Попутно выяснилось, что некоторые ситуации распознаёт совсем криво, значительно хуже самой Студии. Но иногда и дельные советы подаёт тоже (типа убрать ненужные инициализации объектов, сделать методы статическими).
 
Следующие 3 часа возился, устраняя последствия предыдущего действия :-(
 
В общем, какое-то время воздержусь от этой забавы.

CommandBarButton.Picture

Часа 2 возился, чтоб изобразить картинку на кнопке в Ворде. Какой только фигни многомудрой не понаписано на эту тему....
Ё-моё. А всё оказалось достаточно просто.

Несколько строчек кода

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 имеет картинку.

SharePoint continued...

По просьбе - скриншоты:




Настройка поля формы.




Форма с использованием RTF-редактора FCKeditor.




Веб-часть со списком карточек.

среда, июля 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

Поставил бету 3, пришедшую с 2005-й Студией. Нагрузил на него всё - счётчик трафика, SharePoint и проч.
Под SharePoint'ом задолбал вконец - памяти отъедает по 200-300 Мег, задумывается на 100% процессора на минуту-другую при простейших действиях. Мрак...
В итоге перенёс всё на старый добрый SQL 2000 sp3. Причём пришлось именно переносить - базы просто так через detach/attach уже не переставляются. За хрен так сделали, неясно. Как там другая функциональность, даже не пробовал.
Таблицы свои (трафик и др.) перегнал через DTS, а таблицы Sharepoint'а как-то хитро сделаны, что новый DTS обломался - пришлось новые базы заводить. Благо, никакого особого содержимого у меня там не было. Но целый вечер, считай, провозился.

ASP.NET

Пока ковырялся с SharePoint'ом, понял, что из всего .NET самое крутое - ASP.NET .
За всё время не нарисовал ни одной формы в студии или ещё как - всё только на C#.
Html не понадобился совсем (не считая совсем маленьких фрагментиков при рендеринге элементов). Правда, употребил бесплатную разработку, а там много html-ного.

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 выдаёт имена в кавычках.

В конце концов
Макрос стал такой: CtrlF Down F11 z e Esc, а на F11 z e вызывается такой скрипт:
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")
}

четверг, мая 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