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.

  • Where’s the fish?

  • Further info

  • Twitter

    Follow @jurajmichalek on twitter.

  • Babel fish

      Translate from:

      Translate to:

  • Tags

  • Topics

  • Comments