четверг, сентября 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. На досуге для тренировки какой-нить заняться надо.