<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-10745624</id><updated>2011-12-17T13:59:47.162+01:00</updated><title type='text'>bbLOG</title><subtitle type='html'>pretežno neškodljivo</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://borutb.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://borutb.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Borut Bolčina</name><uri>https://profiles.google.com/100412320755782895986</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-lSS0jJqb0lE/AAAAAAAAAAI/AAAAAAAAAAA/Ilphj3SxrAI/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>24</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-10745624.post-289975402643989431</id><published>2007-10-06T15:39:00.000+02:00</published><updated>2007-10-07T18:20:54.800+02:00</updated><title type='text'>IBLOC 2007</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dW-BmW1h1P4/Rwjtji8HMLI/AAAAAAAAA1M/EzRY6P71y1c/s1600-h/ibloc2007.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://4.bp.blogspot.com/_dW-BmW1h1P4/Rwjtji8HMLI/AAAAAAAAA1M/EzRY6P71y1c/s400/ibloc2007.png" alt="" id="BLOGGER_PHOTO_ID_5118602171436708018" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Letos sem konferenco izkoristil za obisk delavnice  "JBoss Seam: Revolucija poslovnega spleta", ki sta jo vodila (delavnico, ne revolucije) Aleš Justin in Matija Mazi.  Naslov je  bil za moj okus zastavljen preveč marketinško. Sama beseda "revolucija" ni bila pojasnjena.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Pogovarjali smo se o:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul  style="text-align: justify;font-family:verdana;"&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;a type="amzn" category="books" search="jboss"&gt;JBoss&lt;/a&gt; (aplikacijski strežnik),&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;a type="amzn" category="books" search="hibernate"&gt;Hibernate&lt;/a&gt; (OR/M ogrodje),&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;a type="amzn" category="books" search="jboss seam"&gt;Seam&lt;/a&gt; (spletno ogrodje)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;a type="amzn" category="books" search="drools"&gt;Drools&lt;/a&gt; (orodje za gradnjo poslovnih pravil),&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;a type="amzn" category="books" search="jbpm"&gt;jBPM&lt;/a&gt; (workflow engine)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;  Cilj delavnice naj bi bil izdelava preproste CMS spletne aplikacije, ki bi demonstrirala zgoraj naštete tehnologije, plus Ajax in postavitev v gručo. Resnici na ljubo, delavnica ni bila delavnica ampak predavanje, tako da sami nismo ničesar tipkali. Manjše razočaranje, ampak ok.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Šli smo korakoma skozi več faz implementacije mini CMS sistema. Aplikacija je bila shranjena v &lt;a type="amzn" category="books" search="subversion"&gt;Subversion&lt;/a&gt; repozitoriju na &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://code.google.com/p/ibloc-seam/"&gt;Google Code&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;, faze pa označene z značkami, tako da smo lahko hitro preizkušali funkcionalnosti - dober prijem.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Najprej smo govorili o modelu. Vsak razred je predstavljen kot &lt;a type="amzn" category="books" search="pojo"&gt;POJO&lt;/a&gt; z anotacijami. Anotacije so bile praktično na vsakem koraku, na momente jih je bilo strašljivo veliko - najbrž se človek privadi. Anotacije so bile iz &lt;span style="font-style: italic;"&gt;javax.persistence&lt;/span&gt; in &lt;span style="font-style: italic;"&gt;org.hibernate.search.annotations&lt;/span&gt;. Več o Hibernate search kasneje. Na hitro smo omenili tudi strategije za preslikovanje modelnih razredov, če med njimi obstaja dedovanje. Pomembno je namreč, kako se taka struktura preslika v bazne entitete. Malo me je motilo, da se določeni pojmi niso razložili dovolj natančno, na primer - kako so med seboj povezani &lt;a type="amzn" category="books" search="ejb3"&gt;EJB 3&lt;/a&gt;, &lt;a type="amzn" category="books" search="jpa"&gt;JPA&lt;/a&gt; in &lt;a type="amzn" category="books" search="hibernate"&gt;Hibernate 3&lt;/a&gt; (v dvorani smo bili različni profili).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Ogledali smo si prikazno tehnologijo - &lt;a type="amzn" category="books" search="jsf"&gt;JSF&lt;/a&gt; in &lt;a type="amzn" category="books" search="jboss seam"&gt;Seam&lt;/a&gt;. Zdaj, ko poskušam napisati kako sta povezana, se mi poraja več vprašanj kot odgovorov. Moral sem iti na Google in malo raziskovati, da sem ugotovil, da je Seam "povezava" med JSF in EJB3. JSF je standard, privzeto Seam uporablja RichFaces kot implementacijo UI komponent. JSF je tudi po besedah Aleša, ki je zaposlen na JBoss, že od izida trpel zaradi slabega dizajna (v navezi z JSP), zaradi česar se mi je prav oddahnilo, saj je s tem pritrdil mojemu prepričanju. Bom pa najverjetneje v bližnji prihodnosti Seam (in JSF inkarnacije) raziskal. Na vprašanje o procesu izdelave spletne aplikacije, predvsem kako med seboj sodelujejo programerji in oblikovalci, nisem dobil ravno zadovoljivega odgovora. Grafično orodje za izdelavo dinamičnih HTML strani je še v izdelavi, ampak to sem odkril sam kasneje. Tako orodje Maticu ni kaj dosti pomenilo, po občutku.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Takole izgleda xhtml predloga (template) za vstopno stran mini CMS aplikacije:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dW-BmW1h1P4/Rwi-GS8HMKI/AAAAAAAAA1E/3ulVdQqRjBw/s1600-h/ibloc-seam-home.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://3.bp.blogspot.com/_dW-BmW1h1P4/Rwi-GS8HMKI/AAAAAAAAA1E/3ulVdQqRjBw/s800/ibloc-seam-home.png" alt="" id="BLOGGER_PHOTO_ID_5118549991879028898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;V glavi je definiranih kar nekaj imenskih prostorov. Koliko je elementov v posameznem nimam pojma, bom pa ravno tako preveril. Nekatere od teh značk so vizualne, druge pa nevizualne "komponente". V narekovajih zato, ker si tudi še ne predstavljam JSF-jeve definicije komponente.&lt;/span&gt;&lt;/span&gt;  &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;br /&gt;Govorili smo tudi o tako imenovani bijekciji (&lt;span style="font-style: italic;"&gt;bijection&lt;/span&gt;), ki je posplošena injekcija (&lt;span style="font-style: italic;"&gt;injection&lt;/span&gt;). &lt;span style="font-style: italic;"&gt;Inversion of Control&lt;/span&gt; ali &lt;span style="font-style: italic;"&gt;Dependency Injection&lt;/span&gt; ni obskurna tehnika, ampak &lt;span style="font-style: italic;"&gt;mainstream&lt;/span&gt; prijem za pisanje bolj modularnih in testabilnih aplikacij.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Seam ima dobro rešen koncept kontekstov. Iz servlet specifikacije recimo poznamo &lt;span style="font-style: italic;"&gt;request&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;session&lt;/span&gt; in &lt;span style="font-style: italic;"&gt;application&lt;/span&gt; kontekste, Seam pa doda predvsem dva zanimiva: &lt;span style="font-style: italic;"&gt;conversation&lt;/span&gt; in &lt;span style="font-style: italic;"&gt;business&lt;/span&gt;. Oba sta veliko bolj smiselna iz stališča aplikacije, saj je vsaka uporabnikova akcija sestavljena iz niza nekih opravil in pri pisanju spletnih aplikacij pride vsaka pomoč pri abstrakciji  takih nizov opravil nad &lt;span style="font-style: italic;"&gt;stateless&lt;/span&gt; http protokolom zelo prav. Poslovni procesi pa gredo še korak dalje. Zajemajo več pogovorov različnih uporabnikov, stanja pa se shranjujejo na strežniku in delujejo tudi po izpadu strežnika. Proces opišemo z jezikom jPDL.&lt;/span&gt;&lt;/span&gt;  &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;br /&gt;Omenjen je bil SeamGen, ki zna iz podatkovne baze zgraditi preprosto (iz publike je bilo slišati, da je še zelo nezrel) CRUD spletno aplikacijo. Videno in boljše realizirano že davno tega (&lt;/span&gt;&lt;a style="font-family: verdana;" href="http://developer.apple.com/documentation/WebObjects/Developing_With_D2W/index.html"&gt;WebObjects Direct to Web&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; ali &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.trailsframework.org/Overview"&gt;Trails&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;).&lt;/span&gt;&lt;/span&gt;  &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;br /&gt;Avtentikacija in avtorizacija (AA) sta izvedeni kot nadgradnja nad &lt;a type="amzn" category="books" search="jaas"&gt;JAAS&lt;/a&gt; in Seam skrije kompleksnost le-tega. Z Drools opišemo pravila, če jih potrebujemo za kompleksnejše postopke  za AA.&lt;/span&gt;&lt;/span&gt;  &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;br /&gt;Hibernate Search je bila ena izmed zanimivejših stvari tega predavanja. Poanta je, da z anotacijami v našem modelnem razredu, ki je seveda tudi perzistenten, označimo katera "polja" naj se indeksirajo (Lucene), tako da lahko transparentno po podatkih tudi iščemo (&lt;span style="font-style: italic;"&gt;full text search&lt;/span&gt;)! Iskalnik nam tako vrača že inicializarane POJO objekte, ki ustrezaju danemu iskalmenu pogoju. Zelo, zelo zanimivo.&lt;/span&gt;&lt;/span&gt;  &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;br /&gt;Ajax je pokrit z RichFaces. Malo, skoraj nič, nismo govorili o tem. Za raziskat.&lt;/span&gt;&lt;/span&gt;  &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;br /&gt;No in na koncu smo aplikacijo pognali še v gruči (dva prenosna računalnika). V "osnovnem" načinu je gruča delovala, saj je po zrušitvi enega JBoss aplikacijskega strežnika delo prevzel drugi in uporabnik ni opazil, da dela na drugem stroju. Ni pa delovalo (ne vem zakaj) nadaljevanje dela, če je bil uporabik v seji (oddaja članka), ki traja čez več &lt;span style="font-style: italic;"&gt;request-response&lt;/span&gt; ciklov.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Aleš pravi, da bo JBoss 5.0 kompletno prepisan na področju &lt;span style="font-style: italic;"&gt;class loadinga&lt;/span&gt;, ker na zdajšnje stanje niso ravno ponosni.&lt;/span&gt;&lt;/span&gt;  &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;br /&gt;Predavanje smo podaljšali kar za celo uro, ker je bilo na urniku skoraj preveč snovi - vsaka izmed njih bi lahko trajala nekaj ur. Teme so nam dale dobre iztočnice za samostojno nadaljevanje.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10745624-289975402643989431?l=borutb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://borutb.blogspot.com/feeds/289975402643989431/comments/default' title='Objavi komentarje'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10745624&amp;postID=289975402643989431' title='Št. komentarjev: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/289975402643989431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/289975402643989431'/><link rel='alternate' type='text/html' href='http://borutb.blogspot.com/2007/10/ibloc-2007.html' title='IBLOC 2007'/><author><name>Borut Bolčina</name><uri>https://profiles.google.com/100412320755782895986</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-lSS0jJqb0lE/AAAAAAAAAAI/AAAAAAAAAAA/Ilphj3SxrAI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_dW-BmW1h1P4/Rwjtji8HMLI/AAAAAAAAA1M/EzRY6P71y1c/s72-c/ibloc2007.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10745624.post-8782720680215940130</id><published>2007-01-20T12:02:00.000+01:00</published><updated>2007-06-30T17:49:43.991+02:00</updated><title type='text'>Commons Lang</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh5.google.com/borut.bolcina/RnQJ8ebvVAI/AAAAAAAAANo/crkYyPOPskA/face-in-beans.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px;" src="http://lh5.google.com/borut.bolcina/RnQJ8ebvVAI/AAAAAAAAANo/crkYyPOPskA/face-in-beans.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Sicer že stara fora, ampak - ali najdete obraz na tej sliki? Po (pre)dolgem času sem se spet spravil napisat en tehno članek o rečeh, ki jih uporabljamo programerji. Tokrat o &lt;a href="http://jakarta.apache.org/commons/lang/"&gt;Jakarta Commons Lang&lt;/a&gt;. &lt;/span&gt;  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Jakarta Commons Lang je javanska knjižnica, ki je nastala zaradi pomanjkanja metod, ki jih programerji potrebujemo pri vsakdanjem delu. JDK kljub ogromnemu številu razredov ne ponuja rešitev iz rokava za prav vsak problem, ki ga želimo rešiti. &lt;/span&gt;  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Tako so se z leti razvoja te knjižnice izoblikovale “pomožne” (utility) metode za delo z&lt;span style="font-family:verdana;"&gt; &lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;ul style="text-align: justify;font-family:verdana;" &gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;nizi (StringUtils, StringEscapeUtils, RandomStringUtils, Tokenizer, WordUtils),&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;znaki (CharSetUtils, CharSet, CharRange, CharUtils),&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;JVM (SystemUtils, CharEncoding),&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;serializacijo (SerializationUtils, SerializationException),&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;objekti (ObjectUtils),&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;razredi (ClassUtils),&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;polji (ArrayUtils),&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;boolean vrednostmi (BooleanUtils),&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;programskimi izjemami (!) (Exceptions),&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;graditelji (HashCodeBuilder, EqualsBuider, CompareToBuiler, ToStringBuilder),&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;matematičnimi operacijami (npr. NumberUtils.createNumber(String)),&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;tekstovnimi operacijami (StrBuilder, StrMatcher, StrTokenizer) in&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;operacije s časom (DateUtils, StopWatch, DateFormatUtils). &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt; &lt;span style="font-family:verdana;"&gt;Suhoparno naštevanje paketov in razredov nima pomena. Tisti, ki ste taki, da začnete takoj tipkati ko zagledate nov API itak tega več ne berete in ste že na &lt;a href="http://jakarta.apache.org/commons/lang/api-release/index.html"&gt;Commons Lang JavaDoc&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Fino je dobiti pregled nad celotno ponudbo takih in podobnih knjižnic, da ne izgubljamo časa z razvojem svojih (že izumljenih) rešitev. Na svetu je po zadnji oceni okrog tri milijone programerjev v Java jeziku in nekaj nas je že poskusilo napisat kak recept iz Commons Lang. Ste že našli noter tudi kaj svojega?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10745624-8782720680215940130?l=borutb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://borutb.blogspot.com/feeds/8782720680215940130/comments/default' title='Objavi komentarje'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10745624&amp;postID=8782720680215940130' title='Št. komentarjev: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/8782720680215940130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/8782720680215940130'/><link rel='alternate' type='text/html' href='http://borutb.blogspot.com/2007/01/commons-lang.html' title='Commons Lang'/><author><name>Borut Bolčina</name><uri>https://profiles.google.com/100412320755782895986</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-lSS0jJqb0lE/AAAAAAAAAAI/AAAAAAAAAAA/Ilphj3SxrAI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10745624.post-7916299461103508528</id><published>2006-10-31T08:24:00.000+01:00</published><updated>2007-06-30T19:54:51.145+02:00</updated><title type='text'>Selenium - funkcionalni testi</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dW-BmW1h1P4/RoaY3hjaQ1I/AAAAAAAAASI/ksSdNAM0etA/s1600-h/selenium-remote-control.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_dW-BmW1h1P4/RoaY3hjaQ1I/AAAAAAAAASI/ksSdNAM0etA/s400/selenium-remote-control.jpg" alt="" id="BLOGGER_PHOTO_ID_5081917309201302354" border="0" /&gt;&lt;/a&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext outofpic"  &gt;Izvajanje funkcionalnih testov spletnih aplikacij, ki jih venomer nadgrajujemo z novimi storitvami mora biti izvedeno in avtomatizirano. S funkcionalnimi testi moramo pokriti vsaj osnovne dele spletne aplikacije, ki so kritični (&lt;span style="font-style: italic;"&gt;core business&lt;/span&gt;) za naročnika.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext outofpic"  &gt;Da ne bo zmede z izrazi - funkcionalni testi se drugače imenujejo tudi &lt;span style="font-style: italic;"&gt;"acceptance" &lt;/span&gt;ali &lt;span style="font-style: italic;"&gt;"black-box"&lt;/span&gt; testi in so komplementarni &lt;a href="http://en.wikipedia.org/wiki/XUnit"&gt;&lt;span style="font-style: italic;"&gt;xUnit&lt;/span&gt;&lt;/a&gt; in integracijskim testom. &lt;span style="font-style: italic;"&gt;Unit&lt;/span&gt; testi so pisani na nivoju metod in razredov, integracijski testi zajemajo testiranje med posameznimi moduli. Če spletna aplikacija ni napisana v duhu MVC, potem je &lt;span style="font-style: italic;"&gt;unit &lt;/span&gt;teste za C del prejšnje kratice praktično nemogoče pisati. Če še ne znamo pisati raznih &lt;span style="font-style: italic;"&gt;xUnit&lt;/span&gt; testov, lahko začnemo s funkcionalnimi.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext outofpic"  &gt;Tudi če imamo v firmi &lt;span style="font-style: italic;"&gt;QA&lt;/span&gt; oddelek, ljudi v njem nepotrebno obremenjujemo z izvajanjem testov, predvsem &lt;a href="http://en.wikipedia.org/wiki/Regression_testing"&gt;regresijskih&lt;/a&gt;, za katere velikokrat sploh zmanjka časa. Rutinske naloge dajmo izvajati stroju, ljudje naj delajo bolj kreativne naloge!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext outofpic"  &gt;&lt;a href="http://www.openqa.org/selenium/"&gt;Selenium&lt;/a&gt; je eno izmed orodij, ki ga lahko uporabimo v te namene. Od sorodnih (&lt;span style="font-style: italic;"&gt;opensource&lt;/span&gt;: HtmlUnit, Canoo, jWebUnit, Sahi, MaxQ, SAMIE, Watir, Mechanize; &lt;span style="font-style: italic;"&gt;licenčni&lt;/span&gt;: WinRunner, Rational Robot, SilkTest, Test Partner, IBM Rational Functional Tester), se loči po - citiram:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext outofpic"  &gt;&lt;span style="font-style: italic;"&gt;"Selenium tests run directly in a browser, just as real users do. And they run in Internet Explorer, Mozilla, and Firefox on Windows, Linux, and Macintosh. No other test tool covers such a wide array of platforms."&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext outofpic"  &gt;Kako pa lahko testi tečejo v brskalniku? Zato, ker jih poganja JavaScript. Res huda ideja, le spomnit in realizirat jo je treba. Selenium deluje v treh načinih:&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext outofpic"  &gt;&lt;ul&gt;&lt;li&gt;Bot mode (&lt;span style="font-style: italic;"&gt;Seleium Core&lt;/span&gt;)&lt;br /&gt;Testi se izvajajo direktno v brskalniku. Navodila (testi) morajo biti na strežniku, kjer teče spletna aplikacija.&lt;/li&gt;&lt;li&gt;Driven mode (&lt;span style="font-style: italic;"&gt;Selenium Remote Control&lt;/span&gt;)&lt;br /&gt;Teste lahko pišemo v: Java (JUnit, TestNG), C# (NUnit), Perl (Test::More), Python (unittest), Ruby (Test::Unit)&lt;/li&gt;&lt;li&gt;Record mode (&lt;span style="font-style: italic;"&gt;Selenium IDE&lt;/span&gt;)&lt;br /&gt;Ni samo record tool! Je IDE, ki med drugim omogoča pametno detekcijo elementov na spletni strani (ID, imena, XPath), autocomplete ukazov, breakpoints,...&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext outofpic"  &gt;Ni potrebno poudarjati, da se nam čas (=denar) investiran v pametno avtomatsko funkcionalno testiranje večkrat povrne.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10745624-7916299461103508528?l=borutb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://borutb.blogspot.com/feeds/7916299461103508528/comments/default' title='Objavi komentarje'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10745624&amp;postID=7916299461103508528' title='Št. komentarjev: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/7916299461103508528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/7916299461103508528'/><link rel='alternate' type='text/html' href='http://borutb.blogspot.com/2006/10/selenium-funkcionalni-testi.html' title='Selenium - funkcionalni testi'/><author><name>Borut Bolčina</name><uri>https://profiles.google.com/100412320755782895986</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-lSS0jJqb0lE/AAAAAAAAAAI/AAAAAAAAAAA/Ilphj3SxrAI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_dW-BmW1h1P4/RoaY3hjaQ1I/AAAAAAAAASI/ksSdNAM0etA/s72-c/selenium-remote-control.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10745624.post-193162899183512708</id><published>2006-10-15T20:59:00.000+02:00</published><updated>2007-06-30T17:52:02.710+02:00</updated><title type='text'>IBLOC 2006</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_dW-BmW1h1P4/RoZ8ExjaQzI/AAAAAAAAAR4/WkUMRsWkf6w/s1600-h/ibloc2006.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp1.blogger.com/_dW-BmW1h1P4/RoZ8ExjaQzI/AAAAAAAAAR4/WkUMRsWkf6w/s320/ibloc2006.gif" alt="" id="BLOGGER_PHOTO_ID_5081885650997363506" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;V Portorožu se je 2. in 3. oktobra dogajala Mednarodna poslovna linux in odprtokodna &lt;a href="http://www.ibloc.si/"&gt;konferenca&lt;/a&gt;. Otvoril jo je g. Dušan Kričej iz Ministrstva za javno upravo. Žal je sedanja oblast Ministrstvo za informacijsko družbo (&lt;a href="http://mid.gov.si/"&gt;MID&lt;/a&gt;) novembra 2004 ukinilo in njene naloge razdelilo na druga ministrstva.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Konferenca je bila razdeljena na več sekcij:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;varnost,&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;spletne tehnologije,&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;tehnična sekcija,&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;dobre prakse,&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;vgrajeni sistemi in&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;poslovna sekcija.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Sekcija "dobre prakse" je bila vpeljana letos in je pokrivala nekatere rešitve bazirane na odprti kodi. Te rešitve so bile komentirane oziroma predstavljene iz ust uporabnikov in ne njihovih avtorjev ali posrednikov, kar doprinese k večji objektivnosti. Resnici na ljubo objektivnost ne pride sama po sebi, jo je pa lahko prepoznati. Ali, še lažje je prepoznati njeno nasprotje.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Eno izmed meni najbolj zanimivih predavanj je bilo "&lt;a href="http://www.turbogears.org/"&gt;Turbo Gears&lt;/a&gt; - o(g)rodje za agile razvoj spletnih aplikacij". Predstavitev je imel Simon Belak iz firme &lt;a href="http://www.hruska.si/"&gt;Hruška&lt;/a&gt;. Je eden izmed nosilcev razvoja, zato je bilo predavanje avtoritativno. Zelo pozitivno lahko ocenim njegov pristop pri predstavitvi, saj lahko, kot sem že ničkolikokrat videl in bral, protagonist izpade kot borec za najsvetejše ideale - to pa ustvarja negativno klimo med uporabniki različnih tehnologij. Hvala bogu g. Belak ni eden izmed takih, čeprav se je med slušatelji oglašal provokator.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Sicer pa so si bila predavanja po tematiki med seboj sila različna. Nekatera zelo tehnično zahtevna, druga pa bolj filozofska, in žal tudi ne preveč v duhu odprtokodne skupnosti. Vsekakor potrebujemo konference o odprtokodnih rešitvah, ki se ukvarjajo vse od poslovnih modelov za uvedbo in uporabo takih tehnologij v realnem življenju, pa vse do konkretnih rešitev v obliki delavnic in predstavitev konkretnih tehnologij. Sicer pa - vsak odprtokodni projekt je viden toliko, kolikor ima aktivno skupnost. Če se skupnost ne zaveda pomena dokumentacije, prezentacije ali celo marketinga, ostane tehnologija bolj marginalna, čeprav tehnološko dobra.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Skupnost je sestavljena iz posameznikov, vsak zase pa najbolj ve ali je iz pravega testa za odprtokodno miselnost.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10745624-193162899183512708?l=borutb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://borutb.blogspot.com/feeds/193162899183512708/comments/default' title='Objavi komentarje'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10745624&amp;postID=193162899183512708' title='Št. komentarjev: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/193162899183512708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/193162899183512708'/><link rel='alternate' type='text/html' href='http://borutb.blogspot.com/2006/10/v-portorou-se-je-2.html' title='IBLOC 2006'/><author><name>Borut Bolčina</name><uri>https://profiles.google.com/100412320755782895986</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-lSS0jJqb0lE/AAAAAAAAAAI/AAAAAAAAAAA/Ilphj3SxrAI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_dW-BmW1h1P4/RoZ8ExjaQzI/AAAAAAAAAR4/WkUMRsWkf6w/s72-c/ibloc2006.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10745624.post-115666217683522534</id><published>2006-08-23T21:51:00.000+02:00</published><updated>2007-06-30T19:56:21.272+02:00</updated><title type='text'>JIRA</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_dW-BmW1h1P4/RoaZNxjaQ2I/AAAAAAAAASQ/M9EwzIwHQKE/s1600-h/bug+cartoon.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_dW-BmW1h1P4/RoaZNxjaQ2I/AAAAAAAAASQ/M9EwzIwHQKE/s400/bug+cartoon.gif" alt="" id="BLOGGER_PHOTO_ID_5081917691453391714" border="0" /&gt;&lt;/a&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Zakaj je za firmo dobro, da shranjuje znanje? Kaj sploh to pomeni!?! Proces razvoja programske opreme gre skozi mnogo faz in katerikoli pristop že uporabljamo, vedno bo prihajalo do predlogov za izboljšave in še boj zagotovo bo prihajalo do napak pri implementaciji željene funkcionalnosti. Ni vseeno kako in ali sploh beležimo težave. Te težave in še bolj njihove rešitve so temelj znanja (beri znanje je denar). Ali obstaja način, da znanje nevede (bizarno!) razdelimo med svoje sodelavce ali zanamce. Če nam je kaj do tega, potem se pameten gospodar ne odloča prav dolgo.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;&lt;a href="http://www.atlassian.com/software/jira/"&gt;JIRA&lt;/a&gt; je sistem za projektno vodenje, ki nam omogoča zelo premišljen postopek za evidentiranje programskih pomankljivosti, želj po novih funkcionalnosti, razdeljevanje nalog sodelujočim, pregled nad urnikom posameznikov in skupin. Lahko je podlaga za odločanje o razporeditvah delovnih nalog, posameznim vodjem omogoča razna poročila o zasedenosti posameznikov (na podlagi njihovih ocen!). Razvitih je bilo že ničkoliko &lt;a href="http://confluence.atlassian.com/display/JIRAEXT/Home"&gt;vključkov&lt;/a&gt;, ki dopolnjujejo osnovno funkcionalnost te spletne aplikacije.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Obstaja mnogo projektov, ki omogočajo prijavljanje napak programske opreme, a se nobena od meni znanih ne približa intuitivnosti in hkrati tolikšni fleksibilnosti. Ker sem se pred leti tudi sam ukvarjal z razvojem tovrstne spletne aplikacije, toliko bolj spoštujem nastalo rešitev.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Več odprtokodnih projektov, ki so mi prekrižali pot (Cayenne, Quartz, Maven, Tapestry, HttpClient...) uporabljajo ta sistem in kot uporabnik na vseh teh se mi zdi, da ima primat z razlogom. Še bolj pa me je prepričal, ko sem ga pogledal v drobovje iz administratorske strani. Sistem lahko namestimo in ga brezplačno uporabljamo mesec dni.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Če poskušam odgovoriti na svoje v uvodu zastavljeno vprašanje &lt;span style="font-weight: bold;"&gt;kako shranjevati znanje&lt;/span&gt; - preprosto, organizirano &lt;span style="font-weight: bold;"&gt;zbirajmo vsakodnevne težave&lt;/span&gt; in jih rešujmo eno za drugo, a &lt;span style="font-weight: bold;"&gt;pri tem pustimo za sabo sled&lt;/span&gt;! Ta sled je referenca, je točka na katero se lahko vrnemo in iz nekaj preprostih stavkov razberemo rešitev. Je referenca, ki nas lahko opomni, da gre osel lahko večkrat na led. Že pomanjkanje komunikacije med sodelujočimi na istem projektu je težava, kaj šele pomeni to za dolgoročne projekte z nestalnimi sodelujočimi.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10745624-115666217683522534?l=borutb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://borutb.blogspot.com/feeds/115666217683522534/comments/default' title='Objavi komentarje'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10745624&amp;postID=115666217683522534' title='Št. komentarjev: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/115666217683522534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/115666217683522534'/><link rel='alternate' type='text/html' href='http://borutb.blogspot.com/2006/08/jira.html' title='JIRA'/><author><name>Borut Bolčina</name><uri>https://profiles.google.com/100412320755782895986</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-lSS0jJqb0lE/AAAAAAAAAAI/AAAAAAAAAAA/Ilphj3SxrAI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_dW-BmW1h1P4/RoaZNxjaQ2I/AAAAAAAAASQ/M9EwzIwHQKE/s72-c/bug+cartoon.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10745624.post-115630858706475080</id><published>2006-08-22T22:34:00.000+02:00</published><updated>2007-06-30T19:57:59.120+02:00</updated><title type='text'>Commons Configuration</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_dW-BmW1h1P4/RoaZnBjaQ3I/AAAAAAAAASc/-jwUHwcXFCM/s1600-h/configuration.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp2.blogger.com/_dW-BmW1h1P4/RoaZnBjaQ3I/AAAAAAAAASc/-jwUHwcXFCM/s400/configuration.jpg" alt="" id="BLOGGER_PHOTO_ID_5081918125245088626" border="0" /&gt;&lt;/a&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;V enem izmed prejšnjih zapisov sem omenil, da lahko z malo raziskovanja odkrijemo že izdelane rešitve, ker je skoraj zagotovo že nekdo pred nami potreboval in rešil kakšen problem, ki nas tare.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;&lt;a href="http://jakarta.apache.org/commons/configuration/"&gt;Commons Configuration&lt;/a&gt; (CC) je programska knjižnica, ki nam olajša dostop do resursov, ki jih potrebuje aplikacija. Za osnovne potrebe nam Java ponuja razred &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/Properties.html"&gt;Properties&lt;/a&gt;, včasih pa bi potrebovali kaj več. Recimo, da aplikacija iz nekih razlogov potrebuje štiri konfiguracijske datoteke ali še bolje - vire. Ali ne bi bilo fino, da lahko do vseh štirih dostopate na enoten način - prek enotnega mehanizma? Recimo, da potrebujete nek vrstni red ali hierarhijo konfiguracijskih vrednosti. Kaj pa nekaj tako naravnega kot je pisanje nazaj v navadno properties datoteko, ampak tako, da se ohrani vrstni red zapisov in komentarjev ter vmesne prazne vrstice? Včasih bi si človek zaželel, da lahko dostopa do konfiguracijskih vrednosti neodvisno od formata in fizične lokacije. To in še več je možno s Commons Configuration.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;CC nam ponuje enoten vmesnik za dostop do vrednosti iz sledečih virov:&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;&lt;ul&gt;&lt;li&gt;Property datotek&lt;/li&gt;&lt;li&gt;XML dokumentov&lt;/li&gt;&lt;li&gt;Property list datotek (.plist)&lt;/li&gt;&lt;li&gt;JNDI&lt;/li&gt;&lt;li&gt;JDBC Datasource&lt;/li&gt;&lt;li&gt;System properties&lt;/li&gt;&lt;li&gt;Applet parametrov&lt;/li&gt;&lt;li&gt;Servlet parametrov&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Naša naloga je, da ob zagonu aplikacije inicializiramo konfiguracijski sistem in ga damo na volju posameznim aplikacijskim sklopom. To običajno pomeni, da mora biti na voljo objekt tipa &lt;a href="http://jakarta.apache.org/commons/configuration/apidocs_1.2/org/apache/commons/configuration/Configuration.html"&gt;Configuration&lt;/a&gt;. Z aplikacijo se osredotočimo na reševanje zadanega poslovnega problema in se ne ubadamo s podrobnostmi ali načrtovanjem lastnih rešitev znotraj firme, kar običajno ni poceni.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Iz lastne izkušnje lahko tudi povem, da je avtor te odprtokodne knjižnice dojemljiv za predloge in izboljšave in kot vedno - na voljo imamo izvorno kodo, tako da jo lahko tudi sami prikrojimo, če nam kaj ne ustreza.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10745624-115630858706475080?l=borutb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://borutb.blogspot.com/feeds/115630858706475080/comments/default' title='Objavi komentarje'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10745624&amp;postID=115630858706475080' title='Št. komentarjev: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/115630858706475080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/115630858706475080'/><link rel='alternate' type='text/html' href='http://borutb.blogspot.com/2006/08/commons-configuration.html' title='Commons Configuration'/><author><name>Borut Bolčina</name><uri>https://profiles.google.com/100412320755782895986</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-lSS0jJqb0lE/AAAAAAAAAAI/AAAAAAAAAAA/Ilphj3SxrAI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_dW-BmW1h1P4/RoaZnBjaQ3I/AAAAAAAAASc/-jwUHwcXFCM/s72-c/configuration.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10745624.post-115666260474517782</id><published>2006-07-31T21:15:00.000+02:00</published><updated>2007-06-30T19:58:57.087+02:00</updated><title type='text'>Agilni projekti - lahek dostop do izkušenih uporabnikov</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_dW-BmW1h1P4/RoaZ1RjaQ4I/AAAAAAAAASk/JvWSFrP44Cc/s1600-h/albert.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp3.blogger.com/_dW-BmW1h1P4/RoaZ1RjaQ4I/AAAAAAAAASk/JvWSFrP44Cc/s400/albert.jpg" alt="" id="BLOGGER_PHOTO_ID_5081918370058224514" border="0" /&gt;&lt;/a&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Najprej bi omenil razliko med domenskimi strokovnjaki (&lt;span style="font-style: italic;"&gt;business experts&lt;/span&gt;) in izkušenimi uporabniki (&lt;span style="font-style: italic;"&gt;expert users&lt;/span&gt;). Ni nujno, da sta to različni osebi, je pa v praksi to večkrat res.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Po domače povedano bi rekel, da domenski strokovnjaki obvladajo teorijo, izkušeni uporabniki pa poznajo vsakdanje operacije v delovnih postopkih. Prvi imajo pregled nad poslovnimi strategijami, drugi pa vedo katere informacije so v določenem trenutku pomembne za izvedbo konkretnega postopka.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Kaj pridobimo z lahkim dostopom do slednjih?&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;&lt;ul&gt;&lt;li&gt;Ljudi, ki jim lahko dajemo vmesne produkte v testiranje.&lt;/li&gt;&lt;li&gt;Hiter odziv o kvaliteti produkta.&lt;/li&gt;&lt;li&gt;Razvojna ekipa pridobi odzive na uporabljene prijeme pri načrtovanju aplikacije.&lt;/li&gt;&lt;li&gt;Pridobimo ažurne podatke o funkcionalnih zahtevah&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Raziskave (&lt;span style="font-style: italic;"&gt;Kiel, Carmel&lt;/span&gt;) so pokazale veliko večji uspeh pri projektih, ki so imeli neposredno povezavo med razvojno ekipo in izkušenimi uporabniki sistema, ki ga želimo informatizirati ali izboljšati procese. Razlika se pokaže že pri tedenski frekvenci komunikacije. V odvisnosti od faze projekta je seveda odvisna tudi komunikacija. Ob začetku sta dva sestanka tedensko in dostop prek telefona ali druge elektronske komunikacije običajna.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Pri pomembnih projektih naročnik tudi "posodi" take uporabnike razvojnim ekipam ali pa obratno, nekdo iz razvojne ekipe se začasno "zaposli" pri naročniku in tako pridobi neprecenljive informacije procesov, ki jih želimo informatizirati. V slednjem primeru se tudi ublaži razlika med običajno dvema različnima svetovoma programerjev in uporabniki njihovih izdelkov - lahko se okrepi spoštovanje do drugega dela in zadovoljstvo ob rešitvi.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10745624-115666260474517782?l=borutb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://borutb.blogspot.com/feeds/115666260474517782/comments/default' title='Objavi komentarje'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10745624&amp;postID=115666260474517782' title='Št. komentarjev: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/115666260474517782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/115666260474517782'/><link rel='alternate' type='text/html' href='http://borutb.blogspot.com/2006/07/agilni-projekti-lahek-dostop-do.html' title='Agilni projekti - lahek dostop do izkušenih uporabnikov'/><author><name>Borut Bolčina</name><uri>https://profiles.google.com/100412320755782895986</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-lSS0jJqb0lE/AAAAAAAAAAI/AAAAAAAAAAA/Ilphj3SxrAI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_dW-BmW1h1P4/RoaZ1RjaQ4I/AAAAAAAAASk/JvWSFrP44Cc/s72-c/albert.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10745624.post-115360493763032431</id><published>2006-07-22T23:47:00.000+02:00</published><updated>2007-06-30T19:52:34.567+02:00</updated><title type='text'>XML členitelji</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_dW-BmW1h1P4/RoaYBhjaQ0I/AAAAAAAAASA/9UoXBa-aGvk/s1600-h/XMLdiagram-bewel.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp0.blogger.com/_dW-BmW1h1P4/RoaYBhjaQ0I/AAAAAAAAASA/9UoXBa-aGvk/s320/XMLdiagram-bewel.gif" alt="" id="BLOGGER_PHOTO_ID_5081916381488366402" border="0" /&gt;&lt;/a&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext outofpic"  &gt;Med tri-črkovnimi kraticami je verjetno med bolj znanimi v programerskih vodah - XML (&lt;span style="font-style: italic;"&gt;Extensible Markup Language&lt;/span&gt;). Ima burno zgodovino in mislim, da se prah okoli te kratice le polagoma poseda. Koliko zvenečih besed je bilo izrečenih in nekaj prav gotovo utemeljeno. No, izkazalo se je, da XML le ni naš odrešitelj, je "le" zelo uporabno orodje, če ga lahko tako kličem. Ker se ta blog ukvarja predvsem z jezikom Java, bom danes poskusil razdelati XML členilnike (&lt;span style="font-style: italic;"&gt;XML parsers&lt;/span&gt;) po več kriterijih.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext outofpic"  &gt;Slika po znanem reku pove več kot 1000 besed, zato bom pokomentiral posamezne standarde oziroma značilnosti le-teh.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext outofpic"  &gt;Najbolj groba delitev je na drevesni objektni model (&lt;span style="font-style: italic;"&gt;Document Object Model&lt;/span&gt;) in na pretočne (&lt;span style="font-style: italic;"&gt;streaming&lt;/span&gt;) členitelje. Za odločitev katero družino uporabiti je odločina velikost dokumentov, ki jih nameravamo obdelovati. Najbolje je, da na pričakovanih realnih primerih izmerimo porabo pomnilnika in procesorskega časa, velja pa ocena, da za dokumente velikostnega razreda nekaj 10 MB ni več optimalna uporaba DOM členiteljev. Seveda je brezpredmetno tudi za Java ME. Če si vseeno lahko privoščimo uporabo DOM Java APi-jev, pa so nekatere rešitve precej elegantne, kot na primer uporaba &lt;a href="http://www.w3.org/TR/xpath20/"&gt;XPath&lt;/a&gt; jezika za poizvedbe po drevesnem objektnem modelu.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext outofpic"  &gt;Priporočam &lt;a href="http://www.jdom.org/"&gt;JDOM&lt;/a&gt;, ki je zelo "očiščen" Java API za manipulacijo z XML DOM drevesom. Očiščen pravim zato, ker je DOM W3C-jev standard in členitelji, ki temeljijo na njem morajo upoštevati razne obskurnosti, ki so v specifikaciji zaradi pokrivanja splošnosti med programskimi jeziki.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext outofpic"  &gt;Naslednja velika delitev je med pretočnimi izvedenkami. Povlečni (&lt;span style="font-style: italic;"&gt;pull&lt;/span&gt;) in potisni (&lt;span style="font-style: italic;"&gt;push&lt;/span&gt;) način. Bolj znan je &lt;a href="http://www.saxproject.org/"&gt;SAX&lt;/a&gt;, ki je starejši, a ga začetniki vseeno neradi uporabljajo zaradi kompliciranosti. Sam API je dokaj enostaven, vendar je uporaba v aplikacijah nepotrebno komplicirana. Ima pa zelo dobro lastnost - hitrost. Zaradi zelo majhnega števila objektov, ki se morajo kreirati med členjenjem, je tudi poraba sistemskih virov majhna. Razne skupine so kmalu ugotovile pomanjkljivosti potisnega načina, kot je na primer dejstvo, da členitelj kliče našo aplikacijo in ne obratno, kot se to počne pri potisnih izvedenkah. Iz tega so nastali &lt;a href="http://www.extreme.indiana.edu/xgws/xsoap/xpp/"&gt;XPP serija&lt;/a&gt; in nazadnje (oktober 2003) tudi &lt;a href="http://jcp.org/aboutJava/communityprocess/final/jsr173/index.html"&gt;StAX&lt;/a&gt; standard.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext outofpic"  &gt;Razlika je v tem, da SAX členitelj prebere XML dokument in nato kliče metode v naši aplikaciji, povlečne členitelje pa kontroliramo iz aplikacije, torej mi povemo členitelju kdaj naj procesira. Imamo torej kontrolo nad aplikacijsko nitjo.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext outofpic"  &gt;Bistvene prednosti povlečnih pred potisnim SAX so:&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext outofpic"  &gt;&lt;ul&gt;&lt;li&gt;Členjenje preprostih XML dokumentov lahko izvedemo s preprosto kodo.&lt;/li&gt;&lt;li&gt;Lažje je napisati kodo za rekurzivno členjenje.&lt;/li&gt;&lt;li&gt;Če med členjenjem enega dokumenta ugotovimo, da potrebujemo informacije iz drugega, lahko to storimo v isti niti.&lt;/li&gt;&lt;li&gt;Lahko preskakujemo dele XML dokumenta, ki nas ne zanimajo in tako prihranimo čas in procesorsko moč.&lt;/li&gt;&lt;li&gt;Lahko ustvarimo pretočne cevovode (streaming pipelines).&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext outofpic"  &gt;Iz slike je razvidna še ena delitev in sicer na take povlečne, ki uporabljajo iteratorje, kurzorje in take, ki se obnašajo mešano (kreiranje dogodkovnih objektov med členjenjem lahko preprečimo s ponovno uporabo starih). Pri StAX standardu, ki bo mimogrede vključen v Java 6 (&lt;a href="https://mustang.dev.java.net/"&gt;Mustang&lt;/a&gt;), so se odločili za izvedbo dveh API-jev, enega, ki uporablja iteratorje in drugega, ki uporablja kurzorje. Iz tega razloga imamo možnost izbire glede na kontekst aplikacije, ki jo razvijamo. Odločimo se glede na:&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext outofpic"  &gt;&lt;ul&gt;&lt;li&gt;Če razvijamo Java ME aplikacijo, uporabimo kurzor API.&lt;/li&gt;&lt;li&gt;Če želimo imeti brezkompromisno hitrost procesiranja, uporabimo kurzor API.&lt;/li&gt;&lt;li&gt;Če želimo spreminjati dogodkovni tok, uporabimo iterator API.&lt;/li&gt;&lt;li&gt;Če delamo ekstenzibilne module, uporabimo iterator API.&lt;/li&gt;&lt;li&gt;Če smo v dvomih, uporabimo iterator API.&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext outofpic"  &gt; Priporočam StAX, ki ga lahko uporabimo tudi za kreiranje XML dokumentov (bolj intuitivno pa to počnemo z JDOM).&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10745624-115360493763032431?l=borutb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://borutb.blogspot.com/feeds/115360493763032431/comments/default' title='Objavi komentarje'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10745624&amp;postID=115360493763032431' title='Št. komentarjev: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/115360493763032431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/115360493763032431'/><link rel='alternate' type='text/html' href='http://borutb.blogspot.com/2006/07/xml-lenitelji.html' title='XML členitelji'/><author><name>Borut Bolčina</name><uri>https://profiles.google.com/100412320755782895986</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-lSS0jJqb0lE/AAAAAAAAAAI/AAAAAAAAAAA/Ilphj3SxrAI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_dW-BmW1h1P4/RoaYBhjaQ0I/AAAAAAAAASA/9UoXBa-aGvk/s72-c/XMLdiagram-bewel.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10745624.post-115099269074054916</id><published>2006-06-22T18:09:00.000+02:00</published><updated>2007-06-30T20:05:38.585+02:00</updated><title type='text'>Quartz</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.google.com/borut.bolcina/RoaaKxjaQ5I/AAAAAAAAASs/GFdbDNQKDvs/quartz.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://lh4.google.com/borut.bolcina/RoaaKxjaQ5I/AAAAAAAAASs/GFdbDNQKDvs/quartz.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;a href="http://www.opensymphony.com/quartz/"&gt;Quartz&lt;/a&gt; je ogrodje za pisanje aplikacij, ki temeljijo na periodičnih opravilih. Je odprtokodni sistem, ki lahko poganja samostojne aplikacije v Java jeziku ali pa take pisane za EE okolje. Uporabljamo ga kot razdeljevalnik poslov, ki so del nekih poslovnih procesov na strežniku ali strežnikih, saj podpira tudi gruče (&lt;span style="font-style: italic;"&gt;load-balance&lt;/span&gt; &lt;span style="font-style: italic;"&gt;fail-over&lt;/span&gt;). Lahko ga uporabimo tudi kot RMI (&lt;span style="font-style: italic;"&gt;Remote Method Invocation&lt;/span&gt;) strežnik.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;S konfiguracijo lahko dosežemo, da prožilci (&lt;span style="font-style: italic;"&gt;triggers&lt;/span&gt;) prožijo posle (&lt;span style="font-style: italic;"&gt;jobs&lt;/span&gt;) na praktično neomejeno število načinov. Na primer:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;v določenem trenutku dneva (na milisekundo natančno)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;na določen dan v tednu/mesecu/letu&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;periodično (n-krat, v neskončnost)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;do določenega datuma/ure&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ponavljajoče z zamikom&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;ne na določen datum (praznik)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Posle lahko organiziramo v skupine in jih tako logično združujemo.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;V Quartz-u imamo torej koncept posla in prožilca. Za en posel imamo lahko več prožilcev. Konkretno je posel, ki ga želimo izvesti (ali izvajati) implementiran kot razred, ki implementira vmesnik &lt;a href="http://www.opensymphony.com/quartz/api/org/quartz/Job.html"&gt;Job&lt;/a&gt; (ali &lt;a href="http://www.opensymphony.com/quartz/api/org/quartz/InterruptableJob.html"&gt;InterruptableJob&lt;/a&gt;). Implementirati moramo samo eno metodo (&lt;span style="font-style: italic;"&gt;execute&lt;/span&gt;), v kateri izvedemo kar želimo. Posle in prožilce lahko instanciramo programsko ali pa deklarativno. Osebno sem dosedaj uporabil slednji pristop, saj omogoča v produkcijskem okolju zelo enostavne spremembe kdaj na se kaj izvede. Potrebna je samo sprememba XML konfiguracijske datoteke. Quartz preverja ali se je kaj spremenilo in ustrezno reagira, torej nam ni potrebno aplikacije ponovno zaganjati, če želimo spremeniti na primer urnik posameznih opravil.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Posle, prožilce in ostale informacije o razdeljevalniku lahko hranimo tudi v podatkovni bazi, kar pomeni, da v primeru sesutja aplikacije ne izgubimo potrebnih informacij za nadaljevanje poslov ob ponovnem zagonu.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Če želimo prekiniti dolgo izvajajoč posel, potem implementiramo &lt;span style="font-style: italic;"&gt;InterruptableJob &lt;/span&gt;vmesnik. Na ta način lahko v metodi &lt;span style="font-style: italic;"&gt;interrupt &lt;/span&gt;nastavimo zastavico, ki jo v dolgi iteraciji pregledujemo in ustrezno reagiramo - varno končamo s procesiranjem.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Edina konkurenca je &lt;a href="http://www.fluxcorp.com/"&gt;Flux&lt;/a&gt;, ki pa je komercialni izdelek.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Po mojih izkušnjah je uporaba Quartz ogrodja enostavno in zelo olajša (in skrajša!) razvoj aplikacije s potrebami po časovnem razdeljevalniku.&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; &lt;/span&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10745624-115099269074054916?l=borutb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://borutb.blogspot.com/feeds/115099269074054916/comments/default' title='Objavi komentarje'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10745624&amp;postID=115099269074054916' title='Št. komentarjev: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/115099269074054916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/115099269074054916'/><link rel='alternate' type='text/html' href='http://borutb.blogspot.com/2006/06/quartz.html' title='Quartz'/><author><name>Borut Bolčina</name><uri>https://profiles.google.com/100412320755782895986</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-lSS0jJqb0lE/AAAAAAAAAAI/AAAAAAAAAAA/Ilphj3SxrAI/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10745624.post-115056040595723406</id><published>2006-06-17T18:05:00.000+02:00</published><updated>2007-06-30T20:07:15.831+02:00</updated><title type='text'>Agilni projekti - fokus</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_dW-BmW1h1P4/RoabxhjaQ6I/AAAAAAAAAS0/5oKEJAVgOGU/s1600-h/focus.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp0.blogger.com/_dW-BmW1h1P4/RoabxhjaQ6I/AAAAAAAAAS0/5oKEJAVgOGU/s320/focus.gif" alt="" id="BLOGGER_PHOTO_ID_5081920504656970658" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Peta lastnost vredna upoštevanja, če želimo boljše rezultate, je vedenje posameznika kaj je njegova prioriteta in "nekaj" neprekinjenega časa na tej nalogi. Osebne izkušnje, predvsem iz drugega dela prejšnjega stavka, so dobre, iz česar lahko varno zaključim, da delam v urejenem projektnem ozračju.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Od časa do časa slišim od kolegov, da delajo na več projektnih hkrati. Iz tona njihovega pripovedovanja je jasno kako nezadovoljni so zaradi stalnega preklapljanja med konteksti. Posledica je jasna - počasno napredovanje v vseh projektih. Menedžment se prav gotovo zaveda teh posledic, a jim je hkrati jasno, da od dveh ali več projektov hkrati firma lažje preživi. Mogoče kvaliteta niti ni toliko pomembna, važno je da se posel dobi, naveže stranke in vzdrževalne pogodbe, z ustrezno motivacijo (beri denarno nagrado ali napredovanjem) pa bodo vodje projektov že ukrotile razvojne oddelke.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Vodja projektov mora za vsakega razvojnika ob vsakem trenutku vedeti kaj sta njegovi dve prioritetni nalogi. Narava razvojnih inženirjev je že taka, da zlahka skrene iz pragmatične poti do cilja na tako, ki je na dolgi rok optimalnejša, ker bo omogočala še to in ono, včasih nepotrebno funkcionalnost, zato je občasno (ali periodično) nadzorno oko zaželjeno in potrebno. Preprost listek na steni pred vsakim razvojnikom je ena izmed preprostih metod, lahko pa seveda uporabimo programe za projektno vodenje.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Fokus se zlahka razblini tudi zaradi telefonskih klicev, nenapovedanih sestankov, raznih koordinacij zaradi nikoli definiranih postopkov v firmi, dajanja pomoči (informacij) nekomu, itd. Narava prekinitev je taka, da imajo visoko prioriteto, zato je nesmiselno, da poskušamo odgovore na njih stlačiti v nek časovni okvir. Bolje je da se odločimo, za dve uri na dan, ko "nihče" ne sme motiti razvojnega procesa. Nihče je jasno v narekovaju, ker se idealu lahko samo približamo.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Motnje v okolju so odvisne v veliki meri tudi od kulture posameznika, kar pa je že druga zgodba.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10745624-115056040595723406?l=borutb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://borutb.blogspot.com/feeds/115056040595723406/comments/default' title='Objavi komentarje'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10745624&amp;postID=115056040595723406' title='Št. komentarjev: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/115056040595723406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/115056040595723406'/><link rel='alternate' type='text/html' href='http://borutb.blogspot.com/2006/06/agilni-projekti-fokus.html' title='Agilni projekti - fokus'/><author><name>Borut Bolčina</name><uri>https://profiles.google.com/100412320755782895986</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-lSS0jJqb0lE/AAAAAAAAAAI/AAAAAAAAAAA/Ilphj3SxrAI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_dW-BmW1h1P4/RoabxhjaQ6I/AAAAAAAAAS0/5oKEJAVgOGU/s72-c/focus.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10745624.post-114917397149449389</id><published>2006-06-01T16:57:00.000+02:00</published><updated>2007-06-30T20:10:01.587+02:00</updated><title type='text'>Apache Maven</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_dW-BmW1h1P4/RoacMhjaQ7I/AAAAAAAAAS8/uMfKhHyMFu0/s1600-h/homo-erectus.gif"&gt;&lt;img style="margin: 0pt 0px 10px 10pt; float: right; cursor: pointer;" src="http://bp0.blogger.com/_dW-BmW1h1P4/RoacMhjaQ7I/AAAAAAAAAS8/uMfKhHyMFu0/s400/homo-erectus.gif" alt="" id="BLOGGER_PHOTO_ID_5081920968513438642" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Za &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://maven.apache.org/"&gt;Maven&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; sem prvič slišal pred slabim letom. Na njega sem naletel iz projekta &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://forrest.apache.org/"&gt;Forrest&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;, ki sem ga uporabljal za projektno dokumentacijsko intranetno spletno stran. Takrat je bil še v prvi inkarnaciji, to je v verziji 1.0. Nisem si vzel dovolj časa za evaluacijo, zato je bilo tedanje razumevanje tega ogrodja  zelo površno. Pravzaprav sem ga nameraval uporabljati samo iz ene perspektive tj. kot pripomoček pri izdelavi projektne dokumentacije. Zdaj so za mano kaki trije meseci uporabe verzije 2.0, ki pa se kar v precejšnji meri razlikuje od prve.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Apache Maven je ogrodje za pomoč pri projektni organizaciji procesov (&lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;project management framework&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;). Odprtokodni projekti so si med seboj zelo različni po zrelosti kode, konceptih in načinih izdaj verzij, nadgradenj in popravkov. Že na začetku moram omeniti, da so potrebni pri uporabi Maven ogrodja močni živci in zvrhana mera potrpežljivosti. Do izida knjige &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.mergere.com/m2book_download.jsp"&gt;Better Builds with Maven&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; je bilo prebijanje skozi razmetano dokumentacijo na uradni strani pravo doživetje in malo je manjkalo, da nisem vsega skupaj poslal k vragu. Vseeno sem imel občutek, da je za vsem skupaj nekaj dobrega. In po dosedaj videnem sem imel kar prav.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Maven je:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;ol  style="text-align: justify;font-family:verdana;"&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;zbirka standardov&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;repozitorij programskih knjižnic&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;orodje za opis projektov&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;orodje za projektno organizacijo&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; Za najbolj pomembno vrednost sem spoznal dejstvo, da definira cikle za prevajanje kode, testiranje in nameščanje programskih artefaktov. Ker vedno več projektov uporablja Maven v procesu razvoja programske kode, je zaradi uporabljenih konvencij izredno zmanjšan uvodni čas pri spoznavanju projekta.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Z leti se izoblikujejo določeni vzorci in nekateri so prepoznani kot boljši. Če te vzamemo in združimo z deklarativnim pristopom opisa projekta, namesto da vsakič znova uporabljamo bolj ali manj spremenjene build skripte, potem lahko določene postopke poenostavimo.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Firma, če povzamem enega izmed avtorjev, lahko z uporabo Maven ogrodja pridobi na področjih:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;Koherenca &lt;/span&gt;&lt;span style="font-family:verdana;"&gt;- To pomeni standardizacija na področju najboljših pristopov, ki so se izoblikovali.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;Reuporaba &lt;/span&gt;&lt;span style="font-family:verdana;"&gt;- Ne izumljamo že videnega, ampak raje uporabimo kar se je izkazalo za dobro.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;Agilnost &lt;/span&gt;&lt;span style="font-family:verdana;"&gt;- Razvojniki lažje prestopamo iz projekta na projekt, ker ni potrebnega uvodnega spoznavanja s sistemom.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;Vzdrževanje &lt;/span&gt;&lt;span style="font-family:verdana;"&gt;- Razbremenitev ljudi, ki so prej pisali razne skripte, pogosto niti v okviru standardov firme (če sploh obstajajo).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Brez teh lastnosti že v skupini prihaja do velikih razlik med postopki razvoja. To ni nujno tako slabo, a nobena skupina ne vključuje posameznikov z istim znanjem, željami, voljo in še čim, da ne bi prihajalo vsaj do občasnih zastojev dela zaradi nedefiniranih postopkov. Ko v tako skupino pride nov član, je bolj ali manj odvisen od svoje iznajdljivosti, saj so postopki redko popisani.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Princip uporabe konvencij raje kot konfiguracij pomeni, da uporabljamo vnaprej dogovorjene vzorce in jih le po potrebi konfiguriramo. Eden izmed takih vzorcev je &lt;/span&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;standardna direktorijska struktura&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;. Kolikokrat ste se že znašli v situaciji, da ste premišljali kam bi šla kakšna datoteka? Verjetno večkrat kot je to potrebno, zraven pa še poželi negodovanje sodelavca, ki si je stvar zamislil malo drugače. Poznano? Naslednja stvar, ki je pomembna je višjenivojska &lt;/span&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;organizacija kode v projektu&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; ali drugače rečeno - princip ločevanja odgovornosti (&lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;Separation of Concerns&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;). To pomeni več-modulski projekt. Še tretja stvar, ki jo bom omenil pa je &lt;/span&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;standardno poimenovanje artefaktov&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;, ki jih proizvajamo v procesu razvoja. To so na primer datoteke JAR.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Obsežna tema, zato verjetno sledi nadaljevanje.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10745624-114917397149449389?l=borutb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://borutb.blogspot.com/feeds/114917397149449389/comments/default' title='Objavi komentarje'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10745624&amp;postID=114917397149449389' title='Št. komentarjev: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/114917397149449389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/114917397149449389'/><link rel='alternate' type='text/html' href='http://borutb.blogspot.com/2006/06/apache-maven.html' title='Apache Maven'/><author><name>Borut Bolčina</name><uri>https://profiles.google.com/100412320755782895986</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-lSS0jJqb0lE/AAAAAAAAAAI/AAAAAAAAAAA/Ilphj3SxrAI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_dW-BmW1h1P4/RoacMhjaQ7I/AAAAAAAAAS8/uMfKhHyMFu0/s72-c/homo-erectus.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10745624.post-114788379171209168</id><published>2006-05-17T18:34:00.000+02:00</published><updated>2007-06-30T20:11:20.985+02:00</updated><title type='text'>Apache Ant</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_dW-BmW1h1P4/RoacvxjaQ8I/AAAAAAAAATE/Q_eSaqGL9zE/s1600-h/ant.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_dW-BmW1h1P4/RoacvxjaQ8I/AAAAAAAAATE/Q_eSaqGL9zE/s400/ant.jpg" alt="" id="BLOGGER_PHOTO_ID_5081921574103827394" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Apache Ant je orodje za avtomatizacijo build procesov. Napisano je v jeziku Java in je tudi primarno namenjen temu jeziku. Proces opišemo v XML dialektu, kar skupaj s prej omenjenim pomeni, da je Ant prenosljivo orodje - lahko ga poganjamo v Windows in Unix sistemih. No, samo po sebi to še ni dovolj, Ant mora namreč vsebovati potrebno funkcionalnost, da zna na primer izvesti ukaz &lt;span style="font-style: italic;"&gt;copy&lt;/span&gt; transparentno ne glede na spodaj "ležeči" operacijski sistem. To pomeni, da zna ustrezno pretvarjati ali pripraviti datotečne poti, ki se na Windows in Unix sistemih razlikujejo. To je samo preprost primer prenosljivosti.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Ant je nastal, ko je &lt;a href="http://java.sun.com/"&gt;Sun&lt;/a&gt; dal svoj interni projekt v odprtokodno skupnost za nadaljni razvoj. Ta projekt se danes imenuje &lt;a href="http://tomcat.apache.org/"&gt;Apache Tomcat&lt;/a&gt;. Ker v odprtokodni skupnosti ljudje uporabljamo veliko različnih kombinacij strojne in programske opreme, je nastala potreba po build orodju. Tako se je rodil Ant, ki je kot samostojeni projekt izšel poleti leta 2000. Do današnjih dni je pridobil ogromno privržencev, pravzaprav je postal &lt;span style="font-style: italic;"&gt;de-facto&lt;/span&gt; standard za Java aplikacije.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Ant izvršuje naloge na podlagi napisanih opravil (tasks). Tu lahko najdete &lt;a href="http://ant.apache.org/manual/index.html"&gt;spisek&lt;/a&gt;, ki je razdeljen po temah. Opravila pa lahko napišemo tudi &lt;a href="http://ant.apache.org/manual/index.html"&gt;sami&lt;/a&gt;, če ne najdemo ustreznega. Vsekakor je za majhne in srednje velike projekte Ant primerno orodje. Nanj lahko gledamo tudi kot del standardizacije delovnega okolja razvijalcev v podjetju. Seveda lahko za build sistem uporabljamo tudi IDE okolja, v katerem razvijamo, vendar je potem potrebna konsolidacija vseh vpletenih - vsi razvojniki pač ne uporabljajo iste IDE aplikacije, če v podjetju (ali skupnosti) za nepokorščino ni zagrožena smrtna kazen. Malo šale. Nekateri IDE proizvajalci so se zavedli tega problema in vgrajujejo Ant podporo kot paralelni build način.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Omeniti je potrebno tudi negativne lastnosti. Večji kot postaja projekt, teže je obvladovati špagete XML Ant skript. Build procesna navodila v XML obliki enostavno presežejo prag zmožnosti vzdrževanja. Obvladovanje napak ni izvedeno najbolje, npr. nedefinirane spremenljivke niso vzrok za napako, ampak se tiho nadomestijo z neko pred-definirano vrednostjo.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Sicer pa, najbolje da si preberete komentar avtorja samega, ki je objavljen v knjigi &lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/0974514039/qid%3D1147882918/203-3953318-9259948"&gt;Pragmatic Project Automation&lt;/a&gt; in ga objavljam tu v celoti.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;"&lt;span style="font-weight: bold;"&gt;The Creator of Ant Exorcizes One of His Demons&lt;/span&gt;" by &lt;span style="font-style: italic;"&gt;James Duncan Davidson&lt;/span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;The first version of Ant didn t have all the angle brackets that you see sprinkled all over its build files. Instead, it used a properties file and the java.util.Properties class to define what tasks should be executed for a target. This worked really well for small projects but started breaking down rapidly as projects grew.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;The reason it broke down was the way that Ant views the world: A project is a collection of targets. A target is a collection of tasks. Each task has a set of properties. This is obviously a hierarchical tree. However, property files give you only a flat name=key mapping, which doesn t fit this tree structure at all.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;I wanted a hierarchical file format that would capture the way that Ant viewed the world. But I didn't want to create my own format. I wanted to use a standard one and more important I didn't want to create a full parser for my own custom format. I wanted to reuse somebody else's work. I wanted to take the easiest way possible.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;At the time, XML was just breaking out onto the radar. The spec had been completed, but only recently. SAX had become a de-facto standard, but we didn't yet have JAXP. I was convinced that XML was going to be the next big thing after Java. Portable code and portable data. Two buzzphrases that go well together.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Even better, since XML viewed data as a tree structure, it seemed like a perfect fit for the kinds of things that needed to be expressed in a build file. Add in that XML was still a hand-editable text-based format, and it seemed like a marriage made in heaven. And, I didn't have to write a parser. The deal was done.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;In retrospect, and many years later, XML probably wasn't as good a choice as it seemed at the time. I have now seen build files that are hundreds, and even thousands, of lines long, and, at those sizes, it turns out that XML isn't quite as friendly a format to edit as I had hoped. As well, when you mix XML and the interesting reflection-based internals of Ant that provide easy extensibility with your own tasks, you end up with an environment that gives you quite a bit of the power and flexibility of a scripting language but with a whole lot of headache in trying to express that flexibility with angle brackets.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Now, I never intended for the file format to become a scripting language. After all, my original view of Ant was that there was a declaration of some properties that described the project and that the tasks written in Java performed all the logic. The current maintainers of Ant generally share the same feelings. But when I fused XML and task reflection in Ant, I put together something that is 70 80% of a scripting environment. I just didn't recognize it at the time. To deny that people will use it as a scripting language is equivalent to asking them to pretend that sugar isn't sweet.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;If I knew then what I know now, I would have tried using a real scripting language, such as JavaScript via the Rhino component or Python via JPython, with bindings to Java objects that implemented the functionality expressed in today s tasks. Then, there would be a first-class way to express logic, and we wouldn't be stuck with XML as a format that is too bulky for the way that people really want to use the tool.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10745624-114788379171209168?l=borutb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://borutb.blogspot.com/feeds/114788379171209168/comments/default' title='Objavi komentarje'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10745624&amp;postID=114788379171209168' title='Št. komentarjev: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/114788379171209168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/114788379171209168'/><link rel='alternate' type='text/html' href='http://borutb.blogspot.com/2006/05/apache-ant.html' title='Apache Ant'/><author><name>Borut Bolčina</name><uri>https://profiles.google.com/100412320755782895986</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-lSS0jJqb0lE/AAAAAAAAAAI/AAAAAAAAAAA/Ilphj3SxrAI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_dW-BmW1h1P4/RoacvxjaQ8I/AAAAAAAAATE/Q_eSaqGL9zE/s72-c/ant.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10745624.post-114686362211389522</id><published>2006-04-12T22:56:00.000+02:00</published><updated>2007-06-30T20:12:15.062+02:00</updated><title type='text'>Agilni projekti - osebna varnost</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_dW-BmW1h1P4/Roac9hjaQ9I/AAAAAAAAATM/ddz0kbutfMY/s1600-h/safety.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp0.blogger.com/_dW-BmW1h1P4/Roac9hjaQ9I/AAAAAAAAATM/ddz0kbutfMY/s400/safety.gif" alt="" id="BLOGGER_PHOTO_ID_5081921810327028690" border="0" /&gt;&lt;/a&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Osebna varnost pomeni zmožnost izražanja svojih pogledov brez strahu pred kakršnimikoli povračilnimi ukrepi.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Projektno delo v skupini običajno živi v hierarhičnem okolju sodelavcev, vodij skupin, menedžerjev, naročnikov, strank in še koga. Varnost pomeni, da smo sposobni v oči povedati menedžerju, da je njegov rok za predviden dan izida daleč preoptimističen.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Pomeni to, da smo sposobni povedati sodelavcu, da nas moti njegova smrdljiva srajca. Pomeni to, da lahko sodelavcu brez strahu povemo, da njegov načrt ali izvedba nista za nikamor. Brez takih odprtih pogovorov škodujemo celotni ekipi.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Ali ste že imeli sodelavca ali sodelavko, ki pri jedi sendviča tako cmoka, da ga (jo) je slišati v sosednji volilni okraj? Pa ste mu (ji) kaj rekli? Ali se je sploh vredno za nekaj minut trpljenja dnevno izpostavljati in potem poslušati ego obrambne protinapade? Kakor kdo, kakor kje, kakor za kaj. Bolj moteči so hrup ali celo konstantno tresenje mize, ker ima sodelavec "v riti mravljince". Verjetno ima vsakdo od vas še bolj pikantne primere!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Osebna varnost je pot do izgradnje timskega zaupanja. Zaupanje pomeni, da nekomu damo moč nad nami in pri tem tvegamo, da nas rani. Nekateri smo po naravi bolj odprti kot drugi, ravno tako kot nekateri gledamo na svet bolj optimistično kot drugi. Nezaupanje v delovni skupni povzroča celo vrsto negativnih posledic - prikrivanje ali celo laganje, slabše opravljeno delo zaradi pomanjkanja informacij, izdajanje poslovnih informacij in še kaj. Za povečanje zaupanja se moramo odpreti, to pomeni priznavati svoje šibkosti, a pri tem vedeti, da nam drugi zaradi tega ne bodo škodovali. Priznanje, da česa ne znamo, da smo kaj naredili narobe, ali da česa ne bomo zmogli je pogoj. Takoj za tem pa mora biti na voljo pomoč ostalih v skupini - neavtoritativna in dobrovoljna!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Živali se ob nesporazumih pogrizejo. Koliko krvavi končujemo izmenjavo mnenj, je tudi stopnja zrelosti posameznikov v skupini. Mogoče sam boj ni tako sporen, kot pa njegov zaključek. Bolj pomemben se mi zdi zaključek - ali lahko končamo vedro, prijateljsko, inteligentno!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Ali ste imeli kdaj sodelavca, ki ni poslušal, ali če rečem, ni poslušal v dobri volji? Tak človek je "natural party braker".&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Druga plat komunikacije pa je prevelika vljudnost - kar z vsem se strinjamo, samo da ne bi "škodili" sogovorniku. Zombi ekipa.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10745624-114686362211389522?l=borutb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://borutb.blogspot.com/feeds/114686362211389522/comments/default' title='Objavi komentarje'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10745624&amp;postID=114686362211389522' title='Št. komentarjev: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/114686362211389522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/114686362211389522'/><link rel='alternate' type='text/html' href='http://borutb.blogspot.com/2006/04/agilni-projekti-osebna-varnost.html' title='Agilni projekti - osebna varnost'/><author><name>Borut Bolčina</name><uri>https://profiles.google.com/100412320755782895986</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-lSS0jJqb0lE/AAAAAAAAAAI/AAAAAAAAAAA/Ilphj3SxrAI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_dW-BmW1h1P4/Roac9hjaQ9I/AAAAAAAAATM/ddz0kbutfMY/s72-c/safety.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10745624.post-114686351100120875</id><published>2006-04-03T20:29:00.000+02:00</published><updated>2007-06-30T20:13:16.570+02:00</updated><title type='text'>Jakarta Commons</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_dW-BmW1h1P4/RoadLxjaQ-I/AAAAAAAAATU/gV2rjAC-N7o/s1600-h/jakarta-commons.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp1.blogger.com/_dW-BmW1h1P4/RoadLxjaQ-I/AAAAAAAAATU/gV2rjAC-N7o/s400/jakarta-commons.jpg" alt="" id="BLOGGER_PHOTO_ID_5081922055140164578" border="0" /&gt;&lt;/a&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Računalništvo in njena poddomena - programiranje - je, sedaj že lahko rečemo, zrela veda. Z leti se izoblikujejo določeni vzorci. Načrtovalski vzorci so rešitev nekega ponavljajočega problema pri razvoju programske opreme. Takega vzorca ne moremo direktno prenesti v kodo, lahko rečemo celo, da so agnostični na programski jezik. Dve knjigi, ki jih imam na &lt;a href="http://www.amazon.co.uk/gp/registry/registry.html/026-0302968-7636412?%5Fencoding=UTF8&amp;type=wishlist&amp;amp;id=3MFIEFBUOS8LV"&gt;spisku&lt;/a&gt; na temo objektno orientiranih vzorcev sta: &lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/0321247140/qid=1144080888/sr=2-3/ref=sr_2_3_3/026-6725220-9976420"&gt;Design Patterns Explained: A New Perspective on Object-Oriented Design&lt;/a&gt; in &lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/0596007124/qid=1144080888/sr=2-2/ref=sr_2_3_2/026-6725220-9976420"&gt;Head First Design Patterns&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Če problem še nadalje drobimo, pridemo do faze realizacije, ko moramo za določen podproblem napisati kodo. Ker si hočemo prihraniti čas, je najbolje, da si pogledamo, če je kdo pred nami že rešil naš problem in nam tudi dovoli uporabiti  znanje, ki je običajno v obliki programskih knjižnic ali ogrodij. Najbolj znano "zatočišče" za programerje v jeziku Java je &lt;a href="http://jakarta.apache.org/commons/"&gt;jakarta commons&lt;/a&gt;.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Cilj odprokodnega projekta jakarta commons je pod eno streho združiti Java komponente, ki so na voljo pod &lt;a href="http://jakarta.apache.org/commons/license.html"&gt;Apache 2.0 licenco&lt;/a&gt;. Namen je združitev znanja in preprečevanje redundantnega dela. Komponente so narejene tako, da so minimalno odvisne od drugih zaradi lažjega nameščanja. Sledi se tudi stabilnosti programskih vmesnikov (API), tako da so nadgradnje manj boleče.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Prej omenjene komponente so jar datoteke, ki jih samo damo na razpolago Java virtualnemu stroju, ki pa imajo priložene tudi izvorne datoteke, dokumentacijo in običajno Ant build skript. To pomeni, da lahko sami po potrebi kakšno funkcionalnost tudi dodamo, če jo potrebujemo. Kar je še bolje, v projekt lahko tudi prispevamo naše znanje in tako drugim olajšamo razvoj.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Po funkcionalnosti se med seboj zelo razlikujejo saj pokrivajo zelo široko problemsko področje. 32 komponent je  produkcijske kvalitete in še nadaljnih 10 je v tako imenovanem peskovniku. Naj jih nekaj omenim samo na kratko - mogoče jih bom podrobneje predstavil vsako posebej v prihodnjih zapisih v tem blogu.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;&lt;a href="http://jakarta.apache.org/commons/collections/"&gt;Collections&lt;/a&gt; Nadgradi funkcionalnost java.util.Collection.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;&lt;a href="http://jakarta.apache.org/commons/configuration/"&gt;Configuration&lt;/a&gt; Splošen dostop do konfiguracijskih virov.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;&lt;a href="http://jakarta.apache.org/commons/dbcp/"&gt;DBCP&lt;/a&gt; DataBase Connection Pool&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;&lt;a href="http://jakarta.apache.org/commons/httpclient/"&gt;HttpClient&lt;/a&gt; Nadgradi java.net z veliko nove funkcionalnosti.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;&lt;a href="http://jakarta.apache.org/commons/lang/"&gt;Lang&lt;/a&gt; Veliko uporabnih metod, nekakšna splošna razširitev jezika.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Gotovo se splača pregledati metode posameznega API-ja, saj nam uporaba že izdelanih rešitev skrajša število vrstic naše kode, vsi pa vemo, da to pomeni manjšo možnost napake in lažje vzdrževanje produkta. Še kako pomebno je, da bo nekomu za&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;nami, ki bo moral vzrževati kodo, znan uporabljen API, ki ga je mogoče že uporabljal na prejšnji firmi. V težavah se vedno lahko zatečemo na liste za razvojnike ali uporabnike, kjer nam uporabniki ali avtorji posamezne komponente odgovorijo na naše vprašanje. V veliki skupnosti zagotovo lažje rešimo problem.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10745624-114686351100120875?l=borutb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://borutb.blogspot.com/feeds/114686351100120875/comments/default' title='Objavi komentarje'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10745624&amp;postID=114686351100120875' title='Št. komentarjev: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/114686351100120875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/114686351100120875'/><link rel='alternate' type='text/html' href='http://borutb.blogspot.com/2006/04/jakarta-commons.html' title='Jakarta Commons'/><author><name>Borut Bolčina</name><uri>https://profiles.google.com/100412320755782895986</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-lSS0jJqb0lE/AAAAAAAAAAI/AAAAAAAAAAA/Ilphj3SxrAI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_dW-BmW1h1P4/RoadLxjaQ-I/AAAAAAAAATU/gV2rjAC-N7o/s72-c/jakarta-commons.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10745624.post-114686337289487035</id><published>2006-03-16T21:21:00.000+01:00</published><updated>2007-06-30T20:14:26.714+02:00</updated><title type='text'>Subversion</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_dW-BmW1h1P4/RoadeBjaQ_I/AAAAAAAAATc/lPnjKa_jNZU/s1600-h/subversion.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp2.blogger.com/_dW-BmW1h1P4/RoadeBjaQ_I/AAAAAAAAATc/lPnjKa_jNZU/s400/subversion.jpg" alt="" id="BLOGGER_PHOTO_ID_5081922368672777202" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;a href="http://www.nongnu.org/cvs/"&gt;Subversion&lt;/a&gt; je odprtokodni sistem za upravljanje z revizijami dokumentov - največkrat izvorne kode. Je neke vrste naravni naslednik že precej osivelega &lt;a href="http://www.nongnu.org/cvs/"&gt;CVS&lt;/a&gt; (Concurrent Versioning System) sistema, ki še vedno obvladuje večji del trga, a z vsakim mesecem izgublja boj proti bolj napredenemu bratu.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Razvoj programske opreme zahteva navadno skupino ljudi, ki bolj ali manj paralelno razvija nek produkt. Kako torej poteka razvojni cikel? Idealno je, da imamo zelo dobro definirano datotečno strukturo za posamezen tip projekta. O tem bom več govoril v enem izmed neslednjih člankov. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Začetno ogrodje za projekt uvozimo v repozitorij, do katerega imajo dostop vsi udeleženi. Vsak posameznik si na svoj delovni računalnik prenese projekt iz repozitorija in prične z dodajanjem novih datotek ali spreminjanjem že obstoječih. Kmalu se pojavi potreba po več razvojnih vejah. Eden izmed razlogov je razvoj nove verzije produkta. Ker ne želimo z novo verzijo pokvariti tekočega konja naše firme, ki ga nameravamo vzdrževati zaradi strank še kar nekaj časa, moramo pričeti z razvojem novejše verzije na tak način, da kljub skupni bazi ne pokvarimo stabilne kode. Drug razlog je razvojne narave. Nekdo v ekipi želi testirati nov algoritem in to lahko počne na svoji razvojni veji, ki se kasneje ali uporabi ali pa zavrže.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Konfliktne situacije, ki nastanejo zaradi sprememb v isti datoteki rešujemo najlaže s podporo kakšnega namenskega grafičnega primerjalnega orodja, ki je navadno kar del razvojnega okolja v katerem razvijamo. Z utečenostjo ekipe in dobrim projektnim vodenjem so te "težave" obvladljive.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;V čem so prednosti sistema Subversion pred CVS?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt; &lt;ul&gt;&lt;li&gt;Atomarni vnosi v repozitorij - prekinjen vnos (&lt;span style="font-style: italic;"&gt;commit&lt;/span&gt;) ne povzroči nekonsistentnega stanja.&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;&lt;li&gt;Preimenovane, kopirane ali odstranjene datoteke ohranijo informacijo o verziji.&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;&lt;li&gt;Nativna podpora za binarne datoteke in prostorsko učinkovit algoritem shranjevanja za binarno primerjavo.&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;&lt;li&gt;Imeniki imajo verzije. Celotna poddrevesa se lahko premikajo po repozitoriju in pri tem še vedno ohranijo informacijo o verziji.&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;&lt;li&gt;Čas za izdelavo vej in označevanje (&lt;span style="font-style: italic;"&gt;tagging&lt;/span&gt;) je konstanten.&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;&lt;li&gt;Optimiziran dostop do repozitorija zmanjšuje mrežni promet.&lt;/li&gt;&lt;/ul&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;S CVS sistemom sem prvič srečal leta 2001 in ga uporabljam za posamezne projekte še danes. Pred časom pa sem začel spoznavati zgoraj naštete prednosti na lastni koži. Kar se zgoraj bere kot suhoparna alineja, se v praksi izkaže kot neprecenljiva lastnost. Če izpostavim samo eno - pri CVS sistemu je še toliko bolj pomembna dobra začetna zasnova direktorijske strukture projekta, saj je prestavljanje imenikov ali vej prava muka, ki zahteva ročne posege v drobovje repozitorija.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;S prakso, znanjem in dobrimi delovnimi navadami je uporaba sistema za kontrolo verzij pravi blagoslov. Priporočam uporabo tudi za solo projekte.&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; &lt;/span&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10745624-114686337289487035?l=borutb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://borutb.blogspot.com/feeds/114686337289487035/comments/default' title='Objavi komentarje'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10745624&amp;postID=114686337289487035' title='Št. komentarjev: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/114686337289487035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/114686337289487035'/><link rel='alternate' type='text/html' href='http://borutb.blogspot.com/2006/03/subversion.html' title='Subversion'/><author><name>Borut Bolčina</name><uri>https://profiles.google.com/100412320755782895986</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-lSS0jJqb0lE/AAAAAAAAAAI/AAAAAAAAAAA/Ilphj3SxrAI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_dW-BmW1h1P4/RoadeBjaQ_I/AAAAAAAAATc/lPnjKa_jNZU/s72-c/subversion.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10745624.post-114686315388901422</id><published>2006-02-28T20:21:00.000+01:00</published><updated>2007-06-30T20:15:22.502+02:00</updated><title type='text'>Agilni projekti - osmotska komunikacija</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_dW-BmW1h1P4/RoadsxjaRAI/AAAAAAAAATk/vuVWl3ayheg/s1600-h/osmotic.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_dW-BmW1h1P4/RoadsxjaRAI/AAAAAAAAATk/vuVWl3ayheg/s400/osmotic.jpg" alt="" id="BLOGGER_PHOTO_ID_5081922622075847682" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Razporeditev prostorov in delovnih mest lahko pomembno vpliva na potek projektov, ki se izvajajo v hiši. V večji meri zaposleni nimajo vpliva na razporeditev po svoji izbiri, zato je toliko bolj pomembno koliko se komunikacije med programerji, o tej "podvrsti" govorimo tu, zavedajo odgovorni. Neprimerni prostori že sami po sebi slabo vplivajo na storilnost, nedostopnost informacij pa zadevo še poslabša.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Izraz &lt;span style="font-style: italic;"&gt;osmotska komunikacija&lt;/span&gt; izhaja iz biologije, a ga lahko prenesemo v bolj abstraktne koncepte. Pomeni tok informacij v ozadju, ki ga nezavedno filtrirajo člani skupine na ožjem delovnem območju. To običajno pomeni skupino ljudi v istem prostoru. Ob zastavljenem vprašanju se lahko posamezniki vključijo v diskusijo ali pa tudi ne, po lastni presoji. Največkrat osmotska komunikacija niti ne pomeni diskusije, ampak samo kratek stavek, ki bodisi odgovori na vprašanje ali pa popravi kaj že izrečenega, morda izrazi pomislek ali nestrinjanje. Z zdravo mero pameti tako dosežemo hitre in spontane odgovore na vprašanja, ki ne motijo delovnega procesa posameznika. Za posamezne faze projekta je lahko take vrste komunikacija povsem dovolj in lahko celo prepreči kakšen dolgočasen sestanek. Za majhne projekte je tovrstno komuniciranje lahko celo večinsko, običajni sestanki pa bolj redki. Že sama fizična oddaljenost običajno preprečuje zastavljanje vprašanj izkušenejšim na določenem področju. Sam zelo pogosto uporabljam poštne liste za razvojnike odprtokodnih projektov za iskanje odgovorov ali tehnik, to pa zahteva čas, predvsem takrat, če odgovora še ni na voljo na listi. V takem primeru moramo računati na dobro voljo nekoga z ustreznim znanjem, da nam odgovori na običajno zelo specifično vprašanje. Veliko pogostih vprašanj je na takih listah že odgovorjenih ali zbranih v FAQ datotekah za lažji dostop. Če sedimo v manjši skupini, po možnosti še z možnostjo hitrega pogleda na sosednji monitor z ustrezno informacijo, dobimo odgovore v rangu sekund, mogoče minut, kar je bistveno pri hitrem razvoju.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Najverjetneje se bo uveljavila tudi video konferenčna zveza med udeleženci, a bo to zahtevalo prilagajanje mediju in bo težko nademestilo osebni kontakt, papir in svinčnik. Obstajajo urejevalniki programske kode (in seveda besedil), ki dopuščajo hkratno urejanje istega modula, če na primer potrebujemo nasvet kako sprogramirati določen odsek kode. Tako ni potrebno združevanje prek sistemov za upravljanje z izvorno kodo (&lt;a href="http://www.nongnu.org/cvs/"&gt;CVS&lt;/a&gt;, &lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/vstudio/previous/ssafe/"&gt;SorceSafe&lt;/a&gt;, ...), če nam to ustreza. Vse je seveda odvisno od urejenosti delovnih procesov in nenazadnje tudi od navdušenosti posameznikov za napredne in ne vedno tudi koristne pripomočke.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Razporeditev pisarniškega pohištva v prvi meri vpliva na osebni prostor posameznika, neposredno s tem pa na odnose med sodelavci. V odvisnosti od narave dela so se izoblikovale tipične konfiguracije miz, predelnih sten in samih pisarniških sob. Vsakemu posamezniku seveda ustreza nekaj česar drugemu ne. Nekoga moti, da mu drugi lahko gledajo v monitor vsak trenutek, drugega (beri mene) moti, če nekdo konstantno trese mizo, spet tretjega ne moti, da mora vsakič vstati, če hoče pogledati sogovorca in tako naprej. Fino je, da obstaja prostor kamor lahko na trenutke "zaidemo", da prekinemo rutino ali da se umaknemo iz skupine. Najbolje je, da obstaja na firmi neformalna soba za sestanke. To je nekakšna večnamenska soba kjer poleg običajnih sestankov lahko naključno s kakšnim kolegom (ki ne kadi :-)) mimogrede izmenjamo kakšno idejo. Kajenje sem omenil z razlogom. Kot bivši kadilec lahko z gotovostjo rečem, da se je v vseh čik pavzah povedalo poleg nujnih govoric tudi precej, če ne večino, s službo povezanih zadev. Ne gre pa pretiravati s temi pavzami - slej ko prej postaneš aktualna tema udeležencev ne-čik pavz.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Slaba lastnost osmotske komunikacije je ta, da generira veliko šuma in da običajno predstavlja breme za vodilnega razvojnika, ki največkrat odgovarja na vprašanja. Veliko komunikacije pomeni za nekoga motenje svojega dela in tako postane manj storilen ali pa sploh ne dosega svojega potenciala. Vodilni razvojnik(i) običajno najdejo svojo rezino miru po običajnih delovnih urah ali čez vikend. Boljše, čeprav nenaravno, je doseči dogovor o tihi uri ali dveh. Nazadnje se vse konča pri posamezniku in njegovem značaju, o čemer pa bom pisal v nadaljevanju člankov o agilnih projektih.&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; &lt;/span&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10745624-114686315388901422?l=borutb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://borutb.blogspot.com/feeds/114686315388901422/comments/default' title='Objavi komentarje'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10745624&amp;postID=114686315388901422' title='Št. komentarjev: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/114686315388901422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/114686315388901422'/><link rel='alternate' type='text/html' href='http://borutb.blogspot.com/2006/02/agilni-projekti-osmotska-komunikacija.html' title='Agilni projekti - osmotska komunikacija'/><author><name>Borut Bolčina</name><uri>https://profiles.google.com/100412320755782895986</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-lSS0jJqb0lE/AAAAAAAAAAI/AAAAAAAAAAA/Ilphj3SxrAI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_dW-BmW1h1P4/RoadsxjaRAI/AAAAAAAAATk/vuVWl3ayheg/s72-c/osmotic.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10745624.post-114686298093533706</id><published>2006-02-14T22:58:00.000+01:00</published><updated>2007-06-30T20:16:11.988+02:00</updated><title type='text'>Cayenne</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_dW-BmW1h1P4/Road4xjaRBI/AAAAAAAAATs/PVOW7PpohXs/s1600-h/cayenne.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_dW-BmW1h1P4/Road4xjaRBI/AAAAAAAAATs/PVOW7PpohXs/s400/cayenne.gif" alt="" id="BLOGGER_PHOTO_ID_5081922828234277906" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Vsi vemo, da je zadan problem rešljiv na veliko načinov. Ena izmed možnih poti pri izdelavi dinamične spletne aplikacije je tudi uporaba ORM (&lt;span style="font-style: italic;"&gt;Object Relational Mapping&lt;/span&gt;) ogrodij. To je programska tehnika, ki podatkovno bazo predstavi kot objektno strukturo.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Zakaj bi si sploh želeli imeti podateke zapisane v bazi v aplikaciji predstavljene kot graf objektov? Odgovor je zelo podoben tistemu, zaradi katerega je veliko programerjev opustilo proceduralne programerske tehnike in jezike ter osvojilo koncepte objektnega programiranja. Ljudje lažje razmišljamo o objektih, njihovih lastnostih in povezavami med njimi, kot pa o tabelah in vrsticah podatkovne baze (po lastnih izkušnjah velikokrat nenormaliziranih).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Uporaba relacijske baze za shranjevanje objektno orientiranih podatkov vodi v semantični prepad - programerji moramo(jo) programsko rešitev snovati tako, da mešajo dva pristopa. S podatki operiramo na objekten način, shranjujemo pa jih relacijsko. Združevanje tehnik na tak način pomeni zadajanje omejitev enega na drugega in obratno. Prihaja do tako imenovane impedančne nezdružljivosti. SQL podatkovne baze so sestavljene iz niza tabel, ki vsebujejo elementarne podatke. Posamezen zapis v taki bazi se običajno razteza čez več tabel, ki jih moramo za aplikativne potrebe pred tem združiti. S tem hočem povedati, da moramo pri pisanju poizvedbe navesti tudi relacije med njimi.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Uporaba SQL stavkov bo vedno hitrejša rešitev, ob predpostavki da je to v celotnem kontekstu problema najbolj kritičen člen. ORM rešitve podatke na veliko shranjujejo v medpomnilniku, kar je resnično velikega pomena za visoko zmogljiv sistem.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;To je bilo nekaj malega v splošnem, zdaj pa še o &lt;a href="http://objectstyle.org/cayenne/"&gt;Cayenne&lt;/a&gt;. Ogrodje se zgleduje po &lt;a href="http://en.wikipedia.org/wiki/Enterprise_Objects_Framework"&gt;EOF&lt;/a&gt; (&lt;span style="font-style: italic;"&gt;Enterprise Objects Framework&lt;/span&gt;), ki velja za enega izmed najboljših. Tabele in vrstice so v pomnilniku predstavljeni kot graf objektov. Nad tem grafom objektov izvajamo čisto običajne operacije kot bi delali z javanskimi zrni. Cayenne spremlja kaj počnemo s posameznimi objekti in relacijami med njimi in ko je čas za zapis v bazo, ogrodje samo izgradi optimizirane SQL stavke. Podatkovne baze različnih proizvajalcev lahko združimo v enoten podatkovni vir do katerega dostopamo prek enega vmesnika. To pomeni, da imamo lahko več dislociranih podatkovnih baz, ki v navezavi z naprednim (&lt;span style="font-style: italic;"&gt;Cross-VM Cache Sharing&lt;/span&gt;) mehanizmom omogoča skalabilne aplikacije.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Običajno najprej popišemo problem, ki ga želimo aplikativno rešiti. V tem procesu spoznamo naravo podatkov in relacije med njimi. &lt;a href="http://en.wikipedia.org/wiki/Entity-Relationship_Model"&gt;Entitetni model&lt;/a&gt; lahko prenesemo v &lt;span style="font-style: italic;"&gt;Cayenne Modeler&lt;/span&gt;, ki je vizualno modelirno orodje. Z njim lahko tudi preberemo že obstoječo podatkovno shemo in iz nje tvorimo javanske razrede, lahko pa iz modela naredimo shemo - imamo skratka dvosmerno povezano operacijo. S tem orodjem se posredno izdelajo vse konfiguracijske datoteke, ki jih potrebuje naša (spletna) aplikacija. Cayenne je agnostičen na prezentacijski nivo. Java razredi se avtomatsko zgenerirajo "v paru", vedno se naredi še podrazred, v katerega mi dodajamo poslovno logiko. Na ta način lahko &lt;span style="font-style: italic;"&gt;Cayenne Modeler&lt;/span&gt; ob spremembi (npr. dodan ali spremenjen atribut tabele) prepiše "očeta", ne pa tudi naše dodatne logike. Ne potrebujemo razmišljati, če tega eksplicitno ne želimo, o primarnih ključih, ker to ni v OO (&lt;span style="font-style: italic;"&gt;Object Oriented&lt;/span&gt;) semantiki. Ker so vsi podatki o preslikavah v posebnih konfiguracijskih datotekah, ki jih izdela prej omenjeni &lt;span style="font-style: italic;"&gt;Modeler,&lt;/span&gt; je v samih razredih lahko samo čista poslovna logika, kar je lep način ločitve odgovornosti.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Iz svojih izkušenj lahko povem, da je arhitektura aplikacije in koda veliko lepša, če si lahko privoščimo toliko svobode pri načrtovanju.&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; &lt;/span&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10745624-114686298093533706?l=borutb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://borutb.blogspot.com/feeds/114686298093533706/comments/default' title='Objavi komentarje'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10745624&amp;postID=114686298093533706' title='Št. komentarjev: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/114686298093533706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/114686298093533706'/><link rel='alternate' type='text/html' href='http://borutb.blogspot.com/2006/02/cayenne.html' title='Cayenne'/><author><name>Borut Bolčina</name><uri>https://profiles.google.com/100412320755782895986</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-lSS0jJqb0lE/AAAAAAAAAAI/AAAAAAAAAAA/Ilphj3SxrAI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_dW-BmW1h1P4/Road4xjaRBI/AAAAAAAAATs/PVOW7PpohXs/s72-c/cayenne.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10745624.post-114686279834789405</id><published>2006-02-06T20:24:00.000+01:00</published><updated>2007-06-30T20:17:29.951+02:00</updated><title type='text'>Eclipse</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_dW-BmW1h1P4/RoaeDhjaRCI/AAAAAAAAAT0/TnS0EDa3nlE/s1600-h/eclipse.jpg"&gt;&lt;img style="margin: 0pt 0px 10px 10pt; float: right; cursor: pointer;" src="http://bp0.blogger.com/_dW-BmW1h1P4/RoaeDhjaRCI/AAAAAAAAAT0/TnS0EDa3nlE/s400/eclipse.jpg" alt="" id="BLOGGER_PHOTO_ID_5081923012917871650" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt; kot razvojno okolje sem začel uporabljati pred slabimi dvemi leti. V tem času sem spoznal, da za tem imenom stoji več kot samo okolje za razvoj aplikacij. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Eclipse je skupnost - odprtokodna skupnost, v kateri se "kuhajo" raznolika orodja za izdelavo aplikacij. Deluje kot povezovalno ogrodje. Deluje na &lt;span style="font-style: italic;"&gt;Windows&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;Linux&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;Mac OS X&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;Solaris&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;AIX&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;HP-UX&lt;/span&gt; in &lt;span style="font-style: italic;"&gt;QNX&lt;/span&gt; sistemih.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Nastajati je začel novembra 2001 s povezovanjem velikih podjetij kot so Borland, IBM, Red Hat, SuSE, Rational Software. Trenutno je v konzorciju že več kot 100 podjetij, ki razvija v Eclipse skupnosti devet večjih in preko petdeset manjših odprtokodnih projektov. Če naštejem omenjenih devet:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;a href="http://www.eclipse.org/eclipse/"&gt;The Eclipse Top-Level Project&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;razvojno okolje za orodja in aplikacije&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;a href="http://www.eclipse.org/tools/"&gt;The Eclipse Tools Project&lt;/a&gt;  &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;skrbi za medsebojno povezovanje in združljivost orodij&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;a href="http://www.eclipse.org/webtools/"&gt;The Eclipse Web Tools Platform Project&lt;/a&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;platforma za razvoj spletnih aplikacij&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;a href="http://www.eclipse.org/tptp/"&gt;Test &amp; Performace Tools Platform&lt;/a&gt;  &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;platforma na kateri razvijalci razvijajo testna in performančna orodja&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;a href="http://www.eclipse.org/birt/phoenix/"&gt;The Business Inteligence and Reporting Tools Project&lt;/a&gt;  &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;orodja za poročanja iz aplikacij&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;a href="http://www.eclipse.org/datatools/"&gt;The Eclipse Data Tools Platform Project&lt;/a&gt;  &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;orodja za podatkovno orientirane tehnologije&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;a href="http://www.eclipse.org/dsdp/"&gt;Device Software Development Platform&lt;/a&gt;  &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;orodja za razvoj aplikacij namenjenih za različne naprave&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;a href="http://www.eclipse.org/stp/"&gt;The Eclipse SOA Tools Platform Project&lt;/a&gt;  &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;okolje in orodja za SOA (Service Oriented Architecture) aplikacije&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;a href="http://www.eclipse.org/technology/"&gt;The Eclipse Technology Project&lt;/a&gt;  &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;inkubator za nove tehnologije&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;V bližnji prihodnosti (junij 2006) se nam obeta izid kar desetih Eclipse projektov pod skupnim imenom &lt;a href="http://www.eclipse.org/projects/callisto.php"&gt;Callisto&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Pri delu uporabljam intenzivno samo prvega, to je Eclipse IDE z raznimi dodatki (&lt;span style="font-style: italic;"&gt;plug-ins&lt;/span&gt;). Za razvoj Java frontend aplikacij uporabljam &lt;a href="http://www.myeclipseide.com/"&gt;MyEclipse&lt;/a&gt; in &lt;a href="http://spindle.sourceforge.net/"&gt;Spindle&lt;/a&gt;, za backend in samostojne aplikacije v Java jeziku pa so nepogrešljivi &lt;a href="http://www.altova.com/products_ide.html"&gt;XMLSpy&lt;/a&gt;, RMI compiler, &lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt;, &lt;a href="http://www.eclipse.org/uml2/"&gt;UML&lt;/a&gt;, &lt;a href="http://log4e.jayefem.de/index.php/Main_Page"&gt;Log4E&lt;/a&gt;, LogWatcher in pa zadnje čase tudi &lt;a href="http://www.ej-technologies.com/products/jprofiler/overview.html"&gt;JProfiler&lt;/a&gt; in &lt;a href="http://maven.apache.org/"&gt;Maven&lt;/a&gt;. Urejevalnik izvorne kode za Java jezik ima odlično podporo za refaktoring, ki prihrani čas in živce pri razvoju programske opreme.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Dodatki za Eclipse se najdejo na &lt;a href="http://eclipse-plugins.2y.net/eclipse/index.jsp"&gt;Eclipse plugins&lt;/a&gt; in na &lt;a href="http://www.eclipseplugincentral.com/"&gt;Eclipse plugin central&lt;/a&gt;.&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; &lt;/span&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10745624-114686279834789405?l=borutb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://borutb.blogspot.com/feeds/114686279834789405/comments/default' title='Objavi komentarje'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10745624&amp;postID=114686279834789405' title='Št. komentarjev: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/114686279834789405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/114686279834789405'/><link rel='alternate' type='text/html' href='http://borutb.blogspot.com/2006/02/eclipse.html' title='Eclipse'/><author><name>Borut Bolčina</name><uri>https://profiles.google.com/100412320755782895986</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-lSS0jJqb0lE/AAAAAAAAAAI/AAAAAAAAAAA/Ilphj3SxrAI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_dW-BmW1h1P4/RoaeDhjaRCI/AAAAAAAAAT0/TnS0EDa3nlE/s72-c/eclipse.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10745624.post-114686257265829466</id><published>2006-01-30T19:02:00.000+01:00</published><updated>2007-06-30T20:18:46.568+02:00</updated><title type='text'>Agilni projekti - reflektivne izboljšave</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_dW-BmW1h1P4/RoaeexjaRDI/AAAAAAAAAT8/UbPCiUrmKps/s1600-h/54820,1135370012,1-erased.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_dW-BmW1h1P4/RoaeexjaRDI/AAAAAAAAAT8/UbPCiUrmKps/s400/54820,1135370012,1-erased.jpg" alt="" id="BLOGGER_PHOTO_ID_5081923481069306930" border="0" /&gt;&lt;/a&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Ob branju prosto dostopnega poglavja knjige &lt;a href="http://www.delo.si/blog/borutb/%5C%22http://www.informit.com/bookstore/product.asp?isbn=0201699478&amp;rl=1%5C%22"&gt;A Human-Powered Methodology for Small Teams&lt;/a&gt;, ki govori o lastnostih, ki naj bi jih imel projekt, da izpolni pogoje agilnosti, je drugi lastnosti ime - &lt;span style="" italic=""&gt;reflektivne izboljšave&lt;/span&gt;.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Od vseh sedmih, ki jih poglavje opisuje je ta po mojih izkušnjah najmanj problematična, saj še nisem sodeloval v projektu, kjer se ne bi sodelujoči občasno (tedensko ali dvo-tedensko) usedli skupaj in predebatirali probleme in morebitne rešitve.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Avtor to lastnost začne opisovati s presenečenjem, ki ga je doživel ob nekem projektu.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Skupina se je sestala po 4 mesecih dela in ugotovila, da so daleč za rokom izdelave, arhitekturna zasnova pa slaba. Ni treba posebej poudarjati, da je bila skupina demoralizirana. Vodstvo je odpustilo 23 od 24. razvijalcev in najela 23 novih. Reorganizirali so skupine in vodstvene ljudi, plačali nekajtedenska izobraževanja in začeli znova od začetka.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Po njihovi četrti iteraciji (o iteracijah &lt;a href="http://www.delo.si/blog/borutb/index.php?BLOG_PATH=366,1713"&gt;pišem tu&lt;/a&gt;) je bil dizajn izdelan, že izdelana koda pa je prehitevala projektno časovnico. &lt;a href="http://www.delo.si/blog/borutb/%5C%22http://www.informit.com/authors/bio.asp?a=8b5a2835-5d9c-4456-a99b-eb89a639619d%5C%22"&gt;Avtor&lt;/a&gt; pravi, da je večina projektov pri katerih je bil zraven imela težke porodne krče. S sestajanjem se pridobi veliko novih informacij o projektu in okolju v katerem živi. Te informacije so podlaga za odločitve o morebitnih spremembah pri izboru orodij in tehnologij.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Nič posebnega. Metode za doseganje zadanih ciljev so ali pa niso primerne za določeno skupino. Omenja tipične pristope ektremnega programiranja: &lt;span style="font-style: italic;" italic=""&gt;programiranja v parih&lt;/span&gt;, &lt;span style="font-style: italic;" italic=""&gt;unit testing&lt;/span&gt;, &lt;span style="font-style: italic;" italic=""&gt;test-driven development&lt;/span&gt;, pa malo manj znano - &lt;span style="font-style: italic;" italic=""&gt;delo v samostojni pisarni&lt;/span&gt; napram &lt;span style="font-style: italic;" italic=""&gt;delu v sobi z veliko ljudmi&lt;/span&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Sam večino časa delam na razvojno naravnanih projektih, zato je izmenjava idej in preizkušanje del vsakdanjika. Reflektivne izboljšave so najbrž samo lepo ime za običajne delovne sestanke.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10745624-114686257265829466?l=borutb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://borutb.blogspot.com/feeds/114686257265829466/comments/default' title='Objavi komentarje'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10745624&amp;postID=114686257265829466' title='Št. komentarjev: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/114686257265829466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/114686257265829466'/><link rel='alternate' type='text/html' href='http://borutb.blogspot.com/2006/01/agilni-projekti-reflektivne-izboljave.html' title='Agilni projekti - reflektivne izboljšave'/><author><name>Borut Bolčina</name><uri>https://profiles.google.com/100412320755782895986</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-lSS0jJqb0lE/AAAAAAAAAAI/AAAAAAAAAAA/Ilphj3SxrAI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_dW-BmW1h1P4/RoaeexjaRDI/AAAAAAAAAT8/UbPCiUrmKps/s72-c/54820,1135370012,1-erased.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10745624.post-114686234153822404</id><published>2006-01-23T22:09:00.000+01:00</published><updated>2007-06-30T20:19:33.399+02:00</updated><title type='text'>Tapestry</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_dW-BmW1h1P4/RoaerBjaREI/AAAAAAAAAUE/fcPYwEMqAMo/s1600-h/tapestry.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp2.blogger.com/_dW-BmW1h1P4/RoaerBjaREI/AAAAAAAAAUE/fcPYwEMqAMo/s400/tapestry.gif" alt="" id="BLOGGER_PHOTO_ID_5081923691522704450" border="0" /&gt;&lt;/a&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Naj za hiter uvod nakažem kaj je stvar iz naslova. &lt;a href="http://jakarta.apache.org/tapestry/"&gt;Tapestry&lt;/a&gt; je ogrodje (&lt;a href="http://en.wikipedia.org/wiki/Framework"&gt;framework&lt;/a&gt;) za izdelavo spletnih aplikacij v jeziku Java. Prinaša spremembo v načinu razmišljanja in pozitivne učinke v razvojnem ciklu, ki seveda vključuje tudi oblikovalce. Delo je popolnoma objektno orientirano, kar pomeni, da ne razmišljamo kako sestaviti URL za izvedbo določene akcije na strežniški strani. Ravno tako ne skrbimo za nastavljanje parametrov, členjenje URL-jev in druge nizkonivojske operacije. Tapestry nadgrajuje &lt;a href="http://java.sun.com/products/servlet/index.jsp"&gt;Java Servlet API&lt;/a&gt;, kar omogoča delovanje spletne aplikacije v kateremkoli (npr. Tomcat) &lt;a href="http://en.wikipedia.org/wiki/J2EE"&gt;Java EE&lt;/a&gt; kontejnerju.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Na Tapestry poštno listo za uporabnike sem se vpisal avgusta leta 2004. Ponavadi se na listo za uporabnike prijavim takrat, ko me tema res zanima in jo v praksi tudi uporabljam. Lahko rečem, da sem programiranje spletnih aplikacij spoznal (leta 2000) iz diametralno nasprotne strani kot večina ostalih spletnih programerjev. Šok, ki sem ga doživel ob prehodu iz spletnega ogrodja &lt;a href="http://www.apple.com/webobjects/"&gt;WebObjects&lt;/a&gt; (WO) na &lt;a href="http://java.sun.com/products/jsp/"&gt;Java Server Pages&lt;/a&gt; (JSP) ni bil majhen. Veselje ob odkritju Tapestry ogrodja je bilo veliko, saj sem že takoj na začetku spoznal WO korenine in idejne zasnove.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Spletne strani so sestavljene iz komponent, vsaka odgovorna za del funkcionalnosti. Komponente so po funkcionalnosti različne (vizualne, nevizualne) in jih seveda lahko pišemo na enostaven način tudi sami. Poleg priloženih je nastalo že veliko novih v prostokodni skupnosti. Za lažjo predstavo kaj je to komponenta: &lt;a href="http://jakarta.apache.org/tapestry/tapestry/ComponentReference/DirectLink.html"&gt;DirectLink&lt;/a&gt;, &lt;a href="http://jakarta.apache.org/tapestry/tapestry/ComponentReference/For.html"&gt;For&lt;/a&gt;, &lt;a href="http://jakarta.apache.org/tapestry/tapestry/ComponentReference/Form.html"&gt;Form&lt;/a&gt;, &lt;a href="http://jakarta.apache.org/tapestry/tapestry/ComponentReference/Image.html"&gt;Image&lt;/a&gt;, &lt;a href="http://jakarta.apache.org/tapestry/tapestry/ComponentReference/Script.html"&gt;Script&lt;/a&gt;, in veliko drugih.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Mogoče je najpomembnejša lastnost način doseganja iluzije, da uporabnik z spletno aplikacijo ne komunicira prek &lt;span style="font-style: italic;"&gt;stateless &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/HTTP"&gt;HTTP&lt;/a&gt; protokola. Tapestry ponuja več načinov kako &lt;a href="http://jakarta.apache.org/tapestry/UsersGuide/state.html#state.page-properties"&gt;hraniti stanje&lt;/a&gt; uporabnika od ene do druge HTTP zahteve.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Večna dilema je tudi sodelovanje programerjev in oblikovalcev. Tapestry se tega loti takole: HTML ne vsebuje nobene nove značke, kar pomeni, da lahko HTML predlogo gledamo med samim razvojem tako kot jo vidi oblikovalec - z vsemi dinamičnimi elementi - tudi seznami, ki se v živo npr. zgradijo iz podatkov iz podatkovne baze! To je mogoče zaradi zelo zelo premišljenega koncepta, ki je že od vsega začetka vključeval idejo tesnega sodelovanja programerjev in oblikovalcev. Najbolj enostaven primer je vsem znani &lt;a href="http://jakarta.apache.org/tapestry/QuickStart/helloworld.html"&gt;HelloWorld&lt;/a&gt;. Samo za okus.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Validacija vnosnih polj je neobhodna naloga, ki jo Tapestry olajša na skorajda rutinsko opravilo. Poleg vgrajenih (&lt;span style="font-style: italic;" italic=""&gt;min&lt;/span&gt;, &lt;span style="font-style: italic;" italic=""&gt;max&lt;/span&gt;, &lt;span style="font-style: italic;" italic=""&gt;email&lt;/span&gt;, &lt;span style="font-style: italic;" italic=""&gt;minLength&lt;/span&gt;, &lt;span style="font-style: italic;" italic=""&gt;maxLength&lt;/span&gt;, &lt;span style="font-style: italic;" italic=""&gt;pattern&lt;/span&gt;, &lt;span style="font-style: italic;" italic=""&gt;minDate&lt;/span&gt;, &lt;span style="font-style: italic;" italic=""&gt;maxDate&lt;/span&gt;) lahko pišemo svoje validacijske algoritme (npr. preverba znakov iz generirane popačene slike), na strežniški in uporabnikovi strani - na enem mestu. Poglejte si &lt;a href="http://www.agileskills2.org/EWDT/chapters1-4.pdf"&gt;tretje poglavje&lt;/a&gt; knjige &lt;a href="http://www.agileskills2.org/EWDT/"&gt;Enjoying Web Development with Tapestry&lt;/a&gt;, ki jo tudi priporočam, če želite spoznati Tapestry, saj vas vodi zelo natančno od namestitve naprej. Prebral sem že kakšno knjigo, ampak tako dobro napisanih primerov še nisem srečal. Mislim, da je avtor Kent Tong izdal še eno knjigo na temo &lt;span style="" italic=""&gt;Web Services&lt;/span&gt;, ki bo tudi zagotovo na moji mizi.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Če bi moral na kratko povzeti ključne točke:&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;&lt;ol&gt;&lt;li&gt;Pristop k programiranju spletnih aplikacij &lt;span style="font-weight: bold;"&gt;ne&lt;/span&gt; zahteva razmišljanja &lt;span style="font-weight: bold;"&gt;o URL naslovih&lt;/span&gt; in parametrih v njih, &lt;span style="font-weight: bold;"&gt;ampak o objektih, metodah in lastnostih&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Značilna je zelo &lt;span style="font-weight: bold;"&gt;visoka stopnja ponovne uporabe&lt;/span&gt; že narejenih komponent med projekti. Poudarjam, to ni copy/paste.&lt;/li&gt;&lt;li&gt;URL-je gradi framework. Posledično pomeni, da &lt;span style="font-weight: bold;"&gt;kompleksnost&lt;/span&gt; spletnih strani &lt;span style="font-weight: bold;"&gt;ne raste hitro&lt;/span&gt; z velikostjo aplikacije.&lt;/li&gt;&lt;li&gt;Enostavna lokalizacija in validacija.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Najenostavnejša integracija&lt;/span&gt; programerjev in dizajnerjev do sedaj tudi za velike projekte.&lt;/li&gt;&lt;li&gt;Zelo &lt;span style="font-weight: bold;"&gt;robustna&lt;/span&gt; aplikacija (manj kode, manj napak). &lt;span style="font-weight: bold;"&gt;Napake se sporočajo zelo natančno&lt;/span&gt;, zato jih lahko hitreje odpravljamo.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Persistenca &lt;/span&gt;med zahtevami uporabnika.&lt;/li&gt;&lt;/ol&gt; Zaradi arhitekture nam Tapestry ponuja odlično &lt;a href="http://www.delo.si/blog/borutb/index.php?BLOG_PATH=366,1339"&gt;MVC&lt;/a&gt; okolje.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10745624-114686234153822404?l=borutb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://borutb.blogspot.com/feeds/114686234153822404/comments/default' title='Objavi komentarje'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10745624&amp;postID=114686234153822404' title='Št. komentarjev: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/114686234153822404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/114686234153822404'/><link rel='alternate' type='text/html' href='http://borutb.blogspot.com/2006/01/tapestry.html' title='Tapestry'/><author><name>Borut Bolčina</name><uri>https://profiles.google.com/100412320755782895986</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-lSS0jJqb0lE/AAAAAAAAAAI/AAAAAAAAAAA/Ilphj3SxrAI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_dW-BmW1h1P4/RoaerBjaREI/AAAAAAAAAUE/fcPYwEMqAMo/s72-c/tapestry.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10745624.post-114686199907032955</id><published>2006-01-17T20:23:00.000+01:00</published><updated>2007-06-30T20:20:23.696+02:00</updated><title type='text'>Topic Maps</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_dW-BmW1h1P4/Roae2hjaRFI/AAAAAAAAAUM/R2bPTkRXZ1E/s1600-h/brain.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp0.blogger.com/_dW-BmW1h1P4/Roae2hjaRFI/AAAAAAAAAUM/R2bPTkRXZ1E/s400/brain.jpg" alt="" id="BLOGGER_PHOTO_ID_5081923889091200082" border="0" /&gt;&lt;/a&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Pred meseci sem se začel ukvarjati s problemom čigar rešitev vidim v znanju, ki se je začelo zbirati v začetku devedesetih let prejšnjega tisočletja, torej pred petnajstimi leti.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Začetni problem je bil izbrati ali izdelati ustrezno podatkovno strukturo, s katero bi lahko modeliral poljubne objekte in njihove lastnosti. Potreboval sem nekaj uporabnega, po možnosti programsko knjižnico z jasno definiranim API vmesnikom, ki bi jo nemudoma lahko uporabil kot temelj podatkovno gnane spletne aplikacije.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Nemalo časa sem porabil za iskanje in v tem času je mojo raziskovalno pot prekrižalo ogromno novih pojmov in zloglasnih tri-črkovnih kratic. Da se ne zapletem vanje že na začetku, bom poskusil na kratko obrazložiti pojem iz naslova tega bloga - topic maps.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Topic maps so ISO standard za predstavitev in izmenjavo znanja s poudarkom na lažji pridobitvi željene informacije. V njih so informacije predstavljene s &lt;span style="font-style: italic;"&gt;temami&lt;/span&gt; (topics), &lt;span style="font-style: italic;"&gt;asociaciami&lt;/span&gt; (associations) in &lt;span style="font-style: italic;"&gt;pojavitvami&lt;/span&gt; (occurances). Za občutek kaj bi posamezni pojmi lahko predstavljali:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;&lt;span style="font-weight: bold;"&gt;Topic&lt;/span&gt; Praktično karkoli. To je lahko oseba, začimba, številka, dogodek, datoteka, ...&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;&lt;span style="font-weight: bold;"&gt;Association&lt;/span&gt; Relacije med zgornjimi temami.&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;&lt;span style="font-weight: bold;"&gt;Occurance&lt;/span&gt; Relacije med temami in njihovimi pojavitvami v določenih kontekstih.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Topic map zgradimo z XML dialektom imenovanim &lt;a href="http://www.topicmaps.org/xtm/index.html"&gt;XTM&lt;/a&gt;. Obstajajo orodja, tako odprtokodna kot komercialna, za izdelavo, različne vizualne predstavitve, analize in zlivanja že zgrajenih map. To slednje je zelo pomembno, ker pomeni združevanje znanja. Najlaže ilustriram na primeru.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Nekdo ali neka organizacija pripravi topic map, ki popisuje npr. začimbe za hrano. Na drugem koncu sveta je nekdo storil isto in ker tam rastejo drugačne rastline, je logično, da njegova mapa vsebuje nekaj zeli, ki jih prvi popisovalec ni vključil. Nekdo tretji je najbrž že opisal merske enote. Sedaj lahko jaz opišem kaj je to krompir, fižol, moka, jajca, vi pa iz vsega dosedaj naštetega in &lt;span style="font-style: italic;"&gt;zlitega&lt;/span&gt; skupaj sestavite opis za nekaj jedi!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;S tako bogatimi opisi se odpirajo ogromne možnosti predstavitev podatkov in predvsem iskanja po še vedno eksponentno naraščajočih količinah informacij, predvsem pa je to dober temelj za &lt;a href="http://en.wikipedia.org/wiki/Semantic_web"&gt;semantični splet&lt;/a&gt; - gotove bodočnosti.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Omeniti moram še &lt;a href="http://www.w3.org/RDF/"&gt;RDF&lt;/a&gt; (Resource Description Framework), ki je "ravno tako" primeren za enkodiranje, izmenjavo in uporabo strukturiranih (meta)podatkov v XML obliki. Ker se vanj še nisem poglabljal, ne morem narediti niti kratke primerjave - mogoče v eni izmed naslednjih objav.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;" class="posttext"  &gt;Vsebine, ki sem se jih samo dotaknil, so zelo obsežne in odpirajo celo nove delovne discipline, kot je na primer informacijski arhitekt, ki naj bi predstavil vsebine na tak način, da bi jih obiskovalci spletne strani z lahkoto našli in po njih navigirali. Hkrati naročniku ne sme naložiti nemogoče naloge pri pripravi podatkov in ne nazadnje razvijalcem ne dati pretrdega oreha pri izdelavi aplikacije.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10745624-114686199907032955?l=borutb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://borutb.blogspot.com/feeds/114686199907032955/comments/default' title='Objavi komentarje'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10745624&amp;postID=114686199907032955' title='Št. komentarjev: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/114686199907032955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/114686199907032955'/><link rel='alternate' type='text/html' href='http://borutb.blogspot.com/2006/01/topic-maps.html' title='Topic Maps'/><author><name>Borut Bolčina</name><uri>https://profiles.google.com/100412320755782895986</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-lSS0jJqb0lE/AAAAAAAAAAI/AAAAAAAAAAA/Ilphj3SxrAI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_dW-BmW1h1P4/Roae2hjaRFI/AAAAAAAAAUM/R2bPTkRXZ1E/s72-c/brain.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10745624.post-113683653219710860</id><published>2006-01-09T20:53:00.000+01:00</published><updated>2007-06-30T20:21:13.150+02:00</updated><title type='text'>Agilni projekti - pogosta dostava</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_dW-BmW1h1P4/RoafDRjaRGI/AAAAAAAAAUU/R-INOvQaTds/s1600-h/code.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp3.blogger.com/_dW-BmW1h1P4/RoafDRjaRGI/AAAAAAAAAUU/R-INOvQaTds/s400/code.gif" alt="" id="BLOGGER_PHOTO_ID_5081924108134532194" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Zagotovo je najpomembnejša lastnost vsakega projekta, naj bo ta majhen ali velik, pogosta dostava v hiši pretestirane aplikacije končnim uporabnikom.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Naročnik s tem dobi jasen vpogled v napredek izdelka. Uporabniki lahko na ta način hitreje pridobijo izkušnje in občutek ali je izdelek to kar v resnici potrebujejo. Vse pripombe in novi zahtevki se zbirajo sproti, da je razvijalcem lažje snovanje. Razvojna ekipa se na tak način tudi izogne pogostim zastojem zaradi nezmožnosti sprejetja odločitve o določenem aplikacijskem problemu. Nenazadnje to omogoča zgodnje razhroščevanje in pogostejši pregled nad razvojnim ciklom. Skupini se prileže tudi doza moralne vzpodbude z dokončanjem cikla.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Dostave programske opreme se razlikujejo, saj to lahko pomeni namestitve na delovnih postajah vseh končnih uporabnikov ali pa druga skrajnost posodobitev spletne aplikacije. Slednje je seveda neprimerno lažje, zato lahko dostavljamo pogosteje - tudi v dvo tedenskih ciklih, če je potrebno.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Prepogoste menjave ali nadgradnje uporabnike v najboljšem primeru jezijo. Če je možno si v takih primerih pomagamo z uporabniki, ki želijo imeti najnovejšo različico in tako pri njemu/njej "vadimo" namestitev in od njega/nje pridobivamo povratne informacije.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Integracija in iteracija sta dva različna pojma, ki ju ne smemo mešati. Integracija je postopek, ki mora biti v največji meri avtomatiziran v navezi z avtomatskimi testi in se mora dogajati čim pogosteje - boljše ekipe imajo samo 30 minutni interval. Iteracija pa vsebuje dokončanje sklopa cele skupine, integracije, poročil nadrejenim, pogovora v obliki reflektivnih izboljšav in pa seveda doseganje občutka dokončanja dela naloge. Ta občutek je zelo pomemben in zagotovo pripomore k izboljšanju timskega duha.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Past v katero se radi ujamemo je podaljševanje roka za konec načrtovanih iteracij zaradi nedokončanih delov aplikacije. Četudi dobronamerno, odgovorna oseba za odobritev teh podaljškov ekipi na dolgi rok bolj škodi, saj se emocije ob zaključkih nikoli ne zgodijo.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;V odvisnosti od "sovražnosti" okolja oziroma naročnika, se odloča o tem ali naj se fiksira zahtevke do njihove izvedbe. Če naročnik pogosto spreminja zahteve, je to vsekakor pomembno.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span class="posttext"  style="font-family:verdana;"&gt;Povzeto po knjigi &lt;a href="http://www.informit.com/title/0201699478"&gt;Crystal Clear: A Human-Powered Methodology for Small Teams.&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10745624-113683653219710860?l=borutb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://borutb.blogspot.com/feeds/113683653219710860/comments/default' title='Objavi komentarje'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10745624&amp;postID=113683653219710860' title='Št. komentarjev: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/113683653219710860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/113683653219710860'/><link rel='alternate' type='text/html' href='http://borutb.blogspot.com/2006/01/agilni-projekti-pogosta-dostava.html' title='Agilni projekti - pogosta dostava'/><author><name>Borut Bolčina</name><uri>https://profiles.google.com/100412320755782895986</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-lSS0jJqb0lE/AAAAAAAAAAI/AAAAAAAAAAA/Ilphj3SxrAI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_dW-BmW1h1P4/RoafDRjaRGI/AAAAAAAAAUU/R-INOvQaTds/s72-c/code.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10745624.post-113647164730971425</id><published>2005-12-16T15:32:00.000+01:00</published><updated>2007-06-30T20:22:51.597+02:00</updated><title type='text'>Model-View-Controller paradigma</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_dW-BmW1h1P4/RoafYxjaRHI/AAAAAAAAAUc/TgAyZ-n3xGk/s1600-h/mvc-blog.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_dW-BmW1h1P4/RoafYxjaRHI/AAAAAAAAAUc/TgAyZ-n3xGk/s400/mvc-blog.gif" alt="" id="BLOGGER_PHOTO_ID_5081924477501719666" border="0" /&gt;&lt;/a&gt;&lt;span style=";font-size:85%;" class="posttext" &gt;&lt;span style="font-family: verdana;"&gt;Ljudje radi rešujemo (in delamo) probleme in nič kaj fino ni, da bi morali vedno znova in znova tuhtati kako jih najbolje rešiti. Problemov je veliko in prav tako rešitev, a z leti se izoblikujejo vzorci, ki se jih lahko držimo, da probleme rešimo hitreje in elegantneje.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt; &lt;div  style="text-align: justify; font-family: verdana;font-family:verdana;"&gt;&lt;span class="posttext"  style="font-size:85%;"&gt;MVC je arhitektura programske opreme. To je vzorec, ki nadgrajuje objektno orientirano programiranje. Primarni cilj je preprečiti spreminjanje domenske logike zaradi spremembe uporabniškega vmesnika in obratno, namerno ali nenamerno.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="posttext"  style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;Model &lt;/span&gt;- To se objekti nad katerimi izvajamo določene operacije v aplikaciji in so značilni za problem, ki ga rešujemo. Ti objekti hranijo informacije, ki jih prikazujemo uporabniku in mu jih dajemo na voljo tudi za urejanje.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="posttext"  style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;View &lt;/span&gt;- Prezentacija modela uporabniku aplikacije, pogosto v obliki primerni za interakcijo. V spletnih aplikacijah je to HTML in vezna koda, ki priskrbi podatke za dinamične strani.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="posttext"  style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;Controller &lt;/span&gt;- Koda odgovorna za reakcijo na uporabniški vnos ali interakcijo. Običajno to pomeni spremembo v enem ali obeh ostalih nivojih. Deluje kot lepilo med modelom (domenskimi objekti) in izgledom (prezentacijo).&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="posttext"  style="font-size:85%;"&gt;Tako pravi teorija. Kaj pa praksa? Iz mojega zornega kota je za izdelavo MVC spletne aplikacije potrebno v začetku kar nekaj truda. Osvojiti je potrebno koncepte "na bojišču", torej s praktično izdelavo in analizo projektov za katere vemo, da je bil v njih uporabljen tak princip in po možnosti še "best practices" prijemi. Pogosto zaradi časovne stiske za dokončanje projekta uporabljamo "gverilsko" programiranje in jo celo odnesemo s celo kožo, pogosto upravičeno.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="posttext"  style="font-size:85%;"&gt;Kaj pa v primeru, ko pričakujemo rast aplikacije? Takrat se zagotovo izplača investirati čas in zastaviti projekt izdelave &lt;span style="font-style: italic;"&gt;enterprise&lt;/span&gt; spletne aplikacije po vzorcih (MVC ni edini), ki bodo nam ali programerjem in ostalim sodelujočim v prihodnosti delo olajšali ali sploh dovoljevali.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10745624-113647164730971425?l=borutb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://borutb.blogspot.com/feeds/113647164730971425/comments/default' title='Objavi komentarje'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10745624&amp;postID=113647164730971425' title='Št. komentarjev: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/113647164730971425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/113647164730971425'/><link rel='alternate' type='text/html' href='http://borutb.blogspot.com/2005/12/model-view-controller-paradigma.html' title='Model-View-Controller paradigma'/><author><name>Borut Bolčina</name><uri>https://profiles.google.com/100412320755782895986</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-lSS0jJqb0lE/AAAAAAAAAAI/AAAAAAAAAAA/Ilphj3SxrAI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_dW-BmW1h1P4/RoafYxjaRHI/AAAAAAAAAUc/TgAyZ-n3xGk/s72-c/mvc-blog.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10745624.post-113638225233983420</id><published>2005-12-06T14:41:00.000+01:00</published><updated>2007-06-30T20:24:00.076+02:00</updated><title type='text'>Konferenca "Izzivi razvoja sodobnih spletnih aplikacij"</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_dW-BmW1h1P4/RoafshjaRII/AAAAAAAAAUk/6g2mPeK7Fr8/s1600-h/ArtOfJavaWebDevelopment.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp0.blogger.com/_dW-BmW1h1P4/RoafshjaRII/AAAAAAAAAUk/6g2mPeK7Fr8/s400/ArtOfJavaWebDevelopment.jpg" alt="" id="BLOGGER_PHOTO_ID_5081924816804136066" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Običajno grem v Kolosej v kino, saj je temu namenjen - danes pa se je tam odvijala kratka konferenca ali kot so jo poimenovali organizatorji Oracle Software družabno srečanje&lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Kolikor vem v Sloveniji še ni bilo takega naslova na kakem predavanju ali pa sem hodil po svetu gluh in slep. Pričakovanja so bila mešana, saj na take vrste predavanjih lahko pričakujemo bolj pristranska mnenja in poglede. Popolne objektivnosti ni, obstajajo pa razpoznavni nivoji in merila.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;Kupite si knjigo &lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" class="sans" &gt;Art of Java Web Development: Struts, Tapestry, Commons, Velocity, JUnit, Axis, Cocoon, InternetBeans, WebWork &lt;/span&gt;&lt;span class="sans"  style="font-family:verdana;"&gt;in vedeli boste o čem govorim.&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Veliko število poslušalcev potrjuje aktualnost tematike in to navdušenje nad številom je z nami delil tudi organizator.&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Imam to srečo, da sem se že na začetku leta 2000 spoznal z &lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;enterprise&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; spletnimi aplikacijami in orodji, ki so omogočale stvari, ki še danes jemljejo sapo. Naravnost neverjetne koncepte pri programiranju spletnih aplikacij ni še danes uspelo doseči nobenemu meni znanemu skupku spletnih o(g)rodij. Glodajte.&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Veliko svojega časa porabim za raziskovanje tehnologij sloneč na Java jeziku z namenom lajšanja dela vsem vpletenim v proces razvoja in vzdrževanja spletnih aplikacij.&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Predavanji Uroša Mesojedca in Petra Brajaka sta bili dobri, a mestoma pri slednjem neobjektivni. Pohvalil bi pomirjujoč in razumen ton pri odločitvah glede izbora pravega orodja za specifičen problem. Všeč sta mi bili tudi dve ideji, ki se v podjetju g.Brajaka uporabljata v praksi: &lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;skupno lastništvo kode&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; in &lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;nočni integracijski testi&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;Ko dobim povezavo na vsebino predavanj, bom lahko bolj natančno razložil kaj sem mislil z grajo, če bo to koga zanimalo...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10745624-113638225233983420?l=borutb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://borutb.blogspot.com/feeds/113638225233983420/comments/default' title='Objavi komentarje'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10745624&amp;postID=113638225233983420' title='Št. komentarjev: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/113638225233983420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10745624/posts/default/113638225233983420'/><link rel='alternate' type='text/html' href='http://borutb.blogspot.com/2005/12/konferenca-izzivi-razvoja-sodobnih.html' title='Konferenca &quot;Izzivi razvoja sodobnih spletnih aplikacij&quot;'/><author><name>Borut Bolčina</name><uri>https://profiles.google.com/100412320755782895986</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-lSS0jJqb0lE/AAAAAAAAAAI/AAAAAAAAAAA/Ilphj3SxrAI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_dW-BmW1h1P4/RoafshjaRII/AAAAAAAAAUk/6g2mPeK7Fr8/s72-c/ArtOfJavaWebDevelopment.jpg' height='72' width='72'/><thr:total>4</thr:total></entry></feed>
