Soci (Soczó Zsolt) szakmai blogja

2006.12.24.

Boldog Karácsonyt

Filed under: Élet,Személyes — Soczó Zsolt @ 00:17

kívánok minden kedves barátomnak és olvasómnak.

December 31-én leszek újra online.

2006.12.23.

Ingyen vizsga, még idén

Filed under: Felhívás — Soczó Zsolt @ 16:11

Aki szeretne MCP vizsgázni, még idén, az keressen meg privát emailben. Csak az első jelentkezőnek válaszolok, előre is elnézését érte.

2006.12.21.

Születésélmények

Filed under: Élet,Személyes — Soczó Zsolt @ 12:58

Sok pszichológus szerint a méhen belüli valamint a születés élménye mély nyomot hagy a gyerek tudatalattijában, amely későbbi életszakaszokban bizonyos ingerek hatására újraélednek, restimulálódnak.

Ennek egy példájával szembesültünk a napokban. Pár napja Bálint fürdés közben addig tekergergette a kád lefolyóját nyitó csapot, hogy elkezdett kifolyni alóla a víz. Ez akkor sokkot váltott ki belőle, amilyet még nem nagyon láttunk tőle. Remegett, ordított, rettenetesen meg volt rémülve. Mindig, ha ilyen irracionális választ kapunk egy ingerre, akkor el kell gondolkodni, vajon mi lehet annak az oka. Sok agresszív, depressziós, stb. felnőttnek is meg kellene ezt tenni. Saját példámból tudom, meglepő összefüggésekre lehet rájönni, és ami a fő poén, megszüntethető a probléma oka, ha rászánsz kis időt tudatosítani a kiváltó tényezőt.

A következő napokban nem akart fürdeni, a kádban sokat sírt, bömbölt, és remegve fogta a játékait, nehogy levigye őket a víz. Sajnos sok szülő ilyenkor vagy értetlenül áll, vagy végtelen butaságában kineveti a gyereket, aki ettől megszégyenül, és lassan megtanulja, hogy el kell fojtani a természetes reakciót, magába kell zárni őket. Ettől persze beteg lesz, felnőtt korában pedig mindenféle pszichológiai és testi tüneteket fog produkálni.

Na, tegnap este oktatást tartottunk, bár még nem tudtuk mi a probléma forrása, de igyekeztünk bebizonyítani, hogy nem visz le a víz semmit. Bálint után belültem a kádba. Ő már megszáradt, állt a kád mellett. Megmutattam neki, hogy most elkezdem leereszteni a vizet, és nem visz le engem. Méretes testemmel ez trivialitás, Bálint is elfogadta. :)

Aztán jöttek a játékok, előbb a nagyobbak, végül egy kis emberke, ami alig pár centis. Egyiket se vitte le a víz. :)

Ez megnyugtatta Bálintot. Ma megkérdeztem, leviszi-e a víz a játékait, és azt mondta nem, és nem is fog este bömbölni. Majd kiderül. Du. még kitisztítjuk a lefolyót, és bele is nézünk zseblámpával, alaposan körbejárjuk a témát.

A fő poén most jön. Feleségem ma belenézett a tegnap félbehagyott Lelki köldökzsinór című könyvébe, ami ezzel indult:

“Gyerekek gyakran félnek a kádból lefolyó víz kis örvényeitől, félnek, hogy elnyeli őket. A tudattalan azonosítja a vizet a magzatvízzel, és a közeli születéssel. Tudjuk, hogy a magzatvíz a burok megrepedésekor a gyermek mellett áramolhat… A félelem alapját homályos szervezeti emlékek képezik… Ha be tuda látni ezt a félreértést, tévedést [lefolyó víz == születési trauma], akkor képes legyőzni a születése traumáját.”

Durva, nem?

Még egy kis adalék. Bálint 8 hónapra született. Elfolyt a magzatvíz, de még a szülés nem indult be, csak egy nap múlva. Sajnos az orvos (Balogh) parás volt, és azt mondta, menjünk másik kórházba, ahol koraszülötteket el tudnak látni, persze nem kis ijedtséget okozva feleségemnek. Mi bíztunk magunkban és tudom, hogy jóban vagyunk Istennel (még ha ez így leírva hülyén is néz ki), ezért nem mentünk el máshová. Szerencsére, Bálint 3.3kg-mal, teljesen egészségesen született meg.

Kíváncsi volnék volt-e másnak is hasonló élménye (mármint lefolyós)?

Utasítás-szintű újrafordítás és string index statisztikák az Sql Server 2005-ben

Filed under: SQL Server 2005 — Soczó Zsolt @ 12:16

Két nem annyira reklámozott új szolgáltatást szeretnék bemutatni az SQL Server 2005-ből, amelyeket a keddi SQL vizsgára készülve fedeztem fel. (Tavaly decemberben sajnos már nem volt hely az egyik beta sql vizsgára, azt nyomom le most, mivel maradt pár ingyenes kuponom, hát kihasználom őket).

Adventureworks database, Contact tábla.

Pakoljunk rá egy indexet, e mentén szeretnénk szűrni.

CREATE NONCLUSTERED INDEX IDX_LastName ON [Person].[Contact]
(
[LastName] ASC
)

Referencia lekérdezésünk:

select * from Person.Contact

where LastName like ‘Ac%’

Kimenet: 4 sor

Execution Plan:

select * from Person.Contact where LastName like ‘Ac%’

|–Nested Loops(Inner Join, OUTER REFERENCES:([Person].[Contact].[ContactID]))

|–Index Seek(OBJECT:([Person].[Contact].[IDX_LastName])

|–Clustered Index Seek(OBJECT:([Person].[Contact].[PK_Contact_ContactID])

Költség: 8.2ms.

Azaz használja az NC indexünket, mert kitalálja az ‘Ac%’ paraméterből és a statisztikákból, hogy várhatóan csak pár sor jön vissza, így megéri az NC indexet használni, még akkor is, ha cserébe joinolni kell azt a clustered index-szel. Valójában ugye ez nem igazán join, hanem először lemászik az NC fában, aztán a Clusteredben, de ez most számunkra mindegy.
A következő eset viszont nem optimális tervet eredményez:

declare @a nvarchar(50)
set @a = ‘ac%’
select * from
Person.Contact
where LastName like @a –‘Ac%’

EP:
select * from Person.Contact where LastName like @a –‘Ac%’
|–Clustered Index Scan(OBJECT:([Person].[Contact].[PK_Contact_ContactID])

Költség: 438ms, 50x lassabb, mint a referenciánk!

Nem meri használni az NC indexet, mert fogalma sincs hány sor jön vissza. Ha megkockáztatja a LastName oszlop NC indexét, lehet, hogy befürdik vele, mert sok sor jön vissza, és akkor jobban megérte volna a Clustered indexet használni (table scan), mint az NC-t, és aztán még a Clustereden is végigmenni. (Ha van Clustered index is egy táblán -szinte mindig- akkor az NC index nem éri el közvetlenül a sorokat, hanem még át kell neki menni a Clustereden is. Ha valaki érdekel, miért, legközelebb leírom.)

Na, de miért nem tudja hány sor jön vissza? Azért, mert a 2000 mindig, a 2005 is alapban az egész batchet egyben lefordítja, és optimalizálja. Azaz úgy próbál végrehajtási tervet generálni, hogy nem futtatta még le a kódot, így nem ismeri @a értékét. Hogy lehet így statisztikát használni? Ilyenkor csak heurisztikákat (okos blöfföket) tud használni a szerver. Pl. ha where oszlop = @a, akkor legyen 10% a szelektivitás, azaz tegyük fel, hogy a sorok 10%-a jön vissza. A >, <, between 30 %-kal számolandó. Táblánk kb. 20e soros. Ennek 10%-a 2000 sor. A becsült tervben 718 sor ígérnek, ez a tábla 3.6%-a. Honnan jön neki ez a szám? Ilyenkor általában a statiszkáiból próbál kimazsolázni valamit. Kicsit mögé nézve: dbcc show_statistics ('Person.Contact', IDX_LastName) Name Updated Rows Rows Sampled Steps Density Average key length String Index IDX_LastName Dec 17 2006 3:45PM 19972 19972 200 0.5642176 15.2126 YES All density Average Length Columns 0.0008291874 11.2126 LastName 5.00701E-05 15.2126 LastName, ContactID Ezzel nem jutottunk előbbre, régebben a 20000 x 0.0008291874 hozott volna valami közeli eredményt a tervben láthatóhoz, de ez most nem jön be, mert az 16 sort hozna be. Van viszont itt egy érdekes dolog, az első sorban. String Index, YES. Ez egy új, 2005 fícsör. „SQL Server 2005 introduces additional information collected by statistics created on char, varchar, varchar(max), nchar, nvarchar, nvarchar(max), text, and ntext columns. This information, called a string summary, helps the query optimizer estimate the selectivity of query predicates on string patterns. String summaries lead to more accurate estimates of result set sizes and frequently better query plans when LIKE conditions are present in a query. This includes conditions such as WHERE ProductName LIKE '%Bike' and WHERE Name LIKE '[CS]heryl'.” Szóval nehéz helyzetekben, ha még a szűrő kifejezés elejét se ismerjük (esetünkben semmilyen részét), akkor is segíthet a string summary. Talán ez súg neki, onnan a 718 sor. No, de lépjünk tovább, hogy látszódjon, végre, mire akarok kilyukadni. A 2005 egyik, szerintem nagyon fontos új szolgáltatása a statement level recompile. Azaz, ha az optimizer úgy érzi, akkor menet közben is nekiláthat egyes parancsokat újrafordítani, új tervet generálni hozzá. Ilyet a 2000 is csinált, csak a teljes batch-re, ami marha nagy költségű volt. Ő viszont most akár egyetlen parancsot is újra tud fordítani. Dehát akkor az előbbi lekérdezést, a változóst is újrafordíthatná, így a változó értékének ismeretében már pontos becslése volna, hány sor jön vissza, így optimális tervet generálhatna. És tudja, és tudja! declare @a nvarchar(50) set @a = 'ac%' select * from Person.Contact where LastName like @a --'Ac%' option(recompile) EP: select * from Person.Contact where LastName like @a --'Ac%' option(recompile) |--Nested Loops(Inner Join, OUTER REFERENCES:([Person].[Contact].[ContactID])) |--Nested Loops(Inner Join, OUTER REFERENCES:(LikeRangeStart([@a])...) | |--Compute Scalar(DEFINE:([ConstExpr1003]=LikeRangeStart([@a]) | | |--Constant Scan | |--Index Seek(OBJECT:([Person].[Contact].[IDX_LastName]) |--Clustered Index Seek(OBJECT:([Person].[Contact].[PK_Contact_ContactID]) Költség: 8.2ms!!! Kicsit ugyan ágasbogasabb a végrehajtási terv, de ez csak a skalár (@a) tervbevétele miatt van. Profilerben nézve az SQL:StmtRecompile esemény remekül jelzi, hogy az utasítást újrafordította a szerver. Imádom ezeket az apró, de hihetetlenül hasznos kis újításokat az SQL Serverben.

String split SQL-ben, másodszor

Filed under: SQL Server — Soczó Zsolt @ 12:04

Korábbi bejegyzésemben bemutattam egy agyament string splitet, tisztán sql lekérdezéssel megoldva. Én azért annyira nem iszonyodok a procedurális módszerektől, főleg, ha azok 100-szor átláthatóbb kódot eredményeznek, mint ama perverz példa. Én valahogy így spliteltem legutóbb egy feladat kapcsán:

declare @path nvarchar(2048)
set @path = ‘/alma/korte/barack’

declare @slash_pos int, @next_slash int
declare @path_component nvarchar(256)
declare @path_prepared nvarchar(2050)
set @slash_pos = 1

if (right(@path, 1) != ‘/’)
 set @path_prepared = @path + ‘/’
else
 set @path_prepared = @path

while(@slash_pos < len(@path)) begin  set @next_slash = charindex('/', @path_prepared, @slash_pos+1)  set @path_component = substring(@path_prepared, @slash_pos+1, @next_slash-@slash_pos-1)  set @slash_pos = @next_slash  print @path_component end Nekem ez ezerszer átláthatóbb, mint a táblás-hekkelős megoldás.

Mikor megy vissza a RAISERROR kimenete a kliensre (SQL Server 2005)?

Filed under: Adatbázisok,SQL Server 2005 — Soczó Zsolt @ 11:56

When RAISERROR is run with a severity of 11 or higher in a TRY block, it transfers control to the associated CATCH block. The error is returned to the caller if RAISERROR is run:
·         Outside the scope of any TRY block. (még szép)
·         With a severity of 10 or lower in a TRY block. (Infómessage-eket nem nyeli le, azok visszamennek, mint rowcount vagy print kimenete)
·         With a severity of 20 or higher that terminates the database connection. (érthető)

 

Azaz a TSQL try/catch lenyeli a hibákat, hasonlóan, mint ahogy a C# try/catch lenyel egy exceptiont. A catchben aztán raiserrorral lehet saját hibát visszaadni a hívónak, ala rethrow. Valamiért az én fejemben (valamelyik beta alapján) az volt, hogy a try/catch ellenére is visszamennek a hibák a kliensre, de szerencsére ez nem így van. Örülünk.

VS 2005 SP1 Vistán

Filed under: Vista,VS 2005 — Soczó Zsolt @ 11:51

Felraktam a jószágot, kétszer futott neki, mert egyszer felment a sima VS-re, egyszer meg a Team Explorerre is (ezt külön kellett felrakni, de részévé vált a vsnek).

Van hozzá még ez:

Visual Studio 2005 Service Pack 1 Update for Windows Vista Beta

Ezek nélkül is lehetett dolgozni a vs-sel, csak időnként befagyott. Pl. ha unit teszteket debugoltam, nem mindig jött vissza a debugból, újra kellett indítani, illetve időnként rapaint problémái is voltak. Januárban kiderül, mennyit javítottak rajta.

2006.12.20.

Szellemes string.split tsqlhez

Filed under: Adatbázisok,SQL Server — Soczó Zsolt @ 14:56

Vakargatja egy darabig az ember a fejét, mire megérti, egyelőre viszont elég gyorsnak tűnik. Ennek ellenére nézek egy-két alternatív megoldást is.

2006.12.12.

Raccista, vagy nem raccista?

Filed under: Élet — Soczó Zsolt @ 13:16

Életveszélyesen megfenyegették a mentősöket
http://index.hu/politika/bulvar/mento5704/

Amikor elolvastam a címet, magamban egy hang rávágra: cigányok. Aztán, mikor tovább olvastam:

“A helyszínen összegyűlt a beteg népes rokonsága, akik halállal fenyegették meg a mentősöket”.

Ekkora már biztos voltam a vélményemben, fenntartva 1%-ot a tévedére.

Akkor most rasszista vagyok? Vagy, csak hajlandó vagyok szembenézni a tényekkel, és kimondani azt a nyilvánvaló állítást, hogy a cigányok többsége nem akar a többség által képviselt emberi normák szerint élni (a többség nem a magyar többségre, hanem a békés egymás mellett élést óhajtó többségre vonatkozik)?

Kéretik nem a cigányok halálát kiáltó kommenteket hagyni, azokat úgyis kimoderálom. Nem vagyok erőszakos ember, velük szemben se az a megoldás. Nem tudom mi a megoldás, csak azt, hogy a tétova nézés és az emberek hülyítése sem az.

A szemetekre márpedig vigyázzatok

Filed under: Élet,Személyes — Soczó Zsolt @ 12:56

Elmesélem Bálint kisfiam kálváriáját, amely sajnos még nem ért véget, de remélem már a kilábalás irányába tart.

Egy hete feleségem észrevette, hogy piros Bálint egyik szeme. Megnéztük, volt benne egy kis fekete pötty. Megpróbáltuk óvatosan zsebkendővel kiszedni, de nem sikerüt. Háziorvos felhív, azt mondja, menjünk be hozzá beutalóra, aztán az érdi szemorvosi rendelőbe (a’la SZTK). Hogy ilyenkor mi a francnak kell körbeutazni a vidéket, érintve a háziorvost is, miért nem lehet valahogy elektronikusan intézni a dolgot, nem értem, de mondjuk, hogy értem (fontosabb dolgokra sincs pénz).

Rendelőben szimpatikus, kb. 70 éves néni az orvos (nem túlzok, tényleg szimpatikus volt, és tényleg 70 éves). Megnézi, hát, van benne valami. Érzéstelenítő csepp, várakozás, megpróbálja megpiszkálni. Bálint persze ugrál, hozzá se tudott érni a pöttyhöz. Láttam, mert én fogtam Bálintot, ott volt a szeme 10 centire tőlem.

Majd mondja a néni, hogy meg is vagyunk, ő most meglazította az idegentestet (láttam, hogy nem, 100%), csöpögtessünk rendszeresen, pár nap alatt ki fogja lökni a szem. Kicsit nyugtalankodunk, de hátha, ő a doki (habár bennem nagyon nincs tekintélyelv, de ebben az esetben nem volt infóm a helyes döntéshez, kénytelen voltam megbízni benne).

Ez volt szerdán. A hétvégén már elkezdtünk aggódni, hogy mennyi idő kell még, hogy kilökődjön?

Főleg, hogy utánaolvasva ilyet találtam:

“… fémtartalmú szemcsék, melyek, ha bennmaradnak [a szemben], körülöttük 1-2 nap alatt rozsdagyűrű, illetve gyulladásos udvar keletkezik a szaruhártyán, s ekkor már sokszor maradandó homállyal gyógyulnak, melyek látásromlást okozhatnak.” Kurvaélet, ez már ilyesztően hangzik.

Ezért hétfőn elmentünk egy helyi magánszemorvoshoz. Pokrócba csavarva Bálintot, helyi érzéstelenítéssel kiszedte a kis darabot, több apró darabban, egy fültisztítő pálcikával (vagy annak látszó tárggyal). Csodálkozott, hogy lehet az, hogy nem szedték ki, és már egy hete benne van? Mondtuk, hogy mi a is csodálkoztunk, de eddig vártunk, elvégre nem mi, hanem a doki mondta, hogy így van ez jól. Azt mondta, menjünk be a Heim Pálba, nézzék meg mikroszkóppal, mert szemre nem lehet garantálni, hogy nem maradt benne semmi.

Bementünk, ott készségesen fogadtak, szerencsére már várni se kellett. Először ott is lehaltak, hogy már egy hete benne van valami, hogy lehet ilyet tenni. Aztán azon, hogy miért piszkálták ki kézzel, ezzel jól felsértve a szaruhártyát, mikor erre van egy kis célszerszám a kórházban, amivel roncsolásmentesen lehet kiszedni az idegentesteket.

Megnézték mikroszkóppal, ehhez még lefogni se kellett szegényt, mert érdekes volt, hogy világít a szemébe a lámpa. Mondta, hogy már nincs benne szemcse, de maradt egy rozsdagyűrű (szabad szemmel kb. 1mm-es), amit viszont nem állnak neki eltávolítani, mert már úgy meg volt kínozva a szaruhártya, hogy nem akarták tovább rongálni. Kapott egy fedőkötést, amit ma szedtünk le. Egy hétig pihentetjük a szemét, akkor újra nekilátnak, és eltávolítják valami fúrónak nevezett szerkezettel a rozsdát.

Nem vagyok kifejezetten jókedvű ezen események miatt, talán azért is írtam az ezt megelőző, kissé pesszimista bejegyzést.

A háziorvos szerint ez már a sokadik panasz az érdi szemészettel kapcsolatban, ő is a Heim Pált javasolja hasonló esetekben (ott dolgozott korábban).

Ami erre még rátesz egy lapáttal, és ami miatt, ha igaz a hír, akkor kibaszottul dühös vagyok fletó bandájára, hogy januártól nem mehetünk a Heim Pálba, mivel nem az a körzetileg illetékes, csak Érdre. Vakuljon meg az ember fia, a szar kezelés miatt. Mondom, nem tudom igaz-e a hír, nem követem a politikát, de attól tartok, a háziorvos jól ismeri, milyen törvényi változások várhatók.

Tényleg ennyire bolond a világ?

Filed under: Élet,Személyes — Soczó Zsolt @ 11:10

Vagy csak a bulvár találja ki ezeket a baromságokat?

Szexuális zaklatással vádoltak meg egy négyéves kisfiút az Egyesült Államokban. Az ok: az iskolai előkészítőbe járó fiúcska átölelte az intézmény női alkalmazottját és megérintette a mellét.

Hát bazdmeg, lehet, hogy a korommal jár, de néha már én is úgy érzem, hogy annyira kibaszottul elerodálodott már a mai világ embere (a generációkon átívelő aberrációs fertőzés miatt), hogy egy isteni shutdown kellene már erre az oprendszerre, és kissé másképp megválasztva a kezdeti feltételeket újraindítani a világot.

Persze, ha Isten nem létezik vagy nem avatkozik bele a rendszerbe (én az utóbbira szavazok), akkor nincs mese, nekünk kell ebből kilábalni. Mindenki kezdje a saját házatáján. Én is ezt teszem. 30 év múlva, mikor Bálint 32 éves lesz, kiderül, hogy sikerült-e.

2006.12.11.

Vista Run as administrator bosszatások

Filed under: Szakmai élet,Vista — Soczó Zsolt @ 18:52

Vistán ugye az admin se admin. Ok, ez szép dolog, segítenek az önmegtartóztatásban. Ha valamit mégis adminként kell elindítani, akkor jöhet a Run as admin menüpont. Cool. Csakhogy, ekkor más környezetben találjuk magunkat.

Pl. a substolt drive-ok nem látszanak. A batch-ek elérési útjai elszaródnak. A környezeti változók mások, a user függő beállítások elvesznek, dpapi titkoknak annyi, stb. Szóval egyelőre nem békültem ki az új secu rendszerrel. Csak mondok egy egyszerű, bosszantó példát.

Volt egy jó kis msi-m (igen, enterspájzban ebben van minden), és az leállt valamilyen hibával telepítés közben. A megoldás: adminként kell telepíteni. Beleraktam egy batba: msiexec -i ize.msi, a baton jobb gomb, Run as admin. És nem! Nem találja a misi fájlt, mivel a c:\windows\system32-re váltott át, a run ad miatt. No, ezért nem szeretem én ezt, lehet, hogy szegény UAC ki lesz kapcsolva.

Lehet megkövezni.

2006.12.08.

Powershell bevezető

Filed under: .NET,IIS,PowerShell,Scripting,Szakmai élet — Soczó Zsolt @ 09:29

Némi IIS7-tel fűszerezve. 10 perces kis olvasmány, az a csóka műve, aki az msdn magazinban a tesztelős cikkeket írja. Értelmes ember, értelmes cikk.

2006.12.06.

Omea úr szétüti az IE7-et Vistán

Filed under: Szakmai élet,Vista — Soczó Zsolt @ 15:29

Elszáll tőle, C runtime hibával. Ki kell kapcsolni az omea helper ojjektumokat.

Ő is belefutott, leírta, mit látott.

Én a Start | All Programs | Accessories | System Tools | Internet Explorer (No Add-ons)  alatt kapcsoltam ki a  3 omea helper ojjektumot.

Amúgy nekem nagyon bejött ez a Vista, szinte már csak abban dolgozok, bár még fenn van az XP egy másik partíción. Ami nagyon tetszett pl., hogy rádugtam a kamerámat, és szó nélkül felismerte, és már lehetett is róla leszedni a fimet. Xpn ez kínkeserves volt, a szar sony driverek miatt, ezért vár már 6 kazetta feldolgozásra.

2006.12.04.

Vista Resource Monitor

Filed under: Szakmai élet,Vista — Soczó Zsolt @ 11:21

A számítógépek egyik legbosszatóbb tulajdonsága, hogy várni kell rájuk. Legalábbis Windows XP alatt, Linuxon gondolom nem. :)

Na, a várakozások, megakadások egyik fő oka nálam, hogy vár a gép a vinkóra. Ilyenkor mindig elővettem a File Monitort, és néztem ki az az állat, aki szétreszeli a vinyót. Általában az Omea Reader volt a bűnös, de az Office 2007-tel az Outlook is beállt a sorba.

Vista alatt vettem észre, hogy a Task Managerből megnyitható egy Resource Manager. Ebben a Diszk nézet alatt szépen látszik a processzek hdd használata Byte/min egységben. Ez valóban remek dolog, ha hosszabb idejű a terhelés, rövid burstöket nem tudom, kimutat-e? Ha nem csak percenként átlagolna, akkor még erre is jó lenne. Mindenesetre tetszik, sokszor segíthet még ez.

Powered by WordPress