2010. február 28., vasárnap

Managed DirectX - Geometriai primitívek

Most amikor már a DirectX 11-es kiadásánál tartunk el lehet azon gondolkodni, hogy van e értelme a DirectX 9-es verziójával foglalkozni. Az biztos, hogy az Xbox360 konzol még jó ideig csak ezt fogja támogatni és sok helyen még mindig az XP operációs rendszer van, ezért legalább egy D3D9 rendert mindenképpen érdemes implementálni a rendszerhez. Kezdésnek is talán picivel egyszerűbb a DX9, mert nem kell rögtön a shader programozást is megtanulni egy egyszerű háromszög kirajzolásához. Ezért én úgy gondolom, hogy mindenképpen érdemes a D3D9-el megismerkedni.
Az előző leckében létrehoztuk első háromszögünket. Most újra nekiindulunk és megismerkednünk a többi geometriai primitívvel is és a lehető legegyszerűbben hozzuk létre a DX Device-t.

Geometriai primitívek

Látványos grafikai képek készítéséhez meg kell ismerkednünk az alapvető háromdimenziós grafikai primitívekkel, amik elérhetőek a DX-en belül. A Direct3D-ben hatféle primitívet használhatunk.
  1. PointList – különálló pontok halmaza. A megadott vertexek különálló pontként jelenik meg, anélkül, hogy szakaszokkal összekötnénk őket.
  2. LineList – különálló szakaszok. A vertexek a megadott sorrend alapján, páronként szakaszokat alkotnak, ezért páros számú vertex megadása szükséges.
  3. LineStrip – szakaszsorozat. Hasonló a LineList-hez, azzal a különbséggel, hogy sorban összeköti az összes pontot, tetszőleges hosszúságú szakaszsorozatot előállítva. Az első vertex adja az első szakasz kezdőpontját a második vertex a végpontját és egyben a következő szakasz kezdőpontját – és így tovább.
  4. TriangleList – különálló háromszögek. A megadott vertexek sorrendben és hármas csoportokban definiálnak egy-egy háromszöget. Lényeges a vertexek sorrendje, ugyanis az éppen érvényben lévő bejárási módszer függvényében meghatározza, hogy az adott háromszög látható-e vagy sem.
  5. TriangleStrip – háromszögek sorozata közös oldallal. Az első három vertex adja az első háromszöget, és minden további vertex egy további háromszöget definiál, amelynek két vertexe az előző háromszögből származik.
  6. TriangleFan – legyező háromszögek. A háromszögek legyezőszerű elrendezése, amelyben minden háromszög egy közös csúcsponton osztozik.
A leírtakat jól szemlélteti a lenti ábra:

DirectX primitívek

A következő példaprogram a DX primitíveket mutatja be. A Form-on elhelyezünk egy Panelt, a DirectX a panelra fog rajzolni. Majd egy ComboBox segítségével tudunk majd váltani a primitívek között:
using System;
using System.Drawing;
using System.Windows.Forms;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;

namespace MDX_Rendering_Primitives
{
public partial class MainForm : Form
{
private Panel panel = null;
private Device device = null;
private ComboBox comboBox = null;

public MainForm()
{
InitializeComponent();
{
this.ClientSize = new Size(800, 600);
this.Text = "MDX - Rendering Primitives";
this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true);
this.Focus();
}

comboBox.SelectedIndex = 2;
InitDevice();
}

private void InitDevice()
{
PresentParameters presentParams = new PresentParameters()
{
Windowed = true,
SwapEffect = SwapEffect.Flip
};

device = new Device(0, DeviceType.Hardware, panel.Handle, CreateFlags.SoftwareVertexProcessing, presentParams);
}
A Form és a DX device létrehozása után írjuk meg az OnPaint metódust:
        protected override void OnPaint(PaintEventArgs e)
{
CustomVertex.TransformedColored[] vertexes = new CustomVertex.TransformedColored[6];
CustomVertex.TransformedColored[] tempvert = new CustomVertex.TransformedColored[6];

vertexes[0].Position = new Vector4(100, 150, 0, 1.0f);
vertexes[0].Color = Color.Red.ToArgb();

vertexes[1].Position = new Vector4(50, 50, 0, 1.0f);
vertexes[1].Color = Color.Green.ToArgb();

vertexes[2].Position = new Vector4(100, 25, 0, 1.0f);
vertexes[2].Color = Color.Blue.ToArgb();

vertexes[3].Position = new Vector4(150, 50, 0, 1.0f);
vertexes[3].Color = Color.Yellow.ToArgb();

vertexes[4].Position = new Vector4(200, 100, 0, 1.0f);
vertexes[4].Color = Color.Red.ToArgb();

vertexes[5].Position = new Vector4(200, 200, 0, 1.0f);
vertexes[5].Color = Color.Green.ToArgb();

device.Clear(ClearFlags.Target, Color.Black.ToArgb(), 1.0f, 0);

device.BeginScene();
{
device.VertexFormat = CustomVertex.TransformedColored.Format;

switch (comboBox.SelectedIndex)
{
case 0: device.DrawUserPrimitives(PrimitiveType.LineList, 3, vertexes);
break;
case 1: device.DrawUserPrimitives(PrimitiveType.LineStrip, 5, vertexes);
break;
case 2:
{
device.RenderState.PointSize = 5.0f;
device.DrawUserPrimitives(PrimitiveType.PointList, 6, vertexes);
}
break;
case 3: device.DrawUserPrimitives(PrimitiveType.TriangleList, 2, vertexes);
break;
case 4:
{
tempvert[0] = vertexes[1];
tempvert[1] = vertexes[2];
tempvert[2] = vertexes[0];
tempvert[3] = vertexes[3];
tempvert[4] = vertexes[5];
tempvert[5] = vertexes[4];
device.DrawUserPrimitives(PrimitiveType.TriangleStrip, 6, tempvert);
}
break;
case 5: device.DrawUserPrimitives(PrimitiveType.TriangleFan, 4, vertexes);
break;
default:
break;
}
}
device.EndScene();
device.Present();
}
Az OnPaint() metódusban a következő ábrának megfelelő primitíveket készítjük el. A TriangleStrip esetében meg kell változtatni a vertexek sorrendjét:


Ha a ComboBox kiválasztott eleme megváltozik, akkor a Form újrarajzolását fogjuk kikényszeríteni:
        private void comboBox_SelectedIndexChanged(object sender, EventArgs e)
{
Invalidate();
}
Ezzel el is készültünk:


A példa teljes forrása itt tekinthető meg:


Ha valamit kihagytam volna vagy valami nem érthető, semmi gond, legközelebb is innen folytatjuk.

2010. február 27., szombat

Magyarország, én így szeretlek – újratöltve

Nem tudhatom, hogy másnak e tájék mit jelent,
nekem szülőhazám itt e lángoktól ölelt
kis ország, messzeringó gyerekkorom világa.
Belőle nőttem én, mint fatörzsből gyönge ága
s remélem, testem is majd e földbe süpped el.
Itthon vagyok.

A Soproni a „Magyarország, én így szeretlek” után újabb, a hazaszeretet témájában mozgó reklámfilmet hozott ki.


Magyarország, én így szeretlek – újratöltve

A reakciók most sem maradtak el, egy-két fórum csak úgy forrongott a véleményektől. Nem is értem, hiszen csak egy reklámfilm…vagy valamivel mégis több. Nekem személy szerint nagyon tetszett!!! Újra egy igényes, egyszerű és kellemes reklámfilm, ami mindig megtudja dobogtatni az ember szívét. Ha arra gondolok, hogy milyen kampányfilmekkel próbáltak eddig elérni hozzám a magyar pártok, akkor azt kell mondanom, hogy én a sopronira szavazok.
Mások szerint nem ízléses dolog Radnóti versét sörreklámmal összekötni. Mások szerint nem ízléses hazafias gondolatokkal termékeket eladni. Mások szerint még a himnuszt sem szabad csak úgy spontán elénekelnie. Kérdezem én, miért nem? Én külön örültem a Radnóti versnek, gyönyörű, gyönyörű képekhez lett bevágva és biztos vagyok benne, hogy sokkal többen olvasták el a verset, mint eddig bármikor. Többen gondolkodtak el rajta, mint eddig bármikor. A hazafiasság nem üzlet és nem kiváltság kérdése, egy belső lelki állapot és mindenki úgy éli meg, ahogy akarja. Vagyis akár egy sörgyár is dönthet úgy, hogy a nagymellű csöcsös csajok helyett inkább a nemzeti érzést veszi kiindulásul filmjeihez. És igen is, én szeretem Magyarországot és olyan szépnek látom, mint a soproni reklámfilmben és igen is jó érzés, ha egy pici hazafiasság átjön a médián keresztül! Csak egy qurva nagy baj van, hogy a magyarok nem szeretik, ha emlékeztetik őket arra, hogy magyarok. Ezen kéne elgondolkozni és nem egy reklámfilmen összeveszni. És most lehet száraz kiflivégekkel megdobálni…


Radnóti Miklós - Nem tudhatom

Tetszőleges szöveg szavait kigyűjtő algoritmus

Egyedi kereső rendszer fejlesztésénél, vagy statisztikai alkalmazások írásánál hasznos funkció lehet a következő: egy függvénynek megadunk egy tetszőleges szöveget, melyből a függvény kigyűjti a minimum három karakteres szavakat úgy, hogy az eredmény listában minden szó maximum csak egy példányban szerepeljen. További extra lehetőség, hogy megadhatunk egy szó listát, melyben felsorolhatjuk azokat a szavakat, amelyeket nem szeretnénk az eredménylistában látni.
Függvényünk a Split nevet kapta és két paramétert vár: a felbontandó sztringet, valamint azon szavak listáját mely nem kerülhet az eredménybe. Visszatérési értékként egy sztringeket tartalmazó tömbben adja a függvény az eredményt.
private string[] Split(string s, SortedList exclude)
{
Az eredményeket egy SortedList osztályban tároljuk, melybe a sztringek rögtön ABC szerint rendezett formába kerülnek, így a listában történő keresés is gyorsabb lesz.
 SortedList sl = new SortedList();
string tmp = "";
Kezdeményezünk egy ciklust, mely végigmegy a kapott sztring minden karakterén.
 foreach (char c in s)
{
Ha a karakter szám vagy betű, vagy az aláhúzás karakter, akkor azt tároljuk egy átmeneti sztringben.
   if (Char.IsLetterOrDigit(c) || c=='_')
{
tmp += c;
}
Bármi egyéb típusú karakter esetén úgy tekintjük, hogy az adott szó véget ért. Ebben az esetben ellenőrizzük, hogy az adott szó minimum három karakteres-e, vizsgáljuk, hogy van-e már az eredménylistában, mivel oda minden szó csak egy példányba kerülhet. Megnézzük azt is, hogy a szó nem szerepel-e a paraméterként kapott tiltó listán. Ha a szó minden próbált kiállt, csak akkor kerülhet a SortedList elemei közé.
   else
{
if (tmp.Length > 2)
{
if (sl.IndexOfKey(tmp) == -1)
{
if (exclude.IndexOfKey(tmp) == -1)
{
sl.Add(tmp, null);
}
}
}
tmp = "";
}
}
A ciklus futása után már csak elő kell állítanunk egy sztring tömböt a megfelelő tartalommal. Ehhez a SortedList Keys property-jének CopyTo függvényét használjuk, mellyel egy tömbbe másolhatjuk az ott található elemeket.
 string[] result = new string[sl.Count];
sl.Keys.CopyTo(result, 0);
return result;
}
A függvény felhasználása most már egyszerű: létrehozunk egy tiltó listát a szükséges szavakkal, majd meghívjuk a Split függvényt.
private void button1_Click(object sender, System.EventArgs e)
{
SortedList exclude = new SortedList();
exclude.Add("akár", null);
exclude.Add("ahogy", null);
exclude.Add("ahol", null);
exclude.Add("akkor", null);
listBox1.Items.Clear();
listBox1.Items.AddRange(Split(textBox1.Text, exclude));
}
Forrás: http://softwareonline.hu/

A láthatatlan univerzum - Szezám tárulj

Ezeréves privilégiuma minden mesemondónak, hogy története fonalát valamely útszéli fogadóban kezdje el legombolyítani, ahol sok utas verődik össze, és ahol mindegyikük természete mindenféle mesterség nélkül megmutatkozik. Nohát, a matematika se különb ennél, olyan tájakra kalauzolja el néha az embert, ahol sokszor fantomok ijesztgetik a békés vándort. Ezért azt mondom, a legjobb róla csak beszélgetni egy jó pofa sör mellet, ami nemcsak hogy jókedvre derít, de még kitárja előttünk a gondolkodás ablakát is. Kezdjünk is hozzá.

Szezám tárulj

Képzeletbeli utunk során rögtön a végtelen világába érkezünk meg. Ez nem is csoda, hiszen az első matematikai „fantom” nem más, mint maga a végtelen fogalma. Ennek elképzeléséhez bizonyos elvonatkoztatás szükséges, ezt pedig oly módon kell elvégezni, hogy az a legkisebb rejtett ellenmondást sem tartalmazza.
Ha elképzeljük valamely tárgyak „halmazát”, minden nehézség nélkül megállapíthatjuk e tárgyak számát. A gyakorlatban ez általában véges lesz, gondoljunk csak az asztalunkon lévő sörök számára. De vigyük ezt az absztrakciót egészen a végtelenségig, tételezzük fel, hogy vannak olyan asztalok, akarom mondani „halmazok” amelyekben a sörök, azaz a tárgyak száma végtelen. Ilyen például a pozitív egész számok, más néven a természetes számok halmaza. Ez a végtelen halmazok úgymond prototípusa. Na de, mi van akkor, ha két végtelen halmaz van a kezünkben? Feltételezhetjük e azt, hogy mindkét halmaz ugyan annyi számjegyet tartalmaz? Egyetlen útja van annak, hogy erre a kérdésre megtudjuk a választ, mégpedig az, hogy megszámláljuk őket. Úgy ahogy azt egy kosár alma és körte esetében tennénk meg. Kezdjük hát el kiszedegetni a halmazokból a körtéket és az almákat – akarom mondani a számjegyeket –, és tegyük félre, amit kiszedtünk, hogy lássuk, mi marad meg végül az egyik kosárban. A természetes számokat úgy fogjuk kiszedni, hogy értékük egytől felfele nőjön és közben egy sem maradjon ki. A számjegypárosok kiszegetése a mi esetünkben soha nem fog véget érni, de ha minden soron következő szemjegyünkhöz meg lesz a párja a másik kosárból, akkor minden „almának” meg lesz a maga „körtéje” és így nem marad más hátra, mint kijelenti: a számjegyek száma a két halmazban egyenlő volt.
Sajnos nem minden végtelen egyforma, a végtelen halmazok egész sora pontosan „ugyanannyi” egységből áll, mint a természetes számok halmaza, de vannak olyan halmazok is amelyekben az egységek mennyisége összehasonlíthatatlanul nagyobb. Ezekről bebizonyítható, hogy miközben mi a számlálási eljárásunk során szedegetjük ki a kosárból az összes természete számot, a másik kosárban annyi marad belőlük, hogy azt a természetes számokkal össze sem lehet vetni. Ez volt az első fantom, amellyel a matematikusok a halmazelmélet megalkotása során találkoztak. Bár George Boole már jóval korábban megtette a kezdőlépéseket, az absztrakt halmazelmélet első rendszeres kifejtésére egészen a tizenkilencedik század végig kellett várni, amikor George Cantor, német matematikus közzétette korszakalkotó eredményeit. Cantor elméletének alapjai a halmazok „aritmetikájára” épült. Így lehetségesé váltak olyan elképzelések is, miszerint hogy ha valamiből elveszünk min-dent mégsem fog elfogyni belőle semmi sem, számunkra ez legfeljebb a mesékből ismert. Ne is csodálkozzunk azon csöppet sem, hogy a halmazelmét megalkotója elborult elmével fejezte be életét, de munkássága fennmaradt az utókornak és a felső matematika egyik legnagyobb fegyverévé vált az idők során...

Command and Conquer: Tiberian Sun Free

A 2008-ban megjelent klasszikus Westwood/EA stratégiajáték teljes változata tölthető le az oldalról, amely tartalmazza a Firestorm kiegészítőt. A szoftvert letöltése után a Program Files/EA Games könyvtárba csomagoljuk ki, vagy másoljuk át, indítása a parancsikon segítségével történhet.


C&C Tiberian Sun Trailer

2010. február 21., vasárnap

C# a hülyegyerek a bitek homokozójában???

Sokan kritizálják és nevetik körbe a .NET-et még mind a mai napig. Pedig nem kellene. A .NET berobbanásakor mindenki nagyot nevetett azon, hogy lesz egyszer Managed OS (lásd Singularity) "bebootol a .NET" (hahaha) és azon, hogy Xboxra lehet majd írni C# játékot (elindul a framework a boxon, haha…). Ma ez már természetes, senki nem lepődik meg rajta. Ha picit visszább megyünk az időben az assembly mellett semmi mást nem lehetett elképzelni, amivel játékot lehet fejleszteni. Aztán jött a C nyelv. Ámen. De vele jött a szöveg is, hogy hmmm…a C túl lassú, nem lehet gyors grafikát készíteni vele. Nem volt sem C sem Pascal kód ASM betét nélkül, ami gyors lett volna. Aztán ugyanezt elmondták a C++ ról. Nem jó, túl lassú, az OOP támogatás egyenesen idő megállító lassúságú!!! Ez volt akkor a szöveg! Most meg már arról megy az érvelés, hogy a C++ mennyire marhagyors és ez a jövő. És aki nem C++ fejlesztő az csak hülye gyerek a bitek homokozójában. Egy programozó sohasem lehet annyira merev, hogy csak megszokásból és kényelemből nem ismer meg új technikákat és technológiákat. Minden feladatnak meg van a maga informatikai megoldása, tudni kell választani. Hiszen CODING 4 FUN!

2010. február 20., szombat

Tao Start 05 - Test felépítése poligonokból

Itt az ideje, hogy végre készítsünk egy igazán 3D programot. Az előző OGL leckében szereplő példát fogjuk kiegészíteni, mert abban már benne van a vetítés. A Paint() eljárásban a glPushMatrix(); és glPopMatrix(); közötti részt teljesen ki is törölhetjük. Hogy átláthatóbb legyen a példánk csináljunk egy kockarajzoló eljárást. A neve legyen mondjuk DrawCube paramétere viszont egyáltalán ne legyen. Hogy miért, azt a lecke végére mindenki megtudja.

2010. február 14., vasárnap

Transport Tycoon Deluxe OpenTTD

Kezdjük kis történelemmel. A Transport Tycoon számítógépes játékot a MicroProse nevű kiadó adta ki 1994-ben. Fejlesztője Chris Sawyer. Megjelent MS-DOS, Windows 95, PlayStation platformokra. A játékban az a feladatunk, hogy egy véletlenszerűen generált szigeten egy közlekedési vállalkozást alakítsunk ki. Ehhez 4 különböző közlekedési ágazatot vehetünk igénybe: vasút, közút, repülés, hajózás. Mindegyiknek megvannak a maguk előnyei és hátrányai. A cél az, hogy a lehető legtöbb árut és utast szállítsunk minél több helyre, minél gyorsabban. Minden elfuvarozott áruért és utasért pénzt kapunk, és a pénzből tovább építhetjük birodalmunkat.

A Transport Tycoon Deluxe játék

A Deluxe verzió, ahogy a neve is sugallja egy kiegészített, javított változata az eredeti játéknak. Az egyik legszembetűnőbb változás a három új pályatípus, a trópusi, sarkvidéki, valamint a játékvilág megjelenése. Ezek nem csak grafikailag különböznek az alapjátékból már megismert mérsékelt éghajlatú pályától: más típusú nyersanyagok, újfajta gyárak, különböző kihívások várják a játékost. Például a sarkvidéki pályán a hóhatár feletti települések nem növekednek folyamatos ételutánpótlás nélkül, míg a trópusi égövi városoknak vízre van szüksége. Ide tartozik még, hogy a Deluxe verzióban nem csak számítógép által generált pályákon van lehetőség játszani, ugyanis egy komplett pályaszerkesztőt is mellékeltek a játék mellé.
Mivel alapból DOS-ra készítették a játékot majd később megjelent Windows 95-re is, de ez a verzió már nem futott a mai korszerűbb operációs rendszereken így Windows XP-n se. Sok lelkes játékos nem volt hajlandó megválni kedvenc játékától így megszületett több platformon is gond nélkül futó OpenTTD verzió. Jelenlegi verziószám 0.7.5. Elindul Windows Xp, Windows Vista , Mac OS X és Linux rendszereken is. A játék mint a nevéből is kiderül open, vagyis nyitott, bárki számára ingyenes és letölthető és használható.
Legfrissebb verzió letöltése: www.openttd.org

Nevetni egy szörnyű világban...

Krokodil gyilkol, de nem elég alaposan. Hanyagsága nemzetközi konfliktust eredményez. Kölyök úgy megrémül, hogy azt sem tudja, fiú-e vagy lány. Pedig jó lenne, ha legalább ő tudná! Piszkos Frednek rossz a lapjárása – a vesztes az angol admiralitás. A Balmoral cirkáló legénységének iszonyú tragédiája: gránát csap a söröshordóba... Rozsdás, Bunkó, Főorvos Úr, Kölyök, Piszkos Fred és a többiek...
Kedvenc íróm Rejtő Jenő, már régen szerettem volna írni róla pár sort. Szeretem, mert mindig mosolyog az írása még a legnagyobb fájdalomban is… mindig ott van az optimista kisugárzás. És én ezt… egyszerűen szeretem.
  
Rejtő Jenő regénybe illő élete

„Az élet egy különös színpad, amelynek meglehtősen zavaros célja és furcsa repertoárja van. Mi a leghőbb vágyam? Az, amit a költő kíván: egyszer életemben végre jól kialudjam magam...” - ha nem ismerné az ember az idézet forrását, jó eséllyel akkor is tudná, kitől származik. Rejtő Jenő sajátos humora, romantikája a gazdasági világválság óta szórakoztatja az „úri közönséget" (miközben a zongoránál Pepita Ofélia áll, és gitározik).

 Piszkos Fred, a kapitány

1905-ben történik a jeles esemény, amikor Albert Einstein nyilvánosságra hozza a speciális relativitáselméletet, és ezzel jelentősen hozzájárul a kvantummechanika fejlődéséhez. Robert Koch pedig ekkor kapja meg az orvosi Nobel-díjat. Jules Verne francia író ebben az évben hal meg, és pár nappal később, március 29-én Budapesten megkezdi izgalmakkal teli földi pályafutását Rejtő Jenő (P. Howard, azaz Péhovard, vagy más néven Gibson Lavery).
Rejtő figurái, alakjai mára már legendásak, hiszen ki ne hallott volna Tuskó Hopkinsról, Vanek úrról, Piszkos Fredről, Senki Alfonzról, Gorcsev Ivánról, Fülig Jimmyről, Troppauer Hümérről vagy éppen a szőke ciklonról. Az ő történeteikben a szerző életének állomásai, egyes szituációi is megmutatkoznak, hiszen „Rejtő Jenő úgy élt, hogy akár valamelyik regényének hőse is lehetett volna".

 Fülig Jimmy

Legnagyobb sikereit P. Howard álnéven írott idegenlégiós regényparódiáival aratta, amelyek keletkezésében is közrejátszott az, hogy afrikai útja során a helyi kocsmában megismerkedett légiósokkal. Állítólag ő is felcsapott légionistának, majd innen úgy szerelt le, hogy egy szappanból leharapott egy darabot. Hogy ez igaz-e, nem tudni, mindenesetre Rejtő személyét számos legenda és anekdota lengi körül.
Névjegykártyáján az állt, hogy lakcíme a Continental Szálló. Lakhelyeként viszont a lipótmezei elmegyógyintézet szolgált, súlyos idegbetegségét kezeltette itt olykor. Mivel azonban nem volt veszélyes önmaga és mások számára, ezért napközben kiengedték. Előfordult, hogy későn érkezett meg, amikor már a kapu zárva volt, ezért hát elkezdte rugdosni, majd a portás megkérdezte, hogy mit keres. „A hálószobámat" - válaszolta. „Megőrült?!" - kiáltott rá a kapus. „Igen, azért van itt a hálószobám!"
Személyéről azt is tudni lehet, hogy amfetaminszármazékokat szedett, valamint szenvedélybeteg, súlyos kártyafüggő is volt.

 A három testőr

Rejtő Jenő legkedveltebb pihenőhelye az Andrássy úti Japán kávéház volt, amelynek gyakran a teraszán ült márványasztalánál, előtte papírok és tintásüveg, kezében pedig a hosszú szárú, bemártós tollhoz való tollszár. Általában kávét rendelt, és fizetségként irományának három sorát adta, amely már tartalmazta a borravaló összegét is (!). Aztán a pincér készpénzre váltotta a kéziratdarabot a szerző kiadójánál, ahol a teleírt papírfecnit hozzáragasztották az eddig küldött anyaghoz. Amikor például ruhát varratott, a szabónak három-négy oldalt adott az elkészített ruhadarabért, majd a mester az elkészült oldallal ment a kiadóhoz, így megkapta a munkadíját. Ezt a módszert fizetőeszköz hiánya miatt alkalmazta.
Közeli barátságot ápolt Karinthy Frigyessel: főleg természettudományos érdeklődésük és színpadi szerzői karrierjük kötötte össze őket. Egy ízben Karinthy különös reklámot eszelt ki Rejtő nevének népszerűsítésére. Előbb az író rejtélyes eltűnéséről számolt be a Pesti Napló hasábjain, majd nyílt levélben beszélt az „ismeretlen” fiatalemberhez, „egy úrhoz, aki ma öngyilkos lesz”. Azután még halálhíre is megjelent, amire reflektálva Karinthy biztosította az olvasókat, hogy szerinte az író csak nevéhez híven elrejtőzött. „Jenő, gyere haza, minden meg van bocsátva!” - fejezte be a cikket, majd csodák csodájára Bécsből valóban megérkezett Rejtő, és az olvasók fellélegezhettek. (A bulvár műfaj népszerűsége, úgy tűnik, nem csupán a mai kor sajátossága...)

Csodás látvány...természetesen művészileg értem

Jó barátság fűzte Kabos Gyulához is, akivel Amerikába való távozása előtt gyakran hajnalig rótták a köröket a Duna-korzón, közben pedig megvitatták a világ sorsát és egyéb fontos kérdéseket, mint például az aznapi filmforgatást Kabos poénjaival kapcsolatban. 1942 októberében az Egyedül vagyunk című nyilas folyóirat hosszú „leleplező" cikket írt róla, aminek az lett a következménye, hogy behívták munkaszolgálatra. Ukrajnába vezérelték, ahol társait szórakoztatta saját regényének részleteivel. A legyengült, beteg író onnan már nem tért vissza…

 Az elveszett cirkáló...

Érdekesség a recesszió kapcsán, hogy Rejtő éppen a nagy gazdasági válság idején írta műveit, emberi humort hozott akkor, amikor senkinek sem volt kedve nevetni. „Igyekeztem, hogy a humoron és a drámán felül az életből is adjak valamit, nem sokat, csak annyit, amennyit egy operettlibrettóban mint csempészárut elhelyezhet a szerző" - vallotta. Rejtő olvasottsága vetekszik Jókaiéval, népszerűsége az évtizedek során egyre nő, elérte az alig olvasók táborát, ugyanakkor fellelhető a szépirodalmat kedvelők köreiben is. Az 1950-es években, Izraelben is megjelentek a magyar, német és ivrit nyelvű Rejtő-füzetkék.
Hegedűs Géza írta róla: „Kitűnő érzéke volt a szörnyű világban meglátni a jelenségek fonákját, megmutatni az emberellenesben a nevetségest, és e nevetségessé tétellel leleplezni oly sok silányságot."

Letölthető a Visual Studio 2010 RC

Az MSDN-előfizetők hétfő óta elérhetik a Visual Studio 2010 kiadásra jelölt (RC) változatát, amely mától letölthető a nagyközönség számára is a .NET keretrendszer 4.0 verziójának előzetesével együtt. A végleges változatok április 12-én jelennek meg. 

Visual Studio 2010

A Visual Studio 2010 számos területen előrelépett elődeihez képest, szinte felsorolni is képtelenség az újdonságok listáját. A fejlesztői eszköz mind asztali, mind webes, mind pedig a felhőben futó alkalmazások létrehozását jobban támogatja. Asztali alkalmazások fejlesztői számára a legfontosabb újdonságot alighanem a Windows Presentation Foundation még kiterjedtebb támogatása jelenti. A Windowsok megjelenítő rétegére épül maga a Visual Studio 2010 is, ennek megfelelően a felület támogat például több monitort és hardveres gyorsítást is.
A gazdag internetes alkalmazások (Rich Internet Applications, RIA) fejlesztése is a korábbinál kiterjedtebb támogatást kapott, a Visual Studio 2010 szorosan integrálódik a Silverlight interaktív médiaplatformmal és már támogatja például az n-rétegű alkalmazások fejlesztését, vagyis egészen bonyolult, üzleti alkalmazások is készíthetők a segítségével. A Visual Studio 2010 webalkalmazások fejlesztésére is jobban használható mint elődei, erről a még jobb ASP.NET és AJAX-támogatás, valamint a beépített HTML-szerkesztő gondoskodik többek között, de említésre méltó még a natív JQuery-kezelés is. Az ASP.NET mellett a szoftver beépített projektsablont tartalmaz az MVC (Model-View-Controller) architektúrájú alkalmazásokhoz is. A webalkalmazások teszteléséhez komoly eszközkészlet áll a fejlesztők rendelkezésére.
A Visual Studio 2010-ben megjelentek a Microsoft cloudplatformjának, az Azure-nek a használatához szükséges komponensek, vagyis a Visual Studio 2010 telepítése után a felhasználók közvetlenül fejleszthetnek cloud-alkalmazásokat, ehhez minden segítséget és támogatást megtalálnak, beleértve a lokális futtatási környezetet és a debuggert. A Visual Studio 2010 segítségével egy webes alkalmazás is könnyen a felhőbe vihető, mondta el a HWSW-nek Bátorfi Zsolt, a Microsoft Magyarország fejlesztési platform üzletágának technológiai szakértője.
A professzionális változatok kiterjedt alkalmazás-életciklus kezelési funkciókkal bírnak, a projekt kezdetétől, a tervezéstől kezdve a tesztelésen át a napi buildek kezeléséig. A Visual Studio Team System új verziója a korábbinál még több fejlesztési metodológiát (pl. Scrum) támogat és többek között lehetővé teszi a földrajzilag szeparált fejlesztői csoportok együttműködését az interneten keresztül: a fejlesztők távolról, SSL-védett kapcsolaton is tudnak kódot beküldeni.
Soma. S. Somasegar, a Microsoft fejlesztői termékekért felelős vezetője blogbejegyzésében leírja, a Visual Studio 2010 második bétájának kiadása óta rengeteg visszajelzés érkezett a felhasználóktól, amelyeket figyelembe vettek az RC-nél. Somasegar elsősorban a sebességgel (betöltés, debuggolás, build-elés) kapcsolatos panaszokat említette, ennek megfelelően a kiadásra jelölt változat jelentősen előrelépett ezen a téren, gyorsabb lett a kezelőfelület és a szerkesztő, kisebb a memóriafoglalás. A Visual Studio 2010 újdonságait ez a MSDN-oldal foglalja össze.

.NET Framework 4

A .NET keretrendszer új változata kapcsán a Microsoft leginkább a Windows 7 (pl. jumplistek új taskbar) jobb támogatását, a kisebb erőforrásigényt, valamint a nagyobb teljesítményt és megbízhatóságot kommunikálja, illetve a jobb monitorozhatóságot. Minden alkalmazás-tartománynak külön figyelhető és naplózható a memória- és processzorhasználata, amely később nélkülözhetetlen segítséget nyújthat a finomhangolásban. Említésre méltó még a korábbinál jobb támogatás 64 bites operációs rendszerekhez, valamint a dinamikus nyelvekhez, de természetesen a Visual Basic és C# is jelentős  fejlődésen esett át.
A Microsoft fejlesztőmérnökei sokat várnak a párhuzamos programozás támogatásától: a .NET Framework lehetővé teszi akár egészen finom granularitású párhuzamos kód létrehozását és futtatását anélkül, hogy a fejlesztőnek a szálszintű párhuzamossággal közvetlenül foglalkoznia kellene. További részletek a párhuzamos programozás támogatásával kapcsolatban az MSDN oldalán olvashatók.
Fontos tudni, hogy a .NET Framework 4.0-ban olyan változtatásokat is végrehajtott a Microsoft, például a biztonság vagy éppen a szabványok támogatása terén, amelyek kihatással vannak az alkalmazáskompatibilitásra, ezért nem garantált a korábbi verziókra írt szoftverek hibátlan futása, adott esetben újrafordításra is szükség lehet. A Visual Studio 2010 RC és a .NET Framework 4.0 RC letölthető a Microsoft oldaláról. Az új fejlesztői eszközhöz "go live" licenc tartozik, vagyis éles, kereskedelmi célú alkalmazások fejlesztésére is használható már.

2010. február 10., szerda

Tao Start 04 - Transzformációk

Végre elérkeztünk egy nagyon lényeges részhez. Nyugi! Nem kell megijedni, nem olyan felfoghatatlan, de kell hozzá ez a kis matek. Megpróbálom érthetően leírni úgy, hogy aki tud osztani, szorozni, összeadni, kivonni az is megértse. Először átvesszük a szükséges matematikát, aztán meg azt, hogyan kapcsolódik ez az egész az OpenGL-hez. Ami fontos, hogy ne próbáljuk meg görcsösen megérteni a matematikai részt, ha nem megy elsőre, sebaj, olvassátok tovább, mivel ennyire mélyen nem lesz szükség a matekos ismeretekre, egyelőre, de később már nem úszható meg. Kezdetnek egy furfangos kérdés: mi az a mátrix?

2010. február 7., vasárnap

Tao Start 03 - Vetítések

Múltkor ott hagytuk abba, hogy sikerült egy szép sínes háromszöget kirajzolnunk a képernyőre. A kezdeti öröm mára már biztos elmúlott, így ideje továbblépnünk. Ehhez viszont újabb fogalmakkal kell megismerkednünk. Kezdjünk is hozzá.

2010. február 6., szombat

Bevezetés a Managed DirectX világába

A Managed DirectX (MDX) 2002-ben jelent meg, mint .NET Framework alatti DirectX támogatás. Az MDX 2.0 pedig már a XNA Framework része lett. Vagyis az MDX mára megszűnt létezni és helyette lett a XNA, de az már framework, szóval semmi vertex buffer, meg ilyenek. XBox 360 és PC-re jó, de a mindkettővel való kompatibilitás miatt DirectX 9-et támogatja csak. Ennek ellenére érdemes megnézni milyen is az MDX, mert még mindig elérhető. A másik lehetőség az MDX megvalósítására a SlimDX. Ez már gyakorlatilag csak egy managed wrapper a DirectX-hez, 1-2 dolog van csupán megoldva benne, viszont akár DirectX 11-ben is lehet programozni és állítólag használja is 1-2 budget cég. Később az MDX mellet a SlimDX lehetőségeit is ki fogjuk próbálni.
A most következő rövid ismertető azoknak készült, akik szeretnék megismeri a DirectX Direct3D API használatát Visual C#-ból. Nem törekszik teljességre, hiszen "A legkifinomultabb alkotás sem vetekedhet az emberi gondolat tökéletességével." Tehát, a következő dolgokra lesz szükségünk a minimális tesztkörnyezet felépítéséhez:
  • Microsoft Visual Studio .NET
  • .NET Framework 1.1
  • DirectX9 SDK
Akkor kezdjünk is bele az első MDX-es programunkba, ami egy ablakot fog megjeleníteni egy színes háromszöggel valamint egyszerű input és DeviceLost esemény kezelést is meg fog oldani.

Az elérendő cél

A tutorial alapvető C#-ban való jártasságot feltételez. A cikk kezdőknek szól, ezért lehet, hogy egy-két részt jobban kifejtek. Hozzunk létre egy új Visual C# Windows alkalmazást, majd adjunk referenciákat a Microsoft DirectX és a Microsoft.DirectX.Direct3D komponensekre:

using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;

Az első, amit tennünk kell, hogy létre kell hoznunk egy device-t. Rövidre fogva a device egy link a grafikus adapterhez, egy objektum, amely segítségével elérhetünk egy hardware eszközt.

private Device device = null;

Természetesen az eszközünket inicializálni is kell:
     private void SetupDevice()
{
// A device típusa határozza meg, hogy a hardware vagy a software implementációt hivjuk egy feladat végrehajtásánál
device = new Device(0, DeviceType.Hardware, this.Handle, CreateFlags.HardwareVertexProcessing, presentParams);
// EventHandler a DeviceLost eseményhez
device.DeviceLost += new EventHandler(device_DeviceLost);
// EventHandler a DeviceReset eseményhez
device.DeviceReset += new EventHandler(device_DeviceReset);
device.DeviceResizing += new System.ComponentModel.CancelEventHandler(OnResize);
}
Paraméterek beállítása:
      public void SetupPresentParams()
{
// A presentParams példányosítása
presentParams = new PresentParameters();

// Hátsó puffer formátumának beállítása (32 bit, ARGB)
presentParams.BackBufferFormat = Format.A8R8G8B8;

//A hátsó puffer szélességét és magasságát állítjuk a Form méreteihez
presentParams.BackBufferWidth = this.Width;
presentParams.BackBufferHeight = this.Height;

// Lapváltás beállítása, nem használunk swappet, egyből megjelenítünk mindent
presentParams.SwapEffect = SwapEffect.Discard;

// Ablakos vagy teljes képernyős legyen az ablak
presentParams.Windowed = true;
}
A Direct3D eszköz létrehozása:
    // Direct3D eszköz létrehozása
public bool CreateDevice()
{
SetupPresentParams();
try
{
SetupDevice();
}
// A DirectXExceptiont elkapjuk és a hibaüzenetet kiíratjuk
catch (DirectXException ex)
{
MessageBox.Show(ex.Message);
return (false);
}
return (true);
}
Ne felejtsük el meghívni a CreateDevice() metódust a Form konstruktorában. Ezután elkészítjük az OnPaint metódusunk saját verzióját (override):
   protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
// Rajzolás
this.Render();
Invalidate();
}
Ugye azt mindenki tudja, hogy a 3D-s világban minden háromszögekből áll. (Aki nem tudta az gondolja végig, hogy 3 pont mindig egy síkban van) Szóval egy ilyen háromszöget 3 pont határoz meg, a három csúcsa. Ezek a csúcsok a háromdimenziós térben vektorok v(x, y, z). Persze egy pontot nem csak a koordinátája határoz meg, hanem pl. a színe is. Az objektumot, ami leír egy ilyen pontot, vertex-nek hívnak. Hozzunk létre egy ilyen vertexekből álló tömböt a háromszögünkhöz az OnLoad metódusban:
  protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);

vertices = new CustomVertex.TransformedColored[3];
vertices[0].Position = new Vector4(this.Width / 2.0f, 50.0f, 0.5f, 1.0f);
vertices[0].Color = Color.Red.ToArgb();
vertices[1].Position = new Vector4(this.Width - (this.Width / 5.0f), this.Height - (this.Height / 5.0f), 0.5f, 1.0f);
vertices[1].Color = Color.Green.ToArgb();
vertices[2].Position = new Vector4(this.Width / 5.0f, this.Height - (this.Height / 5.0f), 0.5f, 1.0f);
vertices[2].Color = Color.Blue.ToArgb();
}
Ezután már létrehozhatjuk a Render() metódust:
 private void Render()
{
if (device == null) return;

// Töröljük színpuffert, és CadetBlue színű ClearColort állítunk be
device.Clear(ClearFlags.Target, Color.CadetBlue, 1.0f, 0);

device.BeginScene();
{
device.VertexFormat = CustomVertex.TransformedColored.Format;
device.DrawUserPrimitives(PrimitiveType.TriangleList, 1, vertices);
}
device.EndScene();

try
{
// Megjelenítjük a jelenetet a monitoron
device.Present();
}
// DeviceLostException elkapása
catch (DeviceLostException)
{
// Meghívjuk a Recover függvényt, ami visszaállítja a Direct3D eszközt
Recover();
}
}
És kész, lehet fordítani az alkalmazást. Ha mindent jól csináltunk egy gyönyörű szép színes háromszögnek kell megjelenni az ablakban. A példa teljes forrása itt tekinthető meg:


Ha valamit kihagytam volna vagy valami nem érthető, semmi gond, legközelebb is innen folytatjuk.

VirtualBox: az ingyenes virtuális gép

Felvezetésként: nemrégiben a főnököm kapott egy új notebookot a Windows 7 Home Basic 64 bit-es változatával. Semmi gond nem volt vele, minden pörgött rajta rendesen. Csak egyetlen egy apró viharfelhő jelent meg a windows-kék égen, éspedig az intézeti nyomtató. Le kell szögeznem, hogy a Konica Bizhub 210-es kódnévre hallgató irodai gép egy nagyon jó masina, bírja a strapát rendesen, 10 főig ideális választás. Csak egy „apró” bibi van vele, nincs hozzá 64 bit-es support. Szóval nincs driver. Semmilyen. Sehol. És nem is lesz! Kész, vége. Köszönjük Konica! Biztos nehéz lenne átírni a meglévőt 64 bit-re, hmmm kb egy nap. De hagyjuk. Mi a megoldás?

VirtualBox, imádlak

A fenti problémától eltekintve is egyre nagyobb manapság az igény arra, hogy ugyanazon a számítógépen több operációs rendszert is használjunk. A fizetős programok mellett megjelent a Sun Microsystem igazán jól sikerült és ingyenes megoldása. Az VirtualBox legújabb, 3.1.2 változata gyakorlatilag mindent tud, amit a pénzért kapható társai (VMware Fusion, Parallels) kínálnak. A Windows, OS-X és Linux rendszerekre készült változatokat a http://www.virtualbox.org/ oldalról lehet letölteni.
Az egyszerű és gyors telepítés után könnyen létrehozhatjuk első virtuális gépünket. Az alapértelmezett paramétereket választva jóformán csak a Next gombot kell nyomogatni, de aki valami speciális beállításra vágyik, az elkalandozhat a részletek között. A virtuális gépekhez rendelt merevlemez területet dinamikusan is lefoglalhatjuk, így mindig annyi szabad terület áll a vendég operációs rendszer rendelkezésére, amennyire szükség van.
Más virtuális szoftverekhez hasonlóan, a VirtulaBox is képes több virtuális gépet kezelni, így például nyugodtan telepíthetünk OS X-et futtató gépünkre Windows-t is és Linux-ot is. De persze annak sincs akadálya, hogy Windows alatt próbálgassunk Linux alkalmazásokat.
A virtuális gépek telepítésénél számos előre beállított rendszer közül választhatunk, így például már a Windows 7 futtatásához szükséges paramétereket is tartalmazza a VirtualBox. Egy-egy virtuális gép telepítése után állíthatjuk be az úgynevezett Guest Additions kiegészítőket. Ilyen extrák például a Seamless mode, a Full screen mode és a megosztott folderek. A jelenlegi virtualizációs programok közül egyedül a VirtualBox támogatja teljes egészében a Remote Desktop Protocol-t, ami lehetővé, hogy távolról futtassunk egy virtuális gépet. A Sun Microsystem VirtulaBox egy nyílt forráskódú megoldás, ezért már most számos külső fejlesztő által készített modul létezik hozzá.
Az alábbi videón Mac OS-X 10.5 operációs rendszeren futó VirtualBox-ra telepítünk egy Windows 7 operációs rendszert, illetve annak futtatását mutatjuk be:





Halkan megjegezném, hogy akár DOS és Win 3.1 is telepíthető. Így, ha alkalmazást fejlesztenénk ilyen platformra, akkor sem kell egy külön gép a tesztelésre. Hogy ki fejleszt ilyen platformra? Aki nulla forintból akar pöpec adatgyűjtő és feldolgozó rendszert készíteni. De .NET-ben írt programjainkat is tesztelhetjük pl. Linux-on. Szóval mindenkinek ajánlom.

Levezetésként

Tehát a VirtualBox fut Windows 7 64bit-en gond nélkül. Ezután készítettem egy Virtuális Windows XP-t ami 32 Bit-es, így már a Konica drivere is támogatja. A Win 7-en megosztottam egy mappát, amit hozzáadtam a Virtuális Win XP-hez és így már újra képes volt a rendszer nyomtatni a gépre. Ennyi az egész. Egy kicsit kényelmetlen, de legalább működik. És még egy fontos dolog, félreértés ne essen, a VirtualBox nem OS-t szimulál, hanem hardvert szimulál az OS számára. Ezért telepítőlemez és serial szükséges!

2010. február 3., szerda

Tao Start 02 - Color Quad

Legutóbb ott hagytuk abba az ismerkedést a Tao-val, hogy beüzemeltük a framework-öt és elkészítettük az első háromszögünket. Ez is már valami, de ideje tovább lépni. De előtte még felhívnám a figyelmet arra, hogy az OpeGL a C nyelvre épül ezért minden utasítást az eredeti szintaxisban érdemes megismerni, mert így később bármilyen OpenGL forrást könnyedén megérthetünk. Ahány wrapper annyiféle megvalósítás, de amint ráhangolódunk magára az OpenGL-re könnyedén fog menni minden menedzselt környezetben is. Ok, akkor folytassuk ott ahol abbahagytuk, de még mindig csak aprókat lépünk.