15. December 2011

How to define C++ macro with string content and pass it to MSbuild

Imagine that we have C++ project e.g. for Visual Studio 2008. It is possible to build this project just by msbuild command:

msbuild MyProject.vcproj /p:Configuration="Release"

Let say that we want to use #define in the source code. It is necessary to define it in Configuration Properties > C++ > Command Line:

/DSIMPLE_DEFINE

This just pass SIMPLE_DEFINE as flag.

How to deal with string define which should behave like string? E.g.:

#define URL "http://georgik.sinusgear.com"

The trick is in escaping quotes. We can add following define to Command Line:

/DURL=\"http://georgik.sinusgear.com\"

It will transform into .vcproj file:

AdditionalOptions="/DURL=\"http://georgik.sinusgear.com\""

Let’s make one more step.

How to acquire such a define from environment variable? E.g. with following build.bat file:

set URL="http://georgik.sinusgear.com"
msbuild MyProject.vcproj /p:Configuration="Release"

It requires only small modification of .vcproj file:

AdditionalOptions="/DURL=\"$(URL)\""

;-)

Small recap of flow: set env variable – pass it to XML – pass it compiler – pass it to code

18. March 2011

Collajader 0.3 – web preview of Collada format

Update: Collajader 0.2 was released. Check videos below.

Update 2: Collajader 0.3 was released. Added support for orbit camera.

There are several 3D libraries for Flash which are able to display 3D model in RIA application.

Tools like Blender and CAD/CAM software are able to generate Collada format (.dae). Alternativa3D support this format. You can load Collada file directly into application with Alternativa3D.

The only problem of exported model is that it contains a lot of other information that you do not need for rendering.

I created simple tool Collajader which is able to display content defined in Collada format in the web browser. You don’t need to start any 3D software and you can still finetune some details of the model.

Here is small screencast which shows how it works.

Update for version 0.2

You can access application here: Collajader 0.3.

Please, let me know if you find this application interesting.

10. January 2011

PyXML is dead project – warning: PyXML does not work with Python2.6

PyXML project has been dead for several years. Last version was released in 2004.

When you try to install PyXML with Python 2.6 you’ll get following error:

Failed to load application: invalid syntax (ParsedAbbreviatedRelativeLocationPath.py, line 31)

When you try to start PyXML with Python 2.5 you could see nice compiler warning:

python2.5 xml/xpath/ParsedAbbreviatedAbsoluteLocationPath.py

xml/xpath/ParsedAbbreviatedAbsoluteLocationPath.py:27:

Warning: ‘as’ will become a reserved keyword in Python 2.6

Problem is caused by following line:

as = ParsedAxisSpecifier.ParsedAxisSpecifier('descendant-or-self')

PyXML is dead project. It does not accept patches. Some Linux distros already excluded it from repositories and Windows version for new Python does not exist as well.

Try to avoid using PyXML and replace it e.g. by xml.dom.minidom or elemettree.

7. October 2010

Prechádzka po XML s namespace v Pythone

V predchádzajúcom príspevku “Jednoduchá prechádzka po XML v Pythone”, som ukázal, ako je možné parsovať XML pomocou Pythonu.

Čo ale v prípade, že potrebujeme použiť namespace?

Namespace sa expanduje do tvaru {namespace}element. Čo sa odrazí napríklad v príkaze find. Výsledný kód bude vyzerať nasledovne:

from xml.etree import ElementTree
xmlTest="""
 <s:xml xmlns:s="library://ns.adobe.com/flex">
  <s:person>
  <s:id>573280</s:id>
  <s:type>Supplier</s:type>
 </s:person>
 <s:person>
  <s:id>66172</s:id>
  <s:type>Customer</s:type>
 </s:person>
</s:xml>
"""

tree = ElementTree.fromstring(xmlTest)

namespace="library://ns.adobe.com/flex"
for person in tree:
  type = person.find('{%s}type' % namespace)
  id = person.find('{library://ns.adobe.com/flex}id')
  if type.text == 'Supplier':
    print "Supplier:",id.text

Všimnime si jednoduchý trik s %s na riadku s type = person.find.

5. September 2010

Zmena digitálneho sveta

Digitálny svet bol dlho doménov rôznych kmeňov počítačovníkov. Áno, slovo bol je použité zámerne. Slovo dlho, znamená niekoľko dekád. Kmene počítačovníkov sú rôzne skupiny IT ľudí, či už enterprise, close source alebo open source.  Kmene sa vyznačovali príznačným slangom, ktorému nepočítačovník nerozumel. Typicky používali nejakú anglicky znejúcu hantýrku.

Tieto skupiny počítačovníkov boli nesmierne dôležité, pretože položili základ pre nové možnosti digitálnych technológií.

Tak ako ľudstvo vymyslelo koleso, tak sa za posledné dekády podarilo objaviť niekoľko nových vynálezov.  Spomeňme si tie významnejšie, ktoré lomcujú svetom dnes. Za základný objav jednoznačne patrí Internet, na ktorom bola objavená blogosféra. Od blogosféry je už len krok k sociálnym sieťam.

Zoberme si tieto tri vynálezy a pozrime sa, kto ich využíva.

Internet bol prvý a tak väčšina jeho používateľov patrila práve do kmeňov počítačovníkov. Pokiaľ človek nepoznal pojmy ako HTTP, TCP a port, tak si moc neškrtol.

Postupne sa ale darilo programátorom stavať technológie tak, aby nevyžadovali hodiny a hodiny strávené za počítačmi. Umožnili tak nástup blogosféry. Kto mal potrebu niečo napísať, založil si blog a začal publikovať.

Transformácia technológie pokračovala ďalej. Tentokrát to neboli technicky a publikačne založení ľudia, kto priniesol adaptáciu sociálnych sietí. Sociálne siete vďačia za veľkú časť svojej obrovskej popularity práve mamičkám na materskej “dovolenke”. Dokonca sociálne siete dokázali zbaviť ľudí počítačo-fóbie.

Ešte raz zopakujem jednu podstatnú vetu: digitálny svet bol dlho doménov rôznych kmeňov počítačovníkov. Bariéra pre vstup do digitálneho sveta sa zmenšila. Digitálny svet už za tie roky pozná aj diakritiku. Dokonca nerozpráva sa v ňom výhradne anglicky. Používateľ dokonca nepotrebuje prejsť vysokoškolským kurzom na prežitie v digitálnej divočine.

Počítačovníci sú naďalej veľmi dôležití, pretože umožňujú udržanie a chod digitálneho sveta.

Časť počítačovníkov však jednoducho odmieta priznať, že by mohol byť na svete aj niekto iný, kto používa aplikácie a nevie po anglicky alebo dokonca nevie základy HTML. Prípadne niekto, kto si nevie skontrolovať zapnutý Caps Lock pri písaní hesla.

Takýto netolerantný počítačovník dokáže bežného človeka zastrašiť tým, že vychrlí takmer neartikulovanú zmes technologických slovíčok a skratiek typu: RTFM, XML a RSS. Ako sa brániť? Netreba prepadať panike. Takmer staroveké príslovie hovorí: “Facebook má skupinu na všetko.” Prípadne môžete skúsiť poznamenať, že Google Chrome6 už v adrese nezobrazuje ani http protokol ;-)

Digitálny svet sa nám postupne mení, tak ako sa mení aj ten reálny. Na záver už len pripomeniem 5 typických fáz, ktoré sprevádzajú zmenu: šok zo zmeny, popieranie a snaha o zastrašenie zmeny, ignorovanie zmeny, akceptovanie zmeny, ocenenie prínosu zmeny.

15. June 2010

Jednoduchá prechádzka po XML pomocou Pythonu

Taká užitočná vec, možno sa niekomu hodí. ElementTree pre Python obsahuje parser XML. V nasledujúcom príklade vyrobím zo stringu Element a následne nad ním spustím iteráciu cez for.

Je dôležité upozorniť, že find vracia prvky Element. Textový obsah z nich je možné vytiahnuť pomocou atribútu text.

Pokiaľ sa s tým chcete viac hrať, odporúčam použiť iPython shell, ktorý podporuje dopĺňnanie príkazov pomocou tabulátoru.

from xml.etree import ElementTree

xmlTest="""
<xml>
<person>
 <id>573280</id>
 <type>Supplier<type>
</person>
<person>
 <id>66172<id>
 <type>Customer</type>
</person>
</xml>
"""

tree = ElementTree.fromstring(xmlTest)

for person in tree:
    type = person.find('type')
    id = person.find('id')
    if type.text == 'Supplier':
        print "Supplier:",id.text

API k ElemenTree nájdete na python.org. Pre Debian je táto funkcionalita k dispozícii v balíčku python-elementtree.

23. January 2010

Tvorba máp do hier – TaT Tile Map Editor

Podľa môjho názoru, vytvorenie počítačovej hry preverí všetky developerské zručnosti. Znalosť vývojárskych nástrojov, programovacieho jazyka a debuggeru je základ. To však rozhodne nie je všetko. Preverí aj to, či developer dokáže vytvoriť aplikáciu tak, aby bežala na počítači aj niekomu inému. Preverí vynaliezavosť a kreativitu pri tvorbe scenára. Naviac dnes je už pomaly všetko zosieťované a tak preverí aj jeho schopnosť prepojiť hru do sieťového prostredia. Vytvorenie hry preverí aj silu vôle. Dotiahnuť aplikáciu do úspešného konca, rozhodne nespočíva len v písaní kódu.

A hlavne je to zábava. Veľa vývojárov berie aplikácie príliš seriózne a potom to aj tak vyzerá. Má to všetku funkcionalitu, ale nikto to nechce používať. Toto je pekne popísané vo vzore Soviet Style.

Jednou z častí hry je aj tvorba levelov. Tu totiž skončí väčšina nádejných tvorcov. Pokiaľ nemáte k dispozícii nástroje, ktoré môže používať aj normálny človek a vytvárať pomocou nich vlastné levely, tak hra zakape.

Dobrá správa, nemusíte plytvať svojím drahocenným časom, použite TaT Tile Map Editor. Jedná sa o voľne dostupný editor máp napísaný v Jave. Základom je možnosť tvorby dlaždičkových máp. Nadefinujete si grafiku do štvorčekov a potom pomocou nej skladáte mapu levelu. Za veľmi dôležitú vlastnosť považujem, že dokáže pracovať s vrstvami. Takto si môžete vytvoriť zložitejší svet, postavičky môžu chodiť  napríklad aj za stĺpom.

Výsledný projekt je uložený do ZIP archívu, kde sa napríklad nachádza samotná mapa v súbore global.xml. Tento editor som využil pri tvorbe PF2010. Jednotlivé časti mapy, ktoré sa postupne zobrazujú po nazbieraní 10 vločiek, sú riešené ako vrstvy tej istej mapy.

Osobne tento editor odporúčam. Myslím si, že autorom hier môže ušetriť množstvo vzácneho času.

  • Babel fish

      Translate from:

      Translate to:

  • Where’s the fish?

  • Further info

  • Twitter

    Follow @jurajmichalek on twitter.

  • Learning

    lynda.com online training tutorials
  • Tags

  • Topics

  • Comments