понедельник, января 16, 2012

Эссенция допекла…

Уффф, наконец-то избавился от этой заразы под названием Microsoft Security Essential – как бы бесплатного антивируса. На самом деле это произведение индийских мастеров (версия 4 по программе бета-тестирования) совершенно беспардонно жрёт не такие уж и дешёвые ресурсы моего компьютера (чего-то часами делает при использовании 10-12 % производительности процессора i7) и всячески мешает моим действиям. Открытие вложенных папок в меню продолжается иногда десятки секунд (это на четырёх-то ядрах процессора…), при запуске фильмов в WMP, похоже, пытается проверять .mkv-файлы из-за чего фильм становится смотреть невозможно. Сегодня и вовсе компьютер мне подвесил – вижу только в ProcessExplorer активность антивируса на 18% и никакой реакции ни на мышку, ни на клавиатуру. Последняя капля. Схожу с ума от злости
В общем, классический троянец без деструктивных функций. Самое смешное, и ботнет на этих троянцах имеется – называется каким-то “сообществом пользователей” со всей нужной для ботнета функциональностью... Выбросил и в ближайшем будущем вряд ли поставлю. И т.наз. “Защитника Windows” тоже отключил – он точно так же ресурсы жрёт, вредительствует и ещё ни одной заразы не отловил.
По очереди (у меня антивирусы периодически сменяются на какой-нибудь из списка бесплатных) поставил ClamWin с монитором Clam Sentinel – с месяц уже такая компания живёт у меня на виртуальном сервере, ничего плохого пока мне не сделали, а мусор всякий с веб-сайтов прищемляют исправно. Посмотрим…
Technorati Теги: ,

четверг, января 05, 2012

Попытка смотреть кино на Windows Phone 7, продолжение.

Как же, всё-таки, вывернуться из объятий Большого Брата и посмотреть кино на телефоне? Ясно, конечно, как – переконвертировать .avi-файлы в .mp4 самостоятельно. Поиск даёт не так уж и много вариантов, из десятка испытанных остановился на двух конвертерах:

image

и

image

Первый имеет много вариантов конвертации, больше всего мне подошли варианты для HTC Android (у меня HTC Mozart) – изображение получается чёткое, размер файла уменьшается почти в 3.5 раза. Однако изображение несколько вытянуто по вертикали, а время конвертации очень велико даже на процессоре i7 с 8-ю потоками команд.

Второй конвертер, напротив, никаких вариантов не имеет вовсе, но результаты показывает отличные: при небольшом (5-10%) увеличении размера файла время обработки в 2-2.5 раза меньше, чем у первого, при отличном качестве изображения. Неудобство одно – нет пакетной обработки файлов. Правда, поковырявшись, можно сделать ту же обработку, в т.ч. пакетную, при помощи утилиты ffmpeg.exe, которая и используется конвертером. При этом последняя версия утилиты работает ещё раза в три быстрее. Палец вверх

В общем, привет Большому Брату… Дразнюсь

Technorati Теги: ,,

Попытка смотреть кино на Windows Phone 7

Качаем откуда-нибудь .avi-файлы (других не бывает почти) и делаем "синхронизацию" видео на телефон.
Очень долго Zune пережёвывает эти файлы (40 % процессора i7, используются все 8 потоков команд!, длится действо примерно 20-25% от времени проигрывания видео).
Перекодировались файлы с похожими характеристиками (размер, битрейт и т.д.) и качеством изображения (на мониторе в WMP).
Результаты "синхронизации" различаются радикально (таблица). И никаких настроек по этому поводу в Zune нет…
Большой брат без нас всё знает, бля...

Исходный файл

Перекодированный

Результат

clip_image001

 

clip_image002

 

Размер перекодированного файла немного меньше исходного, качество изображения вполне соответствует исходному (как на телефоне, так и на мониторе).

clip_image003

 

clip_image004

 

Размер перекодированного файла почти втрое меньше исходного, качество изображения совсем не похоже на исходное (как на телефоне, так и на мониторе). Смотреть такое можно только при очень большом желании.

Technorati Теги: ,

вторник, декабря 06, 2011

Даёшь халяву!


Втравился в тестирование очередной версии антивируса от MS. Поначалу он вёл себя довольно смирно, но вот уже второй день чего-то долбит и долбит:image
И это всё, практически, один процесс:  image, в основном, на одном ядре (хотя и на разных) – даже иногда сообщения выскакивают о достижении 75 градусов на процессоре…
Не прекратит эту фигню – прогоню нафиг…

четверг, сентября 08, 2011

Оказывается - 9

Выяснилось, к удивлению и сожалению, что методы класса SPWeb

public override SPBasePermissions GetUserEffectivePermissions(
    string userName
)

и

public bool DoesUserHavePermissions(
    string login,
    SPBasePermissions permissionMask
)

совершенно не учитывают разрешений, получаемых пользователем через членство в группах AD, которым назначены разрешения на узле.
Функция “Проверить разрешения” на странице /_layouts/user.aspx таких разрешений не учитывает тоже. Тошнит

Technorati Tags:

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

Прощай, MS-халява…

Не очень давно народ выгнали с бесплатного сервиса блогов spaces.com. Спасибо, что хотя бы по почте заранее предупредили и подготовили переезд блогов на WordPress. Сейчас вот собираются до февраля 2012 разогнать народ с Office Live Small Businnes (открылся сервис года четыре назад и торжественно обещали пожизненно поддерживать малый бизнес). Причём жадность обуяла до такой степени, что никаких средств миграции на Office365 совсем не обещают (хотя системы очень похожи), обещают лишь, что не станут сохранять почтовые адреса (хотя они и находятся на Hotmail). Печальная рожица
Судя по обсуждениям, сервисом пользуется не так уж и мало народу, некоторые, развесив уши насчёт пожизненной поддержки, нагородили достаточно сложные сайты с десятками и даже сотнями страниц… Думаю, теперь у Гугла клиентов прибавится…
Интересно, что на очереди? Остались, собственно, Hotmail да SkyDrive. Скрещенные пальцы


Добавил: Следующим, похоже, будет Hotmail. Хреново стал работать что-то...


Technorati Tags:

пятница, сентября 02, 2011

Тест ИЕ

Раньше ИЕ 9 не постил в Blogger - писать позволял, но кнопка публикации не работала.
Вот сейчас изменили интерфейс, а отправка как?

Фурычит! Малаццы!

Раскопки SharePoint продолжаются!

SharePoint, ASP.NET, C# и не только: Чем плох CAML в SharePoint?: В последнее время, я всё чаще и чаще пишу обертки для CAML. Началось всё, кстати, с моего любимого SharePoint 2010 Fluent Ribbon API , благо...

суббота, августа 27, 2011

SPQuery и ContentType

При работе со списками Шарепойнт обычной практикой, надеюсь, является использование CAML-запросов (свойство SPQuery.Query), которые заметно ускоряют получение данных. Другой возможностью уменьшить объём перерабатываемых данных является ограничение на перечень полей данных (свойства SPQuery.ViewFields и SPQuery.ViewFieldsOnly). Правильное использование помянутых свойств способно заметно улучшить характеристики по быстродействию и потреблению ресурсов.

Проблемы могут возникнуть при попытке использовать характеристики типов содержимого (ContenttType) в списках с поддержкой разных типов. При “чрезмерном” ограничении перечня полей списка можно получить в свойстве SPListitem.ContentType значение null, а в свойстве SPListitem.ContentTypeId совершенно “левое” значение… Для предотвращения подобных проблем следует к списку запрашиваемых полей добавить поле с внутренним именем “ContentTypeId”. При обработке результатов запроса тип содержимого элемента item можно определить кодом наподобие item.ParentList.ContentTypes[item.ContentTypeId].

Лампочка

Technorati Tags:

среда, августа 17, 2011

Оказывается - 8

Нечаянно выяснилось, что определения свойства веб-части в виде

image

отличаются радикально: первый определяет свойство только для чтения, второй вызывает вывод сообщения о неправильном формате свойства и невозможности десериализации свойств веб-части. Удар

И никакой отладчик не позволяет найти причину сообщения Схожу с ума от злости

 

четверг, августа 04, 2011

XSLT-сюрприз

 

Описание – здесь.

В связи с участившимися покушениями на ГДН перенесу текст сюда:

Непонятное наблюдается при отображении дат через настроенную XsltListViewWebPart
Дата 01.02.2010 16:26, т.е. 1-е февраля 2010г., отображается почему-то как 2 января 2010 г.
при этом дата 24.11.2009 10:24 - отображается правильно 24 ноября 2009 г.

вот код:
<xsl:value-of select="ddwrt:FormatDate(string($created) ,1049 ,1)" /> |
<xsl:value-of select="$created" /> |
<xsl:value-of select="ddwrt:FormatDate(string($created) ,1049 , 3)" />
вот, что на выходе:
02.01.2010 | 01.02.2010 16:26 | 2 января 2010 г.
24.11.2009 | 24.11.2009 10:24 | 24 ноября 2009 г.

Портал русский, поле - системное Created, в БД хранится в поле tp_Created:
2010-02-01 13:26:24.000
2009-11-24 07:24:12.000

ошибка связана с реализацией XSLT DateFormat функции в Sharepoint 2010. Чтобы исправить данный bug придется написать свой xsl template, см. ниже:

Bug With SharePoint 2010 XSLT DateFormat Function

XsltListViewWebPart Date Format using DDWRT

понедельник, августа 01, 2011

CopyColor[ed Text]

Лихой плагин для ФАРа – это раскрашенный текст из фаровского редактора, перенесённый с его помощью:

    public partial class XmListViewer : Microsoft.SharePoint.WebPartPages.WebPart {

/// <summary>
/// Путь к папке с файлом локализации
/// </summary>
string localsFolderPath = "";

/// <summary>
/// Прочитать locals.xml из папки ресурсов
/// </summary>
/// <remarks>Вызывается в OnInit()</remarks>
void Localize() {
localsFolderPath =
this.Context.Server.MapPath(
this.ClassResourcePath.Replace(SPContext.Current.Web.Url, ""));
this.Description = GetLocalizedString("description", "Working with XML-files and Sharepoint-lists");
}



Technorati Tags:


четверг, июня 23, 2011

Снова сюрприз. Многострочный.

При наличии в списке многострочных полей их отображение в стандартных веб-частях зависит от установленного вида этого поля в момент образования элемента списка. В поля списка (“Название” – однострочное текстовое поле, “mlfield” – многострочное) введены одинаковые строковые значения), первые два элемента списка формировались, когда тип поля mlfield был установлен в “Обычный текст” и “Форматированный текст” соответственно, третий – “Расширенный форматированный текст”.

image

Видно, что содержимое “многострочного” поля отображается с вертикальным смещением.

В то же время подобного фокуса не наблюдается в “старом” интерфейсе, остающемся после конвертации узлов из версии 2007:

image

Палец вверхПалец внизУлитка

Technorati Tags:


F#, вторая серия. Параллельная.

Попытка соорудить способ параллельного выполнения кода по запросу данных из нескольких списков Sharepoint. Собственно, способ предполагалось использовать в веб-части, написанной на C#, выбор F# для реализации способа обусловлен наличием в нём средств для параллельного выполнения асинхронных операций (класс Async).

Упрощённая тестовая программка на C#:

image

Параллельный исполнятель на F#:

image

Однако фокус не удался: из всех списков, переданных в ParallelExecutor, данные добываются только из одного (иногда из первого, иногда из последнего). На всех остальных операция list.Items.GetDataTable() падает с диковинным сообщением <nativehr>0x80010102</nativehr><nativestack></nativestack> Печальная рожица

Похоже, разработчики Sharepoint не сумели подружиться не только с .NET 4.0, но и с F#-классом Async…

Technorati Tags:


Веб-часть XmListViewer 2010

На базе версии XmListViewer 2007 сделал веб-часть XmListViewer 2010 для работы на фермах Sharepoint 2010. Собственно, практически только рефакторинг кода да использование некоторых фич SPF 2010 и понравившихся функциональных приёмчиков. Расширил функциональность light-версии – теперь можно получать данные одновременно из двух списков.

Функциональное нововведение одно - консолидация данных списков на узлах Шарепойнт на манер стандартной веб-части “Запрос контента” с некоторыми расширениями (или уходами в сторону?).

В процессе реализации преисполнился благодарностей (надеюсь, от икоты никто не умер…) разработчикам Sharepoint, исключившим из него возможность параллельного исполнения кода (в WSS 2007 такая возможность была с использованием ParallelExtensions-CTP, теперь она включена в .NET 4.0, с которым разработчики Sharepoint подружиться не сумели Печальная рожица) – при консолидации списков набирается много, а запрос данных дорог и прямо напрашивается на параллельное исполнение…

Ко всем прочим удовольствиям добавилась новелла с нерабочим редактором страниц на officelive.com (может, и починят, может, и навсегда…). Поэтому отдельную страничку сделать пока не удаётся, ссылки на закачку здесь – Light-версия веб-части, инструкция по установке и настройке.

Добавил:
Фокус с отдельной страничкой удался - http://dyakov.design.officelive.com/xmliv2010.aspx. Там кроме прочего все необходимые ссылки.

Technorati Tags:

пятница, июня 10, 2011

И тут сюрпризы...

На этот раз с датой/временем:
"От чего зависит, будет ли время выводиться с ведущим нулем, или без?

В Regional Settings есть локаль веба, есть таймзона, есть с какого дня начинается неделя, переключение между 12/24 форматом... Понять закономерность не удается. Для одной и той же локали 1033, таймзоны Пасифик ЮС, недели с понедельника и 24-х часового формата ведущий ноль может как показываться, так и исчезать. Сменил неделю на понедельничную - ноль вылез. Вернул обратно на воскресенскую - не пропал."

четверг, июня 09, 2011

Собиратель сюрпризов

Ширятся наши ряды – появился ещё один собиратель всякой бяки от Шарепойнта. Палец вверх Нельзя не поприветствовать!

Соберу до кучи его результаты здесь:

  1. формы InfoPath
  2. wsp-пакет
  3. мастер-страницы
  4. ContentType definition

Думаю, со временем список продолжится… Громко смеюсь



воскресенье, мая 01, 2011

Размещение общего Sharepoint-кода

Часто бывает удобно выделить общий для нескольких проектов код в отдельную сборку и подключать её к проектам. Собственно, так же, как и чей-то чужой код в виде готовой сборки (с codeplex.com и подобных ресурсов).

При этом сразу же встаёт во весь рост проблема размещения такого общего кода. Очевидное, простое и поэтому неправильное решение, быстро приходящее в голову – поместить общие сборки в пакет каждого использующего их проекта – отметается после удаления одного из таких пакетов. Общие сборки тоже удаляются и остальные решения перестают работать. Схожу с ума от злости

Попытки использовать имеющиеся под рукой установщики (Установщик Visual Studio 2010, Wix Toolset 3.5, InstallShield LE, установщик 7-zip и т.п.) оказались плачевными – либо пользоваться неудобно, либо не имеет нужной функциональности, либо не умеет обновлять ранее установленные сборки. Мрак какой-то… Палец вниз

Лучшим вариантом оказался собранный вручную wsp-пакет в сопровождении двух cmd-файлов для установки и обновления.

Описание пакета в файле makecab.ddf:

.OPTION EXPLICIT                    ; Generate errors on variable typos
.Set CabinetNameTemplate=SP.Shared.Assemblies.wsp ; The name of the WSP file
.set DiskDirectoryTemplate=CDROM ; All cabinets go in a single directory
.Set CompressionType=MSZIP
.Set Cabinet=on
.Set Compress=on
.Set DiskDirectory1=.
.Set CabinetFileCountThreshold=0
.Set FolderFileCountThreshold=0
.Set FolderSizeThreshold=0
.Set MaxCabinetSize=0
.Set MaxDiskFileCount=0
.Set MaxDiskSize=0

SharedAssembly.dll
SharedAssembly2.dll
...
manifest.xml

Файл manifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<Solution xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
SolutionId="guid..."
xmlns="http://schemas.microsoft.com/sharepoint/">
<Assemblies>
<Assembly Location="SharedAssembly.dll" DeploymentTarget="GlobalAssemblyCache"/>
<Assembly Location="SharedAssembly2.dll" DeploymentTarget="GlobalAssemblyCache"/>
</Assemblies>
</Solution>

Собирается пакет командой makecab /v1 /f makecab.ddf, устанавливается файлом _install.cmd :

@set prompt=$g
@set spver=14
@set wsp=SP.Shared.Assemblies.wsp
@set admpgm="%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\%spver%\BIN\STSADM.EXE"
@time /t
%admpgm% -o addsolution -filename %wsp%
%admpgm% -o deploysolution -name %wsp% -allowCasPolicies -allowGacDeployment -immediate -force
@pause
%admpgm% -o execadmsvcjobs

Для обновления используем файл _upgrade.cmd :

@set prompt=$g
@set spver=14
@set wsp=SP.Shared.Assemblies.wsp
@time /t
@set admpgm="%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\%spver%\BIN\STSADM.EXE"
%admpgm% -o upgradesolution -name %wsp% -filename %wsp% -immediate -allowCasPolicies -allowGacDeployment
pause
%admpgm% -o execadmsvcjobs

Конечно, в соответствии с новомодными тенденциями можно применить PowerShell, но некоторым так привычней Шучу

Technorati Tags:


пятница, апреля 08, 2011

F#, первая серия.

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

Переносить из книжек всякие примеры - скучно, поэтому решил начать делать одновременно и второе обещанное себе дело - перенести имеющуюся у меня утилиту для работы с Шарепойнтом в ФАР (с использованием техники .NET-плагинов).

Борьба продолжалась почти два световых дня и осложнялась скудной документацией по Far.Net (та самая поддержка .NET-плагинов, к появлению которой когда-то имел достаточнно близкое отношение). Дело, конечно, естественное (человек разрабатывает систему практически в одиночку и добровольно), обижаться не на что...

Удивительней положение с изучаемым языком: синтаксис у него оказался достаточно заковыристым, чтоб постоянно спотыкаться, поддержка редактором Студии не в пример слабее таковой для C#. Показывать классы и прочие объекты в FS-сборке студия отказывается (Рефлектор, однако, показывает картинку, весьма похожую на правду). Подписывать сборку проект FS-библиотеки даже и не предлагает, а я как-то привык за 6 лет занятий разработкой под Шарепойнт любой проект начинать с настройки размещения, которого без строгого имени не бывает...

Добила необходимость ручного регулирования порядка размещения файлов в проекте и объектов (функций, классов и т.д.) в файле Увядшая роза. Пока к такому не готов, а файлов/объектов намечается довольно много...

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

P.S. Совсем уж остановил вот такой фокус…



понедельник, марта 07, 2011

Хвала Reflection.

Потребовалось в проекте выгружать на диск документы из библиотек Шарепойнт. На первый взгляд – ничего особенного: запрашиваем у пользователя путь к папке сохранения на манер модуля резервного копирования в Центре Управления, подключаем пространство имён System.IO, класс DirectoryInfo, методы CreateSubdirectory, file.OpenBinary() + stream.Write() – и все дела. На второй взгляд – тоже просто: примеры решения подобных задач имено так и сделаны. На третий взгляд – вообще всё замечательно: после компиляции код работает, документы выгружает. Ура.

Хуже на четвёртый взгляд, взгляд тестировщика – не выгружаецца! Целевая папка как бы недоступна… Нда… Модуль резервного копирования в ту же папку спокойно свои файлы сохраняет… При помощи отладчика можно наблюдать, как конструктор

 new DirectoryInfo(path)
без выбрасывания каких-либо исключений возвращает непустой объект (что и ожидается), у которого свойство Exists == false. Сюрприз, фокус-покус.

Фокус разоблачается разглядыванием в Рефлекторе или IL-шпионе (ILSpy) кода классов из пространства Microsoft.SharePoint.Administration.Backup. Там методы System.IO используются примерно так:

using (SecurityContext.RevertToSelf())
{
info = new DirectoryInfo(dir);
}

Класс Microsoft.SharePoint.Utilities.SecurityContext почему-то “внутренний”, использовать как обычно его не получится, но для Reflection преград же нет… Дразнюсь

Technorati Tags: , ,