miercuri, 20 februarie 2008

SQL Server 2008 February CTP

Mai e o saptamana pana la lansarea oficiala a Visual Studio 2008 si Windows Server 2008... si dupa cum deja se stie, SQL Server 2008 a fost amanat cateva luni.

A aparut insa un February CTP de SQL Server 2008 pe care il puteti downloada si testa: http://www.microsoft.com/downloads/details.aspx?FamilyId=749BD760-F404-4D45-9AC0-D7F1B3ED1053&displaylang=en

Pentru mai multe detalii referitor la ce aduce nou acest CTP fata de cel din noiembrie: https://connect.microsoft.com/SQLServer/content/content.aspx?ContentID=5470

miercuri, 13 februarie 2008

MSDN Reader

Daca sunteti cititori frecventi al articolelor de pe MSDN Magazine, atunci puteti incerca noul MSDN Reader.


Aplicatia este dezvoltata in WPF, deci o sa aveti nevoie de .NET 3.5 Framework instalat.

marți, 12 februarie 2008

Tipul de date hierarchyid in SQL Server 2008

SQL Server 2008 introduce un nou tip de date pentru modelarea structurilor ierarhice numit hierarchyid.

In aproape toate proiectele mai mari la care am lucrat pana acum am avut nevoie de o structura ierarhica... ca era vorba de un bill of materials, sau categorii organizate pe mai multe nivele, intotdeauna tabela continea o coloana cu referinta spre o alta coloana din aceeasi tabela.

Cu alte cuvinte pe SQL 2000 si 2005 o astfel de tabela arata astfel:
CREATE TABLE Hierarchy (
Id int PRIMARY KEY IDENTITY(1, 1),
ParentId int
.....

)

De cele mai multe ori, pentru a evita aparitia nodurilor orfane, se adauga si o constrangere de tip foreign key pe coloana ParentId (solutie care functioneaza doar daca se adauga in mod deliberat un nod de root cu ParentId = NULL si care nu va fi niciodata sters).

In SQL Server 2008 s-a introdus un nou tip de date hierarchyid care permite modelarea acestor structuri ierarhice intr-un mod mult mai eficient. Deci tabela anterioara o vom putea crea cu structura:
CREATE TABLE Hierarchy2 (
Id hierarchyid,
...
)

Nu am sa intru in prea multe detalii, pentru ca puteti gasi pe MSDN foarte multe informatii despre:

Acestea fiind spuse, sa trecem la treaba... bineinteles ca prima mea intrebare a fost: "ok, la ce bun un nou tip de date, daca o structura ierarhica mi-o puteam defini simplu cu relatii parinte-copil?"

Primul lucru la care m-am gandit a fost sa testez cum se comporta din punct de vedere al performantei... asa ca mi-am creat doua tabele cu urmatoarele structuri:

1. Folosind relatii de tip parinte-copil:
CREATE TABLE Hierarchy (
Id int PRIMARY KEY IDENTITY(1, 1),
ParentId int REFERENCES Hierarchy(Id),
Name nvarchar(50)
)
CREATE INDEX IDX_ParentId ON Hierarchy(ParentId)

2. Folosind noul tip de date hierarchyid
CREATE TABLE Hierarchy2 (
Id hierarchyid,
Level as Id.GetLevel(),
Name nvarchar(50)
)

CREATE CLUSTERED INDEX IDX_Hierarchy2_BF ON Hierarchy2(Level, Id)
CREATE UNIQUE INDEX IDX_Hierarchy2_DF ON Hierarchy2(Id)

Pentru ca diferenta de performanta sa fie vizibila, mi-am generat in ambele tabele cate 406901 inregistrari (25 de copii pentru fiecare nod, iar la al 4-lea nivel m-am oprit... deci 1 (root-ul) + 25 nivel 1 + 25 * 25 nivel 2 + 25 * 25 * 25 nivel 3 + 25 * 25 * 25 * 25 nivel 4).

Pentru structura clasica de tabela, pentru a obtine toti copii descendenti ai unui nod, se face o parcurgere pe latime a arborelui... la fiecare pas se adauga intr-o tabela temporara toti copii directi ai nodurilor de pe ultimul nivel vizitat, apoi se trece la urmatorul nivel.

Cazul cel mai defavorabil este cand nodul de plecare este chiar radacina:

1. Parcurgerea tabelei construita prin relatii parinte-copil:
DECLARE @ParentId int
SET @ParentId = 1
DECLARE @Level int
SET @Level = 1

CREATE TABLE #Hierarchy (Id int, [Level] int, Name nvarchar(50))
INSERT INTO #Hierarchy
SELECT Id, @Level, Name
FROM Hierarchy
WHERE @ParentId = ParentId

WHILE EXISTS (SELECT *
FROM Hierarchy WITH (NOLOCK)
WHERE ParentId IN (SELECT Id
FROM #Hierarchy WITH (NOLOCK)
WHERE [Level] = @Level))
BEGIN
INSERT INTO #Hierarchy (Id, [Level], Name)
SELECT Id, @Level + 1, Name
FROM Hierarchy WITH (NOLOCK)
WHERE ParentId IN (SELECT Id
FROM #Hierarchy WITH (NOLOCK)
WHERE [Level] = @Level)

SET @Level = @Level + 1
END
DROP TABLE #Hierarchy

2. Parcurgerea tabelei construita cu nou tip de date hierarchyid:
CREATE TABLE #Hierarchy2 (Id hierarchyid, [Level] int, Name nvarchar(50))

DECLARE @Level int, @Parent hierarchyid
SET @Level = 1
SELECT @Parent = Id
FROM Hierarchy2
WHERE Id = '/'


WHILE EXISTS (SELECT *
FROM Hierarchy2 (NOLOCK)
WHERE Id.GetAncestor(@Level) = @Parent)
BEGIN
INSERT INTO #Hierarchy2
SELECT Id, Level, Name
FROM Hierarchy2 WITH (NOLOCK)
WHERE Id.GetAncestor(@Level) = @Parent

SET @Level = @Level + 1
END
DROP TABLE #Hierarchy2

Concluzii:

- in primul caz, parcurgerea a durat 3 secunde, iar folosind hierarchyid parcurgerea a fost instanta; deci performantele sunt net superioare folosind noua structura;

- script-ul de parcurgere al tabelei cu hierarchyid este mult mai simplu si usor de modificat.

vineri, 8 februarie 2008

Programatorule, lasa tastatura si hai la o bila

Uite asa suna un anunt de angajare de pe ejobs.ro: "Good ping-pong player who knows javascript?"

"Ce tare" mi-am zis... uite firma care si-a schimbat strategia de recrutare si s-a desprins putin din clasicul "we are looking for a strong and motivated Java developer".

Incep sa citesc... candidatul lor ideal trebuie sa stie sa joace ping-pong (oops, cand eram in anii 1-2 de facultate ieseam la fotbal in loc sa stau sa joc ping-pong) si foosball (asta ce-i? a gata, am gasit; sanatate lui Larry si Sergey).
Deci cei care nu stiu deloc ping-pong, ce sa faca? Sa astepte sa-si depuna cv-ul cand vor mai invata putin biliard si darts? Sau sa-si exerseze putin inainte de interviu aruncarile cu panoul?

Lasand insa gluma la o parte, vin cu intrebarea: cati din cei care isi cauta un job in IT se uita si la ce posibilitati de entertainment au in pauza de masa? Cat conteaza cand iti alegi viitoarea firma ca are o canapea si o consola PS pe care le folosesti cand ai obosit din programat si vrei sa-ti "odihnesti" ochii?

joi, 7 februarie 2008

Visual Studio Gallery

Cautati un addin sau extensie pentru Visual Studio si nu stiti unde?
Incepand de ieri ar trebui sa gasiti mai usor pe http://visualstudiogallery.com/.

marți, 5 februarie 2008

RONUA

N-am mai vizitat demult blogul lui Petru Jucovschi... si azi, curios sa vad ce mai impartaseste lumii, iaca ce vaz:


Pai, ca evanghelisti / mvp-isti care impartasiti lumii cele mai bune strategii de securitate, cum lasati mode="off"? Sau o fi cineva care debuggereste acuma si nu are access la CS decat prin ftp?

luni, 4 februarie 2008

Windows Server 2008 RTM

Tot azi echipa de la Windows Server a anuntat pe blog-ul lor lansarea RTM-ului de Windows Server 2008.

Momentan sunt disponibile la download (pentru cei subscrisi la MSDN) versiunile DataCenter, Enterprise, Standard pe 64 de biti... pentru versiunile pe 32 biti + Windows Web Server 2008 mai asteptam.

Windows Vista Service Pack 1 RTM

E gata, il anunta cei din echipa de Vista pe blog-ul lor... insa:

"Here's the timing for SP1 availability for current Windows Vista users:
  • In mid-March, we will release Windows Vista SP1 to Windows Update and to the download center on microsoft.com.
  • In mid-April, we will begin delivering Windows Vista SP1 to Windows Vista customers who have chosen to have updates downloaded automatically. "

Deci mai asteptam 6 saptamani pana o sa-l putem downloada... buuuun.

vineri, 1 februarie 2008

Aplicatii Silverlight in PHP

Ati auzit de Phalanger?
Probabil raspunsul ar fi DA din partea unor programatori PHP si NU din partea celorlalti (pentru cei din a doua categorie, vedeti link-ul de mai sus pentru detalii).

Si acuma vin cu o a doua intrebare tot pentru programatorii PHP: v-ati gandit sa dezvoltati aplicatii in Silverlight, dar fara sa invatati un limbaj nou?

Indiferent de raspuns, mai ganditi-va... pentru ca aceeasi echipa care lucreaza la Phalanger a prezentat deja doua demo-uri de aplicatii Silverlight scrise in PHP.