2010. március 10., szerda

MS-SQL developer wanted

Ez úton is köszönöm mindenkinek, aki jelentkezett .NET fejlesztőnek. (tesztelők jelentkezését még mindig várom!)
Ezúttal egy SQL gurut keresek:

SQL Fejlesztő

  • Legalább 3 év SQL Server / T-SQL fejleszési tapasztalat
  • Műszaki végzettség
  • Angol nyelvtudás írásban és szóban
  • .NET / ASP.NET ismeret előny

A munkavégzés helye Budapest belvárosa.
Jelentkezni a geri@otperc.net címre küldött önéletrajzzal lehet.

2010. március 3., szerda

Windows 7 multi-monitor trükkök

Tudta Ön, hogy Windows 7-en, ha több monitort használ, a WIN + SHIFT + Bal / Jobb kurzormozgató kombinációkkal ide-oda lehet dobálni az aktív ablakot a monitorok között?
Én eddig a zseniális UltraMon-t használtam (amit eztán is használni fogok, pl. a multi-taskbar támogatás miatt), de ez elég kényelmes, és out-of-the-box.

Az eredeti forrás (és további hotkey-ek lelőhelye) Bienor blogja.

2010. március 2., kedd

Megjelent az AppFabric Beta 2

Nemrégiben írtam az AppFabric-ba integrálódott Velocity-ről. Most ennek az AppFabric-nak jelent meg a második bétája – ez a kiadás támogatja a .NET 4 / Visual Studio 2010 duó Release Candidate verzióját.

A distributed cache vonalon az üzemeltetést könnyítő változásokat találhatunk(event log támogatás, PowerShell cmdletek cluster adminisztáláshoz) , illetve szofisztikáltabbá vált a memória kezelése azokban az esetekben, amikor sokkal több adatot próbálunk a cache-ünkbe gyömöszölni, mint amennyit annak fizikai memóriája elbírna.

Letöltés a http://msdn.microsoft.com/appfabric címről.

2010. február 23., kedd

Még több .NET fejlesztő kerestetik - Frissítve!

Újfent .NET fejlesztőt keresek. Nem is csak egyet, sőt, nem is csak egy területre:

ASP.NET Engineer (meglepő módon webes területre)

  • Legalább 3 év C# / .NET fejleszési tapasztalat
  • Kliensoldali webes technológiák (HTML, JavaScript, CSS) ismerete
  • Angol nyelvtudás írásban és szóban
  • SQL ismeret előny

.NET Developer (tesztelési területre)

  • Erős C#, .NET Framework (2.0-3.5) ismeretek
  • SQL ismeretek
  • Szoftverfejlesztési és -tesztelési módszertanok ismerete
  • Webes technológiák általános ismerete
  • Angol nyelvtudás írásban és szóban
  • Szoftvertesztelési tapasztalat előny
  • C++ tapasztalat előny


Update! További embereket is keresek, teszt területre. Ez nem annyira .NET, de hátha érdekel valakit... Nagy vonalakban teszt esetek kidolgozásáról és végrehajtásáról, a teszt konfigurációk telepítéséről és karbantartásáról, dokumentálásról szól.

QA Engineer

Az ideális jelölt
  • néhány év szoftver tesztelési tapasztalat rendelkezik
  • jó általános informatikai "rálátása" van (szoftverek, rendszerek működése, Windows adminisztráció, hálózati ismeretek)
  • automatizálási ismeretekkel rendelkezik (scriptelés, programozói tudás)
  • angol és magyarul egyaránt jól kommunikál írásban és szóban


A munkavégzés helye Budapest belvárosa.
Jelentkezni a geri@otperc.net címre küldött önéletrajzzal lehet.

2010. február 22., hétfő

Szóvégi üres karakterek SQL-ben

Ebből mi lesz?

-- Nincs space a szavakban
IF 'test' = 'test'
    PRINT 'Igaz'
ELSE
    PRINT 'Hamis'
    

-- Vegyük észre a szó eleji space-t
IF 'test' = ' test'
    PRINT 'Igaz'
ELSE
    PRINT 'Hamis'
    

-- Vegyük észre a szó végi space-t
IF 'test' = 'test '
    PRINT 'Igaz'
ELSE
    PRINT 'Hamis'

Ebből az lesz, hogy:

Igaz
Hamis
Igaz

Meglepő? Ezért.

2010. február 17., szerda

Saving changes is not permitted (SQL Server 2008)

Aki SQL Management Studio 2008-cal dolgozik, az belefuthatott már a jelenségbe, hogy bizonyos táblaséma-módosító műveleteket nem képes a grafikus felületen elvégezni. Például ha egy NULL értéket felvenni képes mezőtől szeretnénk elvenni ezt a képességét, akkor a sémamódosítás helyett jön az ábrán látható dialógus, ami aztán a "User canceled out of save dialog (MS Visual Database Tools)" című üzenetbe, majd az addigi módosításaink elvesztésébe torkollnak.

Ezzel azért örvendeztet meg minket a Management Studio, hogy emlékeztessen: ami a felületről 1-2 kattintás, az a rideg valóságban nem mindig olyan egyszerű. Az alábbi séma-módosító műveletek végrehajtása nem triviális:

  • Új mező beszúrása létező oszlopok közé
  • Oszlop törlése
  • NULL érték engedélyezése/tiltása
  • Oszlop adattípusának megváltoztatása
  • Oszlopok sorrendjének megváltoztatása
A végrehajtásuk annyira nem triviális, hogy igazából lehetetlen - az, hogy mégis elvégezhetők, annak köszönhető, hogy a Management Studio a háttérben egy ügyes scriptet generál és futtat. A script egy új táblát hoz létre a kívánt sámával, majd átbűvészkedi bele a régi táblában található adatainkat. Innentől az már csak névdonornak kell: eldobásra kerül, az újonnan létrejött tábla pedig felveszi a személyazonosságát. Pont olyan, mintha.
A GUI felől ebből semmi nem látszik, egy esetet kivéve: ha egy éles, terhelés alatt álló adatbázis sok rekordot tartalmazó tábláján machinálunk, mert azt tuti észre lehet majd venni a GUI felől is. Csak nem afelől a GUI felől, amelyik felől mi szeretnénk.

Ezt a működést hívhatjuk mondjuk "üzemeltető-barát" beállításnak (nehezebb nagy hülyeséget csinálni), fejlesztési időben viszont mezők jönnek-mennek, közelező adatokról derül ki, hogy nem mindig ismertek, és más anomáliák is gyakran történnek - tehát jól esne, ha nem szopatna minket még a Management Studio is.
Szerencsére néhány (hat) kattintással "fejlesző-baráttá" tehető a működés: a Tools -> Options -> Designers -> Table and Database Designers fülön a Prevent saving changes that require table re-creation opció elől ki vell venni a pipát:  Így már vidáman módosíthatunk a sémánkon. Érdemes néha a Generate Change Script gombra is rábökni, hogy miket gépel helyettünk össze a Management Studio. Köszönjük!

2010. február 16., kedd

Windows 7 (vs. VS)

A Windows 7 ezzel sokkol mostanában (mióta felkerült a Visual Studio 2010 RC). Van 3 Gibi RAM-om (igazából 4, de a 32 bites OS abból valamivel több, mint 3-at lát).

Elismerem, lehet olyan szituáció, amikor hasznos, hogy szól, hogy közel a vég - de nálam a devenv.exe 284 MB-ot eszik, ami ugyan nem kevés, de még mindig kevesebb, mint tizede az összes memóriának.
1.5G cache mellett is van még 800 mega szabad RAM-om.

Szerencsére (kis registry trükközéssel) kikapcsolható a dolog: Disabling the “Your computer is low on memory” and “Close programs to prevent information loss” dialogs.
Peace!

2010. február 15., hétfő

Senior .NET fejlesztő kerestetik

Szolgálati közlemény: webes területen tapasztalt .NET fejlesztő kerestetik, .NET 3.5 / C# 3.0+, ASP.NET (MVC és/vagy WebForms, Web Services), verziókezelő-rendszer használati tapasztalattal.
Bővebb információ, kapcsolat: http://ssp.cloudapp.net/dotnet.

2010. február 14., vasárnap

ASP.NET 4.0 Request Validation

Történt, hogy a Moxicode TinyMCE editor-ját szerettem volna használni egy MVC alkalmazásban - a válaszott platform és az IDE pedig természetesen mi más is lehetett volna, mint a .NET Framework 4.0 RC, illetve a Visual Studio 2010 RC.

Némi plumbing kód megírása után az elgondolás életre is kelt és prímán működött - egészen az első POST-ig, amiután a "System.Web. HttpRequestValidationException: A potentially dangerous Request.Form value was detected from the client (form-elem-neve="veszélyes-dolgok-pl-html")." üzenettel elragadott a Sárga Halál. Hát, persze, ilyesmit nem lehet POST-olni, mert a HTTP request validációja során az ASP.NET motor megtagadja a kérés viszolgálását, ha valami potenciálisan veszélyeset (pl. HTML kódot) talál a POST-olt értékek közt. Ki kell kapcsolni a validációt az adott oldalra.

Mi sem egyszerűbb ennél, az .aspx oldalunk @Page direktívájánál megmondjuk, hogy ValidateRequest="false", és kész is vagyunk. Illetve lennénk, ha ez egy WebForms alkalmazás lenne. Az MVC applikációnkat teljes mértékben hidegen hagyja ez a beállítás, és továbbra is validál. Kis keresés, és halleluja: az MVC motor máshol validál, mint a WebForms, itt a Controller feladata a validálás, és az Action-ökre rakott [ValidateInput] attribútummal szabályozhatjuk, hogy szeretnénk-e validálást, vagy sem. Editálás esetén nem akartam:

[ValidateInput(false)]
public ActionResult Edit(string id)
{
    return View();
}

Egyszerű - viszont ugyanúgy nem működött, mint az előző megközelítés. Itt már hosszabb és keservesebb nyomozás következett, de végül meglett az ok: ASP.NET 4.0 Beta 2-től megváltozott a default request-validálási módszer, már a BeginRequest alatt megtörténik. A változtatás azt célozza, hogy a request validation áldásos tevékenységét ne csak .aspx oldalakon, hanem webservice híváson, handlereken, egyebeken is élvezhessük.
Hogy ezt az új fajta validációt hogy lehet kikapcsolni, nem tudom; de vissza lehet térni a "régihez", ami tiszteletben tartja a direktívákat és attribútumokat, mindössze egy sort kell elhelyeznünk a Web.configunkban:

<httpRuntime requestValidationMode="2.0" />

Szintén 4.0-ás újdonság, hogy saját validátort is készíthetünk, amit szintén a httpRuntime elem attribútumaként adhatunk meg:

<httpRuntime requestValidationType="MyValidator, MyAssembly" />

Végezetül, ha kikapcsoljuk a "gyári" validációt, ne feledkezzünk meg helyette saját ellenőrző kódokat beépíteni.
Boldog Validálást!

2010. február 12., péntek

flee - Fast Lightweight Expression Evaluator

A flee (Fast Lightweight Expression Evaluator) pont az, ami a neve. Egy gyors, pehelysúlyú kifejezés kiértékelő - aki dolgozott már LINQ Dynamic Query Library-vel, annak nagyjából érthető miről van szó. Erről:

static void Main(string[] args)
{
    var ctx = new ExpressionContext();
    ctx.Variables.Add("now", DateTime.Now);
    var expression = ctx.CompileGeneric<string>("now.ToString(\"yyyy-MMMM-dd (dddd)\").ToUpper()");
    var result = expression.Evaluate();
    Console.WriteLine(result); // Output: "2010-FEBRUÁR-12 (PÉNTEK)"
}

Azaz egy sztring-kifejezésből, mint pl. a "sqrt(a^2 + b^2)" vagy a "now.ToString("yyyy-MMMM-dd (dddd)").ToUpper()" képes IL kódot előállítani. A kifejezésünk nyelve kicsit C#, kicsit VB, erősen típusos, de nem case sensitive...

A flee LGPL licencelésű, ami praktikusan azt jelenti, hogy ha (az egyébként letölthető) forráskódján nem módosít az ember, csak a lefordított assemblyt referenciálja, akkor szabadon használható akár nyílt, akár zárt, non-profit vagy for-profit feljesztésekben egyaránt.