четверг, 25 сентября 2008 г.

Как починить WMI или почему не устанавливается SQL 2005.

Недавно я решил посмотреть HD-фильм на своем ноутбуке. Но фильм начал тормозить непонятно из-за чего. Естественно дальше мои действия были такими: Диспетчер задач.

Отключил процессы. Не отключаются. Иду в services.msc. Отключаю SQL-сервисы и службы, все что нашел!

Ликую! Наслаждаюсь HD - картинкой добрых 3 часа. Потом собираюсь включать SQL, а он, зараза, не включается! =) И так и сяк. В общем напортачил до того, что у меня сломался WMI.

Переустановка MS SQL спотыкается на каком-то *.dof файле. Ну, думаю... Все, приехали. Переустановка Windows и все, что к нему прилагается займет порядка дня. Но тут один мой знакомый - системщик скинул по аське *.bat - файл. Запусти, говорит!

И произошло чудо! MS SQL 2005 поставился! =) Все заработало!

Ниже находится листинг этого *.bat файла. 

@echo on 

cd /d c:\temp 
if not exist %windir%\system32\wbem goto TryInstall 
cd /d %windir%\system32\wbem 
net stop winmgmt 
winmgmt /kill 
if exist Rep_bak rd Rep_bak /s /q 
rename Repository Rep_bak 
for %%i in (*.dll) do RegSvr32 -s %%i 
for %%i in (*.exe) do call :FixSrv %%i 
for %%i in (*.mof,*.mfl) do Mofcomp %%i 
net start winmgmt 
goto End 

:FixSrv 
if /I (%1) == (wbemcntl.exe) goto SkipSrv 
if /I (%1) == (wbemtest.exe) goto SkipSrv 
if /I (%1) == (mofcomp.exe) goto SkipSrv 
%1 /RegServer 

:SkipSrv 
goto End 

:TryInstall
if not exist wmicore.exe goto End 
wmicore /s 
net start winmgmt 
:End

Я думаю он может многим пригодиться =)

вторник, 23 сентября 2008 г.

Некоторые аспекты databinding, показ datatable в listbox

При переписывании моей программы по сплайнам я столкнулся с одной небольшой проблемой: необходимо было, чтобы информация об узлах и начальная таблица данных выводились в окно программы для большего удобства работы, и при этом, было желательно чтобы была возможность просчитав сплайн, изменить начальные данные об узлах не выходя из программы. Сначала я думал что это будет не просто, однако, это оказалась не просто легче чем я думал, а гораздо легче чем я даже мог предположить :)



Во-первых необходимо связать содержимое, загружаемое из файла в listbox:

добавляем в код XAML:

< itemtemplate="{StaticResource nodsTemplate}" itemssource="{Binding}" name="listBoxNods" margin="0,30,0,0">


ItemsSource="{Binding}" означает, что источник данных, показываемых в этом листбоксе забинден к нему, т.е. они соединены между собой постоянной связью, и изменения в одном могут(если это не запрещено специально) сразу отображаться в другом.

ItemTemplate="{StaticResource nodsTemplate}" - это темплейт, с помощью которого мы рассказываем listbox'у как и что мы хотим отображать конкретно:



< key="nodsTemplate"> < name="grid">
< name="nodsPanel0" orientation="Horizontal">
< name="nodsPanel1" width="100" horizontalalignment="Left">
< text="{Binding Path = x}">
< name="nodsPanel2" width="50" horizontalalignment="Right">
< text="{Binding Path = y}">

как все происходит - listbox разбивается на StackPanelи первого вида(nodsPanel0), которые будут отображаться одна под другой, далее, каждая из этих стак-панелей разбивается еще на 2, горизонтально(за это отвечает атрибут Orientation), и в каждой из этих стак-панелей уже запихиваем те элементы которые нам нужны, в данном случае - TextBox и TextBlock, к которым привязываем конкретные данные, которые будем доставать из источника. Собствено в чем отличие текстбокса и текстблока - в том, что текстбокс изменяем, мы можем изменить в нем наши данные, и если DataTable к которой мы привязаны позволяет это - то данные от этого изменятся и в ней. Текстблок же - это просто статический текст. Т.к. стакпанели будут по умолчанию прилегать в плотную друг к другу, и занимать столько места, какова длинна данных, записаных в них, то имеет смысл для наведения красоты и для более удобного чтения данных установить фиксированную длинну через атрибут Width.в этом темплейте можно сделать еще очень много чего, но это уже не относится к теме данной статьи :) переходим в код C#.

Теперь нам необходимо указать, собственно какие данные мы забиндим к listbox:

DataTable _nods = new DataTable();

****

_nods.Columns[0].ColumnName = "x";
_nods.Columns[0].ReadOnly = false;
DataColumn tc1 = new DataColumn("y", typeof(double));
_nods.Columns.Add(tc1);
_nods.Columns[1].ReadOnly = true;

Binding bind = new Binding();
this.listBoxNods.DataContext = _nods;
this.listBoxNods.SetBinding(ItemsControl.ItemsSourceProperty, bind);

Сначала мы создаем и заполняем(это необязательно :) ) DataTable, и назначаем названия Columns. Необходимо, чтобы названия в Text="{Binding Path = x}" совпадали с названиями колонок таблицы, далее выставляем значения атрибута ReadOnly - если мы хотим чтобы данные в колонке не менялись из-за внешних воздействий(либо, например, чтобы запретить определенному кругу пользователей изменять какие-либо данные)

теперь, собственно, создаем биндинг и назначаем для листбокса его датаконтекст, и применяем биндинг. Вот и все :)


воскресенье, 21 сентября 2008 г.

XNA CTP & Future of the Xbox console...

Познакомившись с XNA Game Studio 2.0, я обнаружил в интернете упоминание об XNA Game Studio 3.0 Community Technical Preview. В прилагаемом файле было указано, что поддерживаются пиксельные и вершинные шейдеры только 3-й версии. Ограничение обосновано тем, что Xbox базируется на DirectX 9, что в принципе и понятно. Возникает резонный вопрос. Подходит ли XNA для разработки игр для Windows? Весь мир сейчас переходит на DirectX 10. Вспомним хотя бы Assasin's Creed, MS Flight Simulator X и Crysis. Эти игры сделали большой шаг к игровой индустрии. Я полагаю, что вскоре должна выйти новая консоль от Microsoft, иначе они проиграют. Идея Live! - сервиса для Xbox, где пользователи могут скачивать игры прямиком к себе на консоль, где пользователи общаются, ставят мировые рекорды в играх, вполне удачна. Если не одно но. А то, что Xbox 360 вышел в конце 2005 года. А DX10 появился в конце 2006. Следовательно можно предположить, что качество графики в играх 2007+ играх на PC превосходит качество графики на их же аналогах Xbox 360. Приставка оказывается скажем таки не в лучшем свете. Хотя тут включаются другие аспекты. Например сферы влияния. Если выпустить игру на PC, Xbox и PS3 то средненький проект окупится гораздо больше, чем если проектировать лучший проект только под одну платформу.

Мой вывод: XNA прекрасно подходит для ускоренного проектирования игр среднего масштаба и для PC и для Xbox. Причем портировать игру на Xbox совсем не сложно. А значит, меньше затрат и больше прибыли. И DirectX 10 здесь существенной роли не играет.

P.S. Следующим летом Microsoft хотят представить новую операционную систему Windows, по заявлению офф. лиц, она будет содержать DX11. Новая технология - новый шаг в будущее. Или... Увидим.

суббота, 20 сентября 2008 г.

блог создан :)

итак, блог создан, теперь буду потихоньку его наполнять по мере собственного продвижения в изучении этих технологий :)