<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>spyked bricks in the wall &#187; programming</title>
	<atom:link href="http://lucian.mogosanu.ro/bricks/tag/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://lucian.mogosanu.ro/bricks</link>
	<description>on the internet, no one can hear you scream.</description>
	<lastBuildDate>Sun, 25 Jul 2010 17:09:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>spaicul față cu programarea</title>
		<link>http://lucian.mogosanu.ro/bricks/spaicul-fata-cu-programarea/</link>
		<comments>http://lucian.mogosanu.ro/bricks/spaicul-fata-cu-programarea/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 20:27:29 +0000</pubDate>
		<dc:creator>spyked</dc:creator>
				<category><![CDATA[bricks]]></category>
		<category><![CDATA[www]]></category>
		<category><![CDATA[division by zero]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[spyked]]></category>
		<category><![CDATA[writing on the wall]]></category>

		<guid isPermaLink="false">http://lucian.mogosanu.ro/bricks/?p=1180</guid>
		<description><![CDATA[Acum aproape un an am apucat, în urma unui moment de nostalgie, să povestesc pe scurt cam care a fost evoluția subsemnatului în domeniul calculatoarelor. Și asta nu întâmplător, fiindcă mi s-ar fi năzărit mie să vorbesc despre calculatoare, ci fiindcă, din nou, deloc întâmplător, mă simt pasionat de domeniul ăsta destul de tare &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>Acum aproape un an am apucat, în urma unui moment de nostalgie, să povestesc pe scurt cam care a fost <a href="http://lucian.mogosanu.ro/bricks/cum-am-ajuns-aici/">evoluția</a> subsemnatului în domeniul calculatoarelor. Și asta nu întâmplător, fiindcă mi s-ar fi năzărit mie să vorbesc despre calculatoare, ci fiindcă, din nou, deloc întâmplător, mă simt pasionat de domeniul ăsta destul de tare &#8211; mărturisesc cu mâna pe inimă, în momentul ăsta am niște palpitații serioase, de parcă aș vorbi despre o ființă blondă și cu ochi albaștri (și dulci, clari, așa, cu oleacă de romantism eminescian presărat în părțile esențiale) și nu despre un obiect lipsit de viață, obiect ce mai are și tupeul de a toca numere cât timp stă aprins.<span id="more-1180"></span></p>
<p>Având în vedere că am crescut cu calculatorul în brațe, contactul cu fenomenul programării a fost unul inevitabil. Începând cu BASIC, acompaniat de două cărțulii verzi, pline de cod &#8211; nu înțelegeam mare lucru din el, dar era interesantă desenarea de cerculețe și pătrățele colorate; nu am reușit să salvez nici un program pe casetă, tot restul codului, generat de obicei de persoane din jurul meu, fiind ținut într-un caiet -, continuând cu C la sfârșitul școlii generale &#8211; da, am avut un profesor cu care am făcut chestii mult mai utile în unul-doi ani decât mai apoi în tot liceul: C, PHP, Quake 2, Delta Force, Atomic Bomberman, Bryce, Photoshop și baschet în curtea școlii -, apoi cu Pascal și oleacă de Java în liceu și, în fine, cu tona (impropriu spus; nu știu cum să echivalez tona asta în octeți) de material de care mă lovesc în prezent, pot spune că domeniul ăsta nu îmi e chiar străin. Nu mai vorbesc de subiectul „spyked și lumea GNU/Linux”, chiar vreau să termin în seara asta.</p>
<p>Și fiindcă <em>spyked bricks in the wall</em> oricum va avea în câteva luni vreo cinci anișori împliniți, ani în care l-am umplut de aberații, gânduri, idei, cuvinte, litere, alfabet, gramatică, limbaj (nu s-a putut formal) &#8211;  spuneți-le cum vreți &#8211; am zis să nu las în cârca blog-ului de față sarcina de a conține informații serioase, cât de cât la obiect, eventual scrise în limbi străine, pentru a le putea înțelege mai tot cititorul de pe Interneți. Mai concret, blog-ul ăsta își va păstra scopul pentru care a fost conceput, scop care are deosebita calitate de a nu exista. Da, peretele meu virtual (fără nici un fel de conotații feisbuciene &#8211; să ținem cont că site-ul cu pricina a apărut cu aproximativ un an după ăsta) se află aici doar fiindcă mi se scoală mie diverse chestii să scriu pe el.</p>
<p>Revenind la subiectul articolului, m-am decis, după lungi ședințe de gândire în plan secund, să deschid un <a href="http://lucian.mogosanu.ro/code"><strong>alt blog</strong></a>, unul pe care voi discuta exclusiv pe teme tehnice, în cea mai mare proporție legate de programare. Asta nu înseamnă că nu voi mai scrie aici (oricum frecvența post-urilor s-a rărit în ultimii ani, din varii motive). Dar fără a minimaliza impactul pe care îl au comunitățile cum ar fi <a href="http://stackoverflow.com/">Stack Overflow</a>, găsesc blog-ul ca fiind un spațiu cât se poate de bun pentru a materializa gânduri legate de programare.</p>
<p>Zău, nu mi se pare o idee chiar așa de rea.</p>
]]></content:encoded>
			<wfw:commentRss>http://lucian.mogosanu.ro/bricks/spaicul-fata-cu-programarea/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>the first, the person and the shooter</title>
		<link>http://lucian.mogosanu.ro/bricks/the-first-the-person-and-the-shooter/</link>
		<comments>http://lucian.mogosanu.ro/bricks/the-first-the-person-and-the-shooter/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 23:13:16 +0000</pubDate>
		<dc:creator>spyked</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[directx]]></category>
		<category><![CDATA[fps]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[glut]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[opengl]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[sdl]]></category>

		<guid isPermaLink="false">http://lucian.mogosanu.ro/bricks/?p=1085</guid>
		<description><![CDATA[[ sau cum să scrii un FPS în cel mult puțin patru zile ]
În mod cert, a scrie un FPS (acronim pentru First Person Shooter în acest caz) nu-i treabă ușoară. Necesită timp, răbdare și o echipă pusă pe treabă, chiar și atunci când se pune baza într-un motor grafic/fizic deja existent; sau mai ales [...]]]></description>
			<content:encoded><![CDATA[<p><strong>[</strong> sau cum să scrii un FPS în cel <span style="text-decoration: line-through;">mult</span> puțin patru zile <strong>]</strong></p>
<p>În mod cert, a scrie un FPS (acronim pentru First Person Shooter în acest caz) nu-i treabă ușoară. Necesită timp, răbdare și o echipă pusă pe treabă, chiar și atunci când se pune baza într-un motor grafic/fizic deja existent; sau mai ales atunci. Cu toate astea, m-am decis să fiu un smartass (în traducere liberă, un „fund deștept”, cât de deștept poate fi un dos de om) și &#8211; spre disperarea unora și amuzamentul altora &#8211; să neg tot ce am spus adineauri. Cu alte cuvinte, realizarea unui <span style="text-decoration: line-through;">shooter</span> schelet de shooter nu durează în realitate mai mult de patru zile, testat. Mai mult, orice student în anul al treilea de CS vă poate confirma asta.<span id="more-1085"></span></p>
<p>Se dau următoarele ingrediente:</p>
<ul>
<li>Un set de modele 3D, cu sau fără texturi, animate sau neanimate, în funcție de tema jocului. Sigur, se pot concepe de la zero, dar munca în plus ar fi imensă. De exemplu, <a href="http://shape.cs.princeton.edu/benchmark/">aici</a> există o serie de modele (statice), cât și codul sursă al unui program care le parsează. Se poate recurge la câteva formate mai avansate, dar nu intru în detalii.</li>
<li>Cunoștințe medii ale unui limbaj de programare cât de cât cunoscut (oricare din gama C++, Python, Java, C#, asta dacă nu vă dau prin minte ceva gânduri exotice). Nu e nevoie de cunoștințe avansate, dar aveți nevoie de cunoștințe minime de programare orientată pe obiecte în cazul limbajelor menționate anterior; asta dacă nu vreți cumva să lucrați în C, caz în care timpul de lucru crește semnificativ, pe cuvânt. De asemenea, trebuie avută în vedere descărcarea unui compilator sau interpretor pentru limbajul în cauză.</li>
<li>O bibliotecă pentru grafică 3D; fie ea <a href="http://www.opengl.org/resources/libraries/glut/">GLUT</a>, <a href="http://www.libsdl.org/">SDL</a> sau <a href="http://msdn.microsoft.com/en-us/directx/aa937788.aspx">DirectX</a>. Ultimele două sunt mai sofisticate, lucrând și cu sunet și având primitive mai serioase pentru alte controllere (joystick și altele). Important e să aveți documentația la îndemână și o experiență minimă în folosirea uneia din ele (unde prin experiență minimă se înțelege dezvoltarea unui schelet de aplicație folosind biblioteca respectivă).</li>
<li>Patru zile libere. Asta înseamnă cam zece ore de lucru pe zi =&gt; se renunță la jocuri, filme, prietenă (prieten, în cazul programatoarelor), bere cu amicii, școală, muncă etc. Ne pare rău, dar asta e situația.</li>
</ul>
<p>Ca fapt divers, subsemnatul a ales combinația C++ și GLUT, fiindcă așa s-a cerut la temă. Deși poate părea mai greoi la prima vedere, l-am preferat în detrimentul unor abominații cum e Java (și orice ați spune voi, eu am dreptate, da? Sper că ne-am înțeles). În plus, cartea lui <a href="http://en.wikipedia.org/wiki/Bjarne_Stroustrup">Bjarne</a> e sfântă.</p>
<p>Iar rețeta propriu-zisă sună cam în felul următor:</p>
<ul>
<li>Se face un scurt plan; preferabil o diagramă UML (asta dacă s-a ales paradigma orientată pe obiect; în cazul în care programați funcțional, eu spun că sunteți deja prea meseriași să citiți rețete de genul), dar se poate recurge într-un mod mai simplu la clasicele creion și foaie. Se schițează un plan de bătaie, având în vedere câteva lucruri de bun simț &#8211; toate astea durează maxim patru ore și scutesc programatorul de o groază de dureri de cap:
<ul>
<li>Simplitate: cu alte cuvinte, aveți grijă să nu vă duceți în bălării cu clasele și metodele. Aveți în vedere folosirea bibliotecilor standard din limbaj (STL în cazul C++), nu redefiniți structuri de date acolo unde nu este nevoie. C# e un plus, fiindcă are XNA.</li>
<li>Reutilizabilitate/modularitate: altfel ați putea programa lejer în Brainfuck și nu orientat pe obiecte. Se aplică la fel de bine și la paradigmele procedurală și funcțională, în ciuda aparențelor. De asemenea, e good practice ca logica jocului să fie pe cât posibil separată de partea de desenare.</li>
<li>Ierarhie: evitați moștenirea multiplă și orice alt aducător de posibile probleme. Mențineți o ierarhie simplă de genul Object3D =&gt; Enemy, Projectile, Player și așa mai departe. Nu faceți headere/module care să se includă reciproc, decât în cazul în care vreți ca preprocesorul/compilatorul să o ia razna.</li>
</ul>
</li>
<li>Se dă comandă la un stack de pizza, câteva sticle de cola și se pregătește din timp patul, pentru a avea o alternanță somn &#8211; cod cât mai lină. De asemenea, se închid telefonul, messenger și alte posibile time-wasters.</li>
<li>Se trece la treabă.</li>
<li>După treabă, se trece la ciclul de testare &#8211; debugging.</li>
<li>Abia apoi se respiră.</li>
</ul>
<p>În funcție de funcționalitatea dorită, realizarea aplicației va dura mai mult sau mai puțin: vreți modele animate &#8211; o zi în plus; vreți motor fizic &#8211; două săptămâni în plus; și așa mai departe. Sper că nu am uitat să amintesc faptul că e musai să aveți câteva cunoștințe despre cum se iluminează o scenă, cum se face o detectare a coliziunilor, așa, chestii mărunte fără care nu puteți face o clonă de Mario, să nu mai vorbesc de un shooter.</p>
<p>După depunerea unei munci titanice, din care rezultă în jur de două mii de linii de cod (plus &#8211; minus câteva sute), vă puteți mândri de munca voastră, care va arăta mai mult sau mai puțin în felul următor <a href="http://lucian.mogosanu.ro/bricks/the-first-the-person-and-the-shooter#footnote"><strong>[</strong>*<strong>]</strong></a>:</p>
<p><a href="http://lucian.mogosanu.ro/bricks/wp-content/uploads/2010/02/egc_shooter_crop.png"><img class="aligncenter size-thumbnail wp-image-1087" title="shooter." src="http://lucian.mogosanu.ro/bricks/wp-content/uploads/2010/02/egc_shooter_crop-150x150.png" alt="" width="150" height="150" /></a></p>
<p>Și uite așa vă puteți declara un dezvoltator de shootere, cam ca și Carmack în tinerețile lui. Ei, cum vi se pare?</p>
<p><a name="footnote"><strong>[</strong>*<strong>]</strong></a> &#8211; Results may vary. You&#8217;ve been warned!</p>
]]></content:encoded>
			<wfw:commentRss>http://lucian.mogosanu.ro/bricks/the-first-the-person-and-the-shooter/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>vim sessions</title>
		<link>http://lucian.mogosanu.ro/bricks/vim-sessions/</link>
		<comments>http://lucian.mogosanu.ro/bricks/vim-sessions/#comments</comments>
		<pubDate>Sun, 13 Dec 2009 00:05:10 +0000</pubDate>
		<dc:creator>spyked</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://lucian.mogosanu.ro/bricks/?p=1056</guid>
		<description><![CDATA[Unul din lucrurile cu care se laudă IDE-urile fancy (Visual Studio, Eclipse, Sun Studio, NetBeans și așa mai departe) e acela că ușurează extrem de mult munca prin salvarea unor informații legate de proiect, informații printre care se află și sesiunea/workspace-ul curent. În vim m-am confruntat deseori cu situația de a închide cinci sau mai [...]]]></description>
			<content:encoded><![CDATA[<p>Unul din lucrurile cu care se laudă IDE-urile fancy (Visual Studio, Eclipse, Sun Studio, NetBeans și așa mai departe) e acela că ușurează extrem de mult munca prin salvarea unor informații legate de proiect, informații printre care se află și sesiunea/workspace-ul curent. În vim m-am confruntat deseori cu situația de a închide cinci sau mai multe tab-uri cu câte două split view-uri fiecare, pentru ca mai târziu să stau două-trei minute doar pentru a le deschide.<span id="more-1056"></span></p>
<p>Totuși, până una alta, vim suportă, la fel ca orice editor/mediu de dezvoltare care se respectă, sesiuni. E de ajuns un</p>
<blockquote><p>:mksession numesesiune.vim</p></blockquote>
<p>pentru a salva sesiunea curentă.</p>
<p>Mai târziu, sesiunea poate fi reîncărcată rulând din bash:</p>
<blockquote><p>$ vim -S numesesiune.vim</p></blockquote>
<p>sau direct din editor:</p>
<blockquote><p>:source numesesiune.vim</p></blockquote>
<p>&#8230; all that awesomeness without the overhead.</p>
]]></content:encoded>
			<wfw:commentRss>http://lucian.mogosanu.ro/bricks/vim-sessions/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>another one bites the dust</title>
		<link>http://lucian.mogosanu.ro/bricks/another-one-bites-the-dust/</link>
		<comments>http://lucian.mogosanu.ro/bricks/another-one-bites-the-dust/#comments</comments>
		<pubDate>Fri, 27 Feb 2009 15:27:15 +0000</pubDate>
		<dc:creator>spyked</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[computer science]]></category>
		<category><![CDATA[haskell]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[politehnica]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[prolog]]></category>
		<category><![CDATA[scheme]]></category>

		<guid isPermaLink="false">http://lucian.mogosanu.ro/bricks/?p=741</guid>
		<description><![CDATA[S-a dus încă o săptămână, prima din semestrul al patrulea. Am rămas cu două draft-uri mai mult sau mai puțin serioase, pe care nu am avut timp să le cizelez, o groază de alte chestii necitite și multe nebunii abia apărute pe țeavă. Povestea e cam în felul următor: doi mari învățați au scos două [...]]]></description>
			<content:encoded><![CDATA[<p>S-a dus încă o săptămână, prima din semestrul al patrulea. Am rămas cu două draft-uri mai mult sau mai puțin serioase, pe care nu am avut timp să le cizelez, o groază de alte chestii necitite și multe nebunii abia apărute pe țeavă. Povestea e cam în felul următor: doi mari învățați au scos două Biblii &#8211; fiecare în domeniul ei, dar ambele făcând parte dintr-o religie comună &#8211; scrise independent una de cealaltă, parcă numai să îi bage în cap studentului toate matrapazlâcurile legate de acea religie, care de fapt e un fel știință, să ne înțelegem. Iar studentul nu avea nimic împotrivă.</p>
<p>Într-o altă ordine de idei, după ce mi-am dat seama că skill-urile de a programa în C ruginesc atunci când nu sunt folosite, am descoperit că am și voi avea de-a face și cu limbaje ceva mai exotice, cum ar fi <a href="http://www.plt-scheme.org/">Scheme</a> [plt-scheme.org] sau <a href="http://www.swi-prolog.org/">Prolog</a> [swi-prolog.org]. Asta mă face să mă mai interesez un pic de limbaje gen cele de mai sus, sau de ce nu Haskell, care pare din ce în ce mai interesant. Paradigma funcțională funcționează, doar <a href="http://xkcd.com/224/">Universul a fost scris în Lisp</a> [xkcd.com], asta apropo de Scheme și alte dialecte.</p>
<p>Acest articol a fost publicat drept simbol al sfidării față de criza economică și alte probleme care macină țara și lumea în ziua de azi. Sunt de părere că dacă lumea și-ar vedea de treabă, lucrurile ar merge cum trebuie.</p>
]]></content:encoded>
			<wfw:commentRss>http://lucian.mogosanu.ro/bricks/another-one-bites-the-dust/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>college software</title>
		<link>http://lucian.mogosanu.ro/bricks/college-software/</link>
		<comments>http://lucian.mogosanu.ro/bricks/college-software/#comments</comments>
		<pubDate>Sun, 12 Oct 2008 14:50:21 +0000</pubDate>
		<dc:creator>spyked</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[alice]]></category>
		<category><![CDATA[computer science]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[geda]]></category>
		<category><![CDATA[politehnica]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://lucian.mogosanu.ro/bricks/?p=520</guid>
		<description><![CDATA[Am avut varii impresii despre mediile de lucru folosite până acum în facultate (Dev-C++ m-a amuzat, Octave mi-a făcut o impresie bună, PSpice m-a lăsat rece etc). Din motivul ăsta, mi-am propus să vorbesc foarte pe scurt despre două softuri mai mult sau mai puţin utile pentru computer science, dar (zic eu) o idee bună [...]]]></description>
			<content:encoded><![CDATA[<p>Am avut varii impresii despre mediile de lucru folosite până acum în facultate (<a href="http://www.bloodshed.net/devcpp.html">Dev-C++</a> m-a amuzat, <a href="http://www.gnu.org/software/octave/">Octave</a> mi-a făcut o impresie bună, PSpice m-a lăsat rece etc). Din motivul ăsta, mi-am propus să vorbesc foarte pe scurt despre două softuri mai mult sau mai puţin utile pentru computer science, dar (zic eu) o idee bună pentru anumite materii studiate de mine în trecut/prezent.</p>
<ul>
<li><strong><a href="http://www.geda.seul.org/">gEDA</a></strong> &#8211; Mi-aş fi dorit să pot vorbi mai pe larg despre el, dar n-am avut timp. E vorba de o suită de aplicaţii pentru lucrul cu circuite electronice, care mi-a sărit în ochi la ceva timp după ce am terminat temele pentru proiectare logică. Am stat să fac schemele logice în Inkscape, fără să ştiu la vremea respectivă că designer-ul din gEDA mi-ar fi putut uşura mult munca. Mai mult, ar putea fi şi o posibilă alternativă la <a href="http://en.wikipedia.org/wiki/NI_Multisim">Multisim</a>-ul (non-free) pe care îl vom folosi la laboratorul de electronică.</li>
<li><strong><a href="http://www.alice.org/">Alice</a></strong> e chiar un program 100% educaţional, care îşi propune să predea concepte de programare (OOP included) într-un mod cât mai plăcut: se foloseşte de un mediu 3D interactiv, iar studentul programează entităţile folosind Java/C++/C#. Deşi la prima vedere ar părea o jucărie, programul e folosit cu succes în mediul universitar, fiind conceput în scop didactic de către cei de la Carnegie Mellon.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://lucian.mogosanu.ro/bricks/college-software/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
