JavaScript je divan jezik na koji se uvek možeš osloniti:
>>> [] + {} "[object Object]" >>> {} + [] 0 >>> [] + [] "" >>> {} + {} NaNvia Goran Radulović.
JavaScript je divan jezik na koji se uvek možeš osloniti:
>>> [] + {} "[object Object]" >>> {} + [] 0 >>> [] + [] "" >>> {} + {} NaNvia Goran Radulović.
Jonathan Rasmusson, The Agile Samurai:
If you think you have an issue with accountability, there is an easy fix – get your team to demo their software.
Postoji pozitivan pritisak kada se od tebe očekuje da timu ili mušteriji predstaviš nešto na čemu si radio.
Juče je bio prvi dan kako pozivamo ljude na ragovor za pozicije sistem administratora i C++ programera. Pored manje više klasičnih pitanja i priče o tome gde su do sada i šta radili, šta su im interesovanja itd, često se priča odmota i u nekim drugim smerovima, pa se može čuti koješta zanimljivo.
Tako smo, kroz priču o fakultetima (novosadskom Fakultetu tehničkih nauka i Prirodno-matematičkom fakultetu da budem određeniji) profesorskim garniturama na istim i sličnom, čuli zanimljivo mišljenje jednog od kandidata. On je pomenuo prilično zanimljiv problem, a to je da su fakulteti obrazovanje programera okrenuli skroz natraške.
Naime, njegovo mišljenje je da “klincima” treba dati neke higher level alate koje odmah mogu da koriste i od kojih odmah mogu da dobiju neki feedback. Dajte im SQL da vrše upite na neku sample bazu, Python da automatizuju neke svakodnevne računarske zadatke, bacite ih odmah na neko jednostavno GUI programiranje, naučite ih HTML-u i CSS-u… To je ono što ih verovatno zanima i to je ono što im može dati instant rezultate, čineći sve zanimljivim. Da se ne zaboravi i to da su oni studenti koje programiranje stvarno zanima verovatno već imali neko iskustvo sa tim stvarima, pa odmah mogu da krenu sa malo težim problemima ako predavači kod njih primete osnovu i dublje interesovanje.
Nakon što im je long hanging fruits postalo dostupno i kako polako stiču znanje da koriste te alate, onda se priča lagano širi na to šta stvarno stoji iza njih, i dalje produbljuje znanja. Matematika, fizika i sve ostalo dolazi tek na kraju, ako i tad.
Naši fakulteti naravno idu skroz obrnuto. Postoji niz slučajeva gde ljudi, koji su inače dobri programeri i praktičari, bivaju isfiltrirani akademskim predmetima, što zbog profesora koji “traže znanje”, što zbog njihove lenjosti i manjka interesovanja za iste. Najbolji programeri koje znam imaju prilično fokusiranja interesovanja i ne vole da “gube vreme” na stvari koje ih ne zanimaju. Takav način funkcionisanja ih ne čini lošim programeri, ali ih često čini lošim studentima.
Iako se sa samim stavom ne slažem u potpunosti (dosta je sve uprošćeno i sve nosi svoj set prednosti i mana), ima tu nešto. U svakom slučaju, zanimljiva tema za razmišljanje.
Stvarno me nervira kada moram da kucam:
if (!($user instanceof User))Zašto jednostavno ne bih mogao da kucam:
if ($user not instanceof User)Ili pak, ako već sanjarim:
unless $user instanceof UserNeki će reći da je u pitanju samo stvar šminke, neki da bi tako nešto samo zbunjivalo ljude (to je odgovor PHP internals ekipe na ovakve zahteve), a opet mi jako smeta taj jedan uzvičnik i dva para zagrada viška. Negacije me toliko nerviraju, da imam jednu malu igru gde uvek gledam kako da izbegnem negacije i uzvučnike kada god je to moguće, a to se ponekada završi sa previše ugneždenih IF-ova, što i nije baš najlepša stvar za videti.
PHP nikada nije bio lep jezik, pa zašto bi to sada, posle toliko godina i toliko koda koji se danas vrte na njemu, postajao? Sada je čak i teže da se takve izmene uvode u jezik jer svaka izmena potencijalno ruši kompatibilnost sa kodom pisanim za starije verzije (a svi znamo šta to može da znači na primeru petice kojoj su trebale godine da pusti korenje baš zbog problema sa kompatibilnošću sa starim kodom).
Imam čudnu naviku da stvari kao što su jezici (ne samo programski), stil i slično ponekad opisijem materijalnim objektima. Tako opisan, PHP je jedna jako ćoškasta stvar koja zvoni sve u 16 kada je zakotrljaš. Iritira to što skoro pa i čujem tu zvonjavu kada programiram, a to je nešto što se neće promeniti uskoro, što zbog PHP internals ekipe i njihove vizije gde jezik treba da ide, što zbog popularnosti platforme i miliona redova koda “u divljini” koji treba da nastave da rade u novim verzijama jezika…
Jebi ga, trava je zelenija sa druge strane.
Jedna od stvari koja s vremena na vreme naleti je pitanje da li postoji ili zahtev da se napravi nešto što će uvoziti zadatke iz activeCollaba u Eclipse, kao Mylyn konektor ili kao potpuno nezavistan paket. Zahtev kao i svi drugi, manje popularan od nekih, ali opet dosta popularniji od nekih drugih, za neke timove nebitan, a za neke deal breaker. Definitivno tema za razmišljanje, ali tu ima jedan problem:
Lično mislim da je Eclipse kompletan promašaj, Frankenštajn napravljen od gomile otpada nabacanog na jedno mesto, tako napravljen da ne naljuti nikoga po pitanju mogućnosti, ali da te vremenom dovede do ludila i definitivno da nikada nikoga ne učini srećnim. Pogledajte samo ovaj Preferences dijalog:
Da te vidim da podesiš soft tabs iz prve, o ostatku da i ne govorim… Ne poželeti nikome!
I tu dolazimo do dileme iz naslova posta: da li svojim radom podržavati platformu na čiju pomisao vas obuzme neki čudan bes, kao da biste je obrisali iz postojanja da ikako to možete? Da li ličnim stavom i ličnim protivljenjem pucate sebi i svom proizvodu u nogu? Da li zbog ličnog stava uskratiti nešto korisno svojim korisnicima?
Po meni, projekti na kojima radimo neizbežno nose naš lični pečat, sa svim dobrim i lošim stvarima koje to nosi. To ne treba izbegavati, već prigrliti. Neka ono na čemu radimo bude oličenje našeg najboljeg Mi, pa makar to značilo izbacivanje stvari koje Mi smatramo lošim, bez obzira što ih neki ljudi traže. Naknadno izbacivanje mogućnosti je teško, tako da sve što dodamo treba da se računa i da dodaje vrednost proizvodu, jer smo Mi ti koji ćemo tu istu mogućnost morati godinama da podržavamo. Ako je Mi ne volimo i zakolutamo očima svaki put kada je neko spomene, onda je greška što smo je uopšte i dodali…
I tako A51 neće u skorijoj budućnosti raditi na Mylyn konektoru…
A51 is a software development company from Novi Sad. Our focus is development of tools that help organizations get projects done by employing more communication and less management.
Our flagship product, activeCollab, is used across the globe by thousands of organizations, including some of the largest technology and media companies and well known universities.
Mac OS X DeveloperJob Description:
Develop native applications for Mac OS XWhat we Offer:
Clean, quite, cozy environment where you can concentrate and get stuff done. We even offer home cooked lunch served in the office every day. Opportunity to learn new and develop existing skills. Best equipment money can buy. Tools should never limit your creativity. Type of energy only small companies can offer. Make the difference! activeCollab is one of the best known software products coming from Serbia.Requirements:
Simply put, you need to be a good programmer and natural problem solver. Experience with development of Cocoa applications. Candidates who are not able to work in office in Novi Sad Monday to Friday should not apply. Faculty degree is a plus, but not a requirement.If you are interested and see a fit here, please fill out the form that is available on this page:
http://a51.wufoo.com/forms/prijava-mac-os-x/
Thank you for your time!
Our entrepreneurial motivation is not confidence, it’s an insatiable desire to improve. It’s not about thinking your ideas are better than everyone else’s, it’s about never accepting any idea as being best.
Jason Cohen, Why I feel like a fraud
Jako dobra, besplatna knjiga o HTML5: Dive into HTML5.
It is clear to us that regardless of the number of changes we make, we see the need for more. Improvement is fun. One or two improvements uncover the need for other improvements.
John Smith, COO, Ross Controls
[There's] a famous fault in software engineers to instinctively favour reinvention over reuse, not just because they are unfamiliar with what came before, but because they misunderstand why it came before.
Ovaj citat mi je pao na pamet kada sam razmišljao o emailu. Email je servis Interneta koji je toliko dugo sa nama i koji ima toliko istorije da dosta ljudi koji programiraju aplikacije koje se oslanjanju na njega ne razumeju gomilu stvari vezanih za email i povezane standarda, kao ni razloge zašto su te stvari tu i zašto rade baš na način na koji rade.
Takve stvari ja u svojoj glavi imam markirane kao “legacy”. Ukoliko je to nešto toliko pustlo korenje da je sada standard i da je gotovo nepromenljivo, prihvati i guraj bez obzira koliko shakovano sve izgledalo i koliko “bolje” može da se uradi.
Erste banka ima prilično dobar online banking softwer. Dozvoljava mi da uradim sve što i drugi sistemi, može da se koristi iz bilo kojeg browsera (zbogom bagoviti Internet Exploreru i disku sa sertifikatom); prilično sam zadovoljan.
Ali, ima jedna osobina koja me prilično nervira: nakon otvaranje e-bankinga dobije se jedno plastificirano parče papira na kome se nalazi 8x4 tabela sa gomilom brojeva. I nakon što se ulogujete, softver od vas traži da unesete broj taj i taj, pa vam tek onda dozvoljava pristup vašem novcu.
Razumem, moralo se nekako zaštiti, ljudi moraju da osećaju pouzdanost u e-bankingu, ali svaki put kada želim nešto da uradim moram da ustanem do jakne, izvadim novčanik, aha! 3. red kolona B, tu smo, tapa-tapa, 43254532, uh. Smaranje.
Ako istu stvar uradim više od tri puta, onda ću sesti i automatizovati je, uvek se isplati na duže ili kraće staze.
I evo, izvolite Greasemonkey skriptu koja će sama da unosi brojke, a vi ćete sasvim srećno i zadovoljno da raspolažete vašim novcima uz što manje kuckanja.
Klik ovde za instaliranje skripte
Samo par napomena:
Pre nego što počnete da koristite skriptu, moraćete je editovati i uneti na vrhu skrpte vašu TAN tablicu. Videćete redove tan_red1 do tan_red8 i tu unutar navodnika unesite vaše brojeve. Editujete skriptu tako što uradite desni klk na tog majmuna u status baru, izaberete NotBanking pa kliknete na edit. Biće vam potreban Firefox browser. Uostalom, ukoliko već ne koristite Firefox, ne znate šta propuštate. Korisničko ime i lozinka se neće automatski unositi. Ukoliko želite baš toliku automatizaciju, ukombinujte ovu skriptu sa AutoFormer (ne radi u FF 3.6) ili Autofill Forms ekstenzijom.VAŽNO:
Uopšte ne preuzimam odgovornost za ovaj softver. Vaš novac je vaša odgovornost i mada ne postoji nikakva šansa da vam skripta nešto loše uradi, ukoliko vam neko ukrade ili kompromituje računar može doći u posed vaše TAN tablice, što može predstavljati problem.
Savetujem potpunu enkripciju hard diska, kao što sam ja uradio na svom laptopu za slučaj da "dobije noge".
Obavezno promenite lozinku koju dobijete od Erste banke, moja je bila šuplja kao sir (nešto tipa "nikola123"). Nažalost, korisničko ime ne može da se menja, ali je prilično dobro smišljeno tako da je to u redu.
Pamet u glavu, lovu na račun.
Ukoliko imate Git repozitoriju na kojoj radi više programera, mora se voditi računa o dozvolama fajlova. Najjednostavnije je dodati sve korisnike u posebnu grupu (recimo, developers), zatim otići do repozitorije i podesiti je da bude deljena:
cd code.git chmod -R g+ws * chgrp -R developers * git repo-config core.sharedRepository trueU suprotnom će se javljati sledeća greška prilikom git push:
error: insufficient permission for adding an object to repository database ./objects fatal: failed to write objectAko ste programer, i to u web vodama, jedna od (meni vrllooo dosadnih) akcija koja je obavezna u razvoju web aplikacija (sajtova) je provera kako sajt na kome radite, vaša dika i ponos, izgleda u moru raznih browsera (pregledača): IE6, IE7, IE8, FireFox, Safari, Opera, Chrome (da pomenem samo neke).
Najveća muka i nevolja je bilo upravo testiranje u svim mogućim IE verzijama – uz neverovatna dovijanja da dobijete sve verzije na računaru.
No, tome je kraj na najlepši mogući način Upoznajte SuperPreview za Internet Explorer:
Expression Web ekipa je odlučila da SuperPrevew za IE bude besplatan dodatak koji vam omogućava do skora neverovatne stvari:
Prikaz sajta u IE6, IE7, IE8 (ako imate IE8 instaliran na mašini) Izbor koja je od ova tri browsera baseline (primarni) Izbor ciljne rezolucije (dole desno) Prikaz DOM stabla Panning mode (sinhronizovano skrolovanje u svim browserima) Overlay (preklapanje) prikaza iz jednog i drugog browsera (slaganje do u pixel) Overlay (preklapanje) prikaza iz browsera i učitane slike (slaganje sa dizajnom koji ste dobili) Svi detalji o html elementima ispod, uz naznačene pozicione elemente koji se razlikuju (crveno 85 i 399 u screenshotu)SuperPreview za Expression Web će podržavati i gomilu drugih stvari (i browsera – sve koje imate instalirane na mašini, plus neke preko web servisa) ali i ovaj besplatni dodatak za IE zlata vredi, ako ste u developer vodama. Topla preporuka.
- Web strana: http://expression.microsoft.com/en-us/dd565874.aspx - Download strana: http://www.microsoft.com/downloads/details.aspx?FamilyID…
Na kraju samo malo upozorenje: SuperPreview je u beti, pa su mogući neki problemli (ja ih nisam imao). Nevezano za probleme i finalna verzija plugina će biti besplatna.
Podelite sa drugima:Šta je stil? Ova reč potiče od starogrčke reči στύλος, koja je u početku predstavljala naročitu rezaljku kojom se pisalo po voštanim tablicama. Kasnije je taj naziv usledio za svaku vrstu pisaljke. A pisaljki ima raznih i tako i raznih stilova pisanja. Reč se vremenom rasprostranila na mnoge delatnosti pa i u mnoge jezike, dobijajući opštije značenje: način kako nešto pišemo, crtamo, stvaramo, gradimo i uopšte, kako nešto radimo.
Stil nije zakon i pravilo, stil je način kako nešto činimo, a načina može biti raznih. Da li je pogrešno pisati štampanim ili pisanim slovima, ćirilicom ili latinicom, serifnim ili neserifnim slovima? […]
Processing is an open source programming language and environment for people who want to program images, animation, and interactions.
Ovo mi deluje ultra–kul. Overite i Dave Shein blog gde dokumentuje svoj proces učenja processinga.
Jutros nešto razmišljam o podršci i praćenju korisnika – ne bi li bilo lepo znati koje je stranice korisnik prethodno posetio (i kako je došao do njih) pre nego što vas je kontaktirao za pomoć? Iz toga bi se dosta dalo zaključiti: koliko posetioci stvarno obraćaju pažnju na dokumentaciju, da li prvo pretražuju ili odmah klikaju na Contact dugme itd.
I tako nažvrljam na papiru sledeće:
posete -< otvorene straniceSvaka poseta može da ima niz otvorenih stranica. Dovoljno jednostavno samo po sebi, ali nedovoljno ukoliko se ne prati sa koje stranice je korisnik došao na koju stranicu. Davno smo prerasli browsere sa jednim prozorom i doba kada su se korisnici linearno kretali kroz sajt. Ponašanje današnjih korisnika više liči na drvo sa gomilom račvanja nego na flat listu stranica koje su posetili.
I tu je problem – kako pratiti koje stranice otvaraju koje stranice?
Prva stvar koja mi je pala na pamet je jednostavno kačenje ID-ja trenutno otvorene stranice na sve linkove na stranici (jedna linija JavaScripta bi sasvim lako nakačila ove vrednosti):
http://www.activecollab.com/contact?from=123
gde je from vrednost ID trenutno otvorene stranice u logu. Najveći problem kod ovog pristupa je što se “prljaju” URL-ovi sa podacima koji bi generalno trebalo da se prenose u pozadini.
Takođe ne znam kako botovi pretraživača tretiraju ovakve URL-ove. Da li smatraju stranicu drugačijom kada je GET parametar drugačiji? U kojoj situaciji ignorišu određene GET parametre? Kada liče na hash? Ima li neko više informacija o ovome?
Očigledno “prljanje” bi se dalo rešiti JavaScriptom tako što se presreće klik događaj svakog linka i pre same redirekcije kači ID trenutno otvorene stranice. Ovo ne bi radilo kada posetilac otvara linkovanu stranicu u novom tabu jer se tada preskače klik događaj. Otvaranje stranica u novom tabu je dosta čest slučaj, posebno kada se traže neke informacije bez da se jasno zna gde se iste nalaze (nakon pretrage foruma npr – posetilac će isklikati sve top teme u novim tabovima i tražiti odgovor na svoj upit u njima).
Druga opcija je da se oslonimo na browser da nam kaže odakle je korisnik došao. Ovo je nepraktično zato što nije potpuno rešenje (neki korisnici isključu prosleđivanje referrer informacija) i što bi onda na osnovu referer stranice morali da kopamo po logu i tražimo tačan ID prethodne stranice. Deluje kao nepotreban korak pošto taj info već ionako imamo na prethodnoj stranici.
Treća opcija koja mi je pala na pamet je da se jednostavno svim linkovima doda rel=”nofollow”, a struktura sajta ponudi kao sitemap. Ovo je naravno jako glupo pošto bi pretraživač video gomilu stranica na koje ni jedna druga stranica “zvanično” ne linkuje i verovatno bi im dobrano oborio vrednost.
I tako ne dođoh ni do kakvog zaključka… Cela ova priča je samo razmišljanje naglas. Zakucam tako ponekad sa problemom koji mi deluje interesantno iako i nemam stvarnu potrebu za rešavanjem istog. Zanimljivo je ipak, kao vežba za vijuge ako ništa više
PHP-GTK je ekstenzija za PHP programski jezik koja implementira GTK toolkit. Ukratko, služi da u PHP-u pravimo samostalne grafičke aplikacije.
Ovde je opisana instalacije PHP-GTK 2.0.1 na Ubuntu 9.04 operativni sistem. Paket se ne nalazi u repozitoriji koja bi omogućila brzo i jednostavno instaliranje, već se mora kompajlirati iz izvornog koda.
Prvo instalirajte sve pakete potrebne za kompajliranje:
sudo apt-get install m4 gawk build-essentialPHP-GTK se može skinuti ovde, zatim raspakujte skinutu arhivu:
tar xzf php-gtk-2.0.1.tar.gzPHP paket trenutno ima bag, te se pre kompajliranja mora napraviti ovaj trik:
cd /usr/share/aclocal cp libtool.m4 libtool-orig.m4 cat lt~obsolete.m4 ltoptions.m4 ltsugar.m4 ltversion.m4 >> libtool.m4Dalje ste spremni za kompajliranje po uputstvu sa PHP-GTK sajta. Ukratko:
./buildconf ./configure make sudo make installI ne zaboravite da dodate sledeću liniju u /etc/php5/cli/php.ini:
extension=php_gtk2.soTo je to.
Pre nešto manje od dve nedelje objavili smo activeCollab 2. U pitanju je verzija na kojoj se dosta drugo radilo, sa nizom značajnih unapređenja.
Pored niza sitnih i krupnih unapređenja, ima i stvari (mogućnost sistema da prima emailove npr) koje iz korena menjaju kako ljudi koriste sistem. Takva verzija ne može da prođe bez bete. Manje, bug fix verzije sa sitnijim unapređenjima mogu da idu (samo paziš šta radiš i kontrolišeš se da se ne zaneseš previše sa dodavanjem novih stvari), ali nešto sa dosta izmena ne ide.
Prošle godine, u slično vreme je išla activeCollab 1.1 beta i to je bio prvi put da smo imali testiranje tog tipa i te veličine. Beta je bila javna tako da su svi koji su imali licence mogli da skinu novu verziju i testiraju je. To se pokazalo kao dobar pristup tako da smo na isti način išli i sa betom za verziju 2. Ono što je bila greška je to što smo za 1.1 bete dodavali nove mogućnosti.
Kada se tokom bete dodaju nove mogućnosti, svi testovi padaju u vodu - na ovaj način u sistemu se uvek nalaze stvari koje su nove i nestabilne. Naučeni greškom, activeCollab 2 beta je lansirana tek kada smo imali sve mogućnosti koje smo želeli da predstavimo. Svrha bete nije da timu da još vremena da nabaca još koju novu mogućnost, već da mu omogući da ispegla ono što ima i postara se da je sistem stabilan.
Pristup da se mogućnosti kompletiraju pre bete, pa zatim peglaju bez dodavanja novih, ima još jednu dobru stranu: tačno se zna kada je verzija gotova - kada se stabilizuje. Ukoliko se nove mogućnosti dodaju tokom bete, konačni set mogućnosti je uvek otvoren pa se jako lako zaneti, dodati previše novih stvari i celo “testiranje” produžiti za još koji mesec. Na kraju stvarno završite sa više mogućnosti, ali su one nestabilne i prava su noćna mora za podržavanje.
Zato sa betama treba pažljivo:
Napravite sve mogućnosti koje želite da finalna verzija ima i onda ih peglajte, bez dodavanja novih mogućnosti. Pažljivo odabrate datum kada želite da vidite finalnu verziju, ali ga nipošto nemojte objaviti. Ako to uradite, velika je verovatnoća da ćete požuriti sa betom usled pritiska od strane korisnika, a samim tim i izbaciti manje stabilan proizvod. Ovo se uvek vrati kao bumerang u vidu značajno više posla oko podrške. Što se podrške tiče, tretirajte betu kao i bilo koju drugu stabilnu verziju. Izvlačenje na fazon: “Beta je, i treba da ima greške. Strpi se do sledeće verzije” će za rezultat imati da će se ljudi opeći i neće želeti sledeći put da pomognu. Opustite se i uživajte u procesu. Pritisak uvek za rezultat ima greške i uglavnom je kontra-produktivan. Umesto da šizite i gurate oštre rokove, opustite se i polako sa korisnicima privedite betu kraju. Na kraju ćete izbaciti stabilan proizvod bez da osedite u procesu.U poređenju sa prethodnom beta koja je bila dosta napeta, verzija 2 se desila polako i na kraju smo stvarno zavriši sa znatno boljim proizvodom za koji nije trebalo toliko podrške kada je početna navala prošla. Sada se već radi na narednoj verziji pa se opet nadamo skoroj beti.
PS: Tekst sa istom temom i savetima, ali malo drugačijim sadržajem je juče prekjuče objavljen na A51 blogu.
I juče i danas se na pomalo čudan način povukle pitanje pravila koja aplikacija nameće korisniku.
Konkretno, juče sam veći deo dana proveo radeći na dokumentaciji. Svaki članak se sastoji od naslova i sadržaja. U takvim situacijama aplikacije uglavnom zahtevaju od korisnika da unesu obe vrednosti pre nego što prihvate izmene. To je nametnuto pravilo koje korisnik mora da poštuje kako bi mogao da koristi sistem.
Naša aplikacija nije toliko stroga pa zahteva samo naslov što mi se, kao korisniku, pokazalo jako zgodnim. Umesto da završavam stranicu po stranicu, prvo sam kreirao niz stranica na kojima treba da radim prostim unošenjem naslova pa tek onda počeo da unosim sadržaj. Na taj način sam imao celu strukturu pred sobom i tačno znao šta treba da radim i kako napredujem. Da je aplikacija od mene zahtevala i unos sadržaja, pitanje je da li bih tako radio.
Jutros je osvanuo komentar na jednu temu gde se korisnici pitaju zašto jedan element u activeCollabu zahteva minimalno 3 slova dugačak naslov. Razmišljajući o tome šta i kako da odgovorim čoveku, zapitao sam se li su uošte ta pravila i bitna? Zašto sistem jednostavno ne bi puštao korisnika da ne unese vrednost?
Na primer, ako korisnik ubaci zadatak bez opisa, sistem može da stavi opis na neku podrazumevanu vrednost. Kada korisnik naknadno vidi unos, može da upotpuni podatke ako želi ili ostavi tako kako je ako mu to nije bitno…
Prijavi problema kao na slici ništa ne nedostaje, iako je kratak opis izostavljen. Sve što treba je tu:
Kasnije, kada se detaljno pozabavi problemom, Goran može uzeti i izmeniti “[NO SUMMARY]” u “Nakon instalacije modula, keš se ne osveži što može praviti probleme pri učitavanju stilova” ili šta god da nađe kao stvaran uzrok problema.
Da sumiram, pitanje je da li su sva pravila koja ubacujemo u svoje aplikacije dobra? Da li bismo olakšali ili otežali korisniku time što bismo umesto forsiranog unosa omogućili da ostavi polje praznim? Koja su mesta u aplikaciji gde po inerciji dodajemo pravila koja nužno i ne pomažu i bez kojih se može?
Ne znam kako do sad ovo nisam primetio (u stvari znam, ali nije sad bitno ), ali python u verziji 3.0 je doneo novu skrivenu zezalicu (easer egg). Naime, kad neko pokuša da importuje modul antigravity desi je jedna čudna stvar. Python Vas odvede na sajt XKCD, na kome postoji jedan zanimljiv strip na račun python-a.
Inače, i u proteklim verzijama su postojale ovakve ugrađene zezalice. Jedna od mojih omiljenih je from __future__ import braces koja baca exception SytaxError sa porukom “not a chance”. Za one koji ne znaju, __future__ paket je namenjan za nove stvari koje će biti ugrađene u python u sledećim verzijama.
Zatim postoji i import this koji ispisuje The Zen Of Python (nekoliko korisnih saveta u vezi programiranja generalno). Interesantno je i videti kod modula this
Ima li ih još za koje ne znam? Uvek se obradujem kad naiđem na nešto ovakvo (mada ništa od ovoga nisam sam otkrio, to ne umanjuje moje zadovoljstvo )…
Skupljao sam ih dosta dugo u jedan fajl. Ovo neki koji mi se najviše sviđaju…
Walking on water and developing software from a specification are easy if both are frozen. Every language has an optimization operator. In C++ that operator is ‘//’. Some people, when confronted with a problem, think “I know, I’ll use regular expressions.” Now they have two problems. In order to understand recursion, one must first understand recursion. The only “intuitive” interface is the nipple. After that it’s all learned. The generation of random numbers is too important to be left to chance. It works on my machin. In theory, theory and practice are the same. In practice, they’re not. Beware of programmers who carry screwdrivers. Perl - The only language that looks the same before and after RSA encryption. Nine people can’t make a baby in a month. Software is like sex: It’s better when it’s free. Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning. C++ : Where friends have access to your private members. Debuggers don’t remove bugs. They only show them in slow motion. God could create the world in six days because he didn’t have to make it compatible with the previous version. Programmer: an organism that turns coffee into software. There are only two kinds of languages: the ones people complain about and the ones nobody uses. Hofstadter’s Law: It always takes longer than you expect, even when you take into account Hofstadter’s Law Java: Write Once, Debug Everywhere My programs don’t have bugs, they just develop random features. If Java had true garbage collection, most programs would delete themselves upon execution.Za većinu ne znam ko je autor, tako da nisam hteo da stavim autora ni za one koje znam.
Ajde programeri, dajete vaše omiljene citate
Stvarno ne bih mogao da zamislim kako bismo izlazili na kraj sa poslom da nema SVN-a. Trenutna operacija je sledeća - četiri programera koja svakodnevno rade na dve razvojne verzije aplikacije koja će uskoro prebaciti 200 hiljada redova koda (samo naš kod, bez dodatnih biblioteka kao što je Smarty i SwiftMailer), plus na održavanju sajta koji je u potpunosti custom razvijan. Nije to ništa veliko (probajte da zamislite tim od 30 programera koji rade na legacy sistemu koji ima par miliona redova koda), ali bez sistema kao što je SVN bi nastao pravi haos.
Iako je nezamenljiv alat koji stvarno pomaže da bolje završavamo posao, neke stvari su i dalje dosta nezgodne. Kao što rekoh, uvek paralelno radimo na dve grane aplikacije - održavanje stabilne grane (v1.1) i glavnoj grani koja donosi nova veća unapređenja i koja je uglavnom nestabilna (v1.2). Kada su stvari tako postavljene, s vremena na vreme izmene iz v1.1 treba da ubacimo u v1.2 koji je odavno krenuo svojim tokom; tj. treba da mergeujemo stabilni branch u trunk (trunk je glavna razvojna grana).
Proces ubacivanja izmena iz jedne grane u trunk koji se već 6 meseci razvija samostalno definitivno ne deluje kao naivan posao. SVN tu pomaže, ali je to i dalje proces koji zna da uzme i do po par sati i gde dosta toga može da pođe na loše. Evo kako to radimo:
1. Nađemo reviziju kada je zadnji put rađen merge (revizija XXXX u daljim komandama). Ovo je bitno jer merge izmene između te revizije i trenutne revizije u grani ubacivati u trunk. Ako omašimo reviziju i navedemo pogrešnu, možemo primeniti pogrešne izmene.
2. Na disk checkoutujemo svež kod iz trunka. merge radi tako što upoređuje određenu reviziju grane sa najsvežijim kodom u grani i te izmene ubacuje u work copy u kome smo. Dakle, imamo svež trunk, i iz terminala dođemo do njega:
cd /Library/WebServer/Documents/activecollab trunk/activecollabNakon toga radimo merge:
svn merge -rXXXX:HEAD "REPOSITORY-URL/activecollab/branches/REL 1.1"Kada znam da je bilo dosta izmena, obično odradim dry run koji lista izmene koje će napraviti, bez da ih primeni na sam kod. Dosta korisno da vidite koliko će vam glavobolje merge zadati:
svn merge -rXXXX:HEAD --dry-run "REPOSITORY-URL/activecollab/branches/REL 1.1"3. Pustimo merge komandu da radi posao. Kada merge naleti na konflikt, možete ga razrešiti ili ostaviti razrešenje za kasnije. Iako SVN nudi više opcija ja lično koristim samo tri komande:
p - postpone (razreši kasnije), mf - mine force (razreši koristeći kod iz trunka), tf - their force (razreši koristeći kod iz grane).
4. Commitujemo work copy. Sada kada su sve izmene primenjene i konflikti razrešeni imamo nov, svež i up-to-date trunk.
I za kraj dva saveta. Prvo, često radite merge. Najveća sranja sam imao kada sam puštao da se nakupe meseci izmena. Tada sam morao da odvajam po celo veče samo za merge. Sporo, mučno i traćenje vremena. Drugo, automatizujte proces. Sad ću da sednem i napišem script koji će mi skinuti veći deo merge procesa sa vrata. Razrešavanje konflikata je i dalje nešto što ću morati da nadgledam i ručno rešavam, ali veći deo operacija može da ide automatski.
Vaša iskustva i saveti sa SVN-om i branchevima?
Od 17-19 aprila u Velikom Tarnovu (Tarnovgrad) u Bugarskoj održava se P2P Conference. Tema konferencije su web i mobilne tehnologije.
Predavaću na temu te nove browserless paradigme web aplikacija - te je naslov predavanja “Browserless web“. Nakon nekoliko iteracija tema je sazrela i evo među prvima je prihvaćena od strane tamošnjih organizatora. Interesatno je da se konferencija održava od 2004. godine.
Inače Veliko Tarnovo je lep utvrđeni stari grad u centralnoj Bugraskoj (oko 220 km istočno od Sofije), u našoj istoriji poznat kao mesto gde je preminuo Sveti Sava.
Medijski sponzor događaja biće i naše Internet ogledalo.
Nakon višemesečne javne bete, nedavno je objavljen Versions 1.0, novi grafički interfejs za rad sa Subversionom za Mac OS. Par dana posle Versions je postao i zvaničan SVN klijent u firmi zamenivši stari dobri SvnX, pre svega zahvaljujući Godži. Iscimao se čovek da nas sve odreda prebaci
Kao što rekoh, pre Versions svi smo koristili SvnX. SvnX je besplatan, lepo radi posao, ali mu je interfejs dosta čudan dok se ne naviknete, ponajviše zato što koristi prozor za svaki bitniji alat. Kada radite prost update na primer, verovatno ćete imati otvorena 3 prozora - Work Copies i Repositories koji su otvoreni po defaultu i prozor sa informacijama o samom Work Copyju kroz koji radite update. Mnogo, posebno ako dosta koristite ekspoze gde svaki nepotreban prozor samo pravi nered.
Za razliku od njega, Versions nudi lep, klasičan single window interfejs na koji smo uglavnom navikli. Mogućnosti su standardne za alate ove vrste - tu je manje više sve što vam treba da biste radili sa work copyjima, repository browser koji omogućava direktan rad sa fajlovima unutar repositoryja, bez potrebe za work copyjem itd. Koliko sam imao prilike da primetim u zadnjih par nedelja korišćenja, Versions ne nudi ništa revolucionarno novo, ali je izvedba vrhunska što je sasvim dovoljno da vas navuče.
Evo par stvari koje se meni izuzetno sviđaju:
Kada gledate listu izmenjenih fajlova u work copyju, ne dobijete flat listu već tačno vidite izmene u strukturi projekta. U bookmarks sekciji, Versions prikazuje broj modifikovanih fajlova (žuti mehurić) u samom work copyju i broj izmenjenih fajlova na serveru (plavi mehurić). Ovo jasno i glasno kaže da je neko commitovao izmene i da bi verovatno trebali da odradite update. Inspector olakšava rad sa svojstvima fajlova i foldera. Posebno je jednostavan ignore, nešto za šta sam ranije koristio komandnu liniju. Postoji niz alata koji se mogu koristiti za pregled diffova (FileMerge, TextWrangler itd). Versions vam omogućava da izaberete alata koji vam najviše odgovara.Većih zamerki stvarno nemam, valjda zato što sam uz SvnX navikao da neke stvari kao što su konflikti i merge brancheva rešavam ručno… Voleo bih kada bi Versions imao alat koji olakšava te operacije, ali mogu da živim bez njega.
Versions je komercijalan alat i košta 39EUR. Najtoplija preporuka ekipi koja svakodnevno koristi SVN i treba joj dobro grafičko okruženje za rad sa istim.
Za programiranje, sem želje, puno učenja i malo talenta, neophodni su i razni alati. Ti alati zavise prvenstveno od operativnog sistema, kao i ciljne aplikacije koju želite da razvijete.
Danas sve više ima smisla razvijati web aplikacije, umesto klasičnih desktop (korisničkih) aplikacija; prednosti i sa strane korisnika i sa strane programera su očigledne:
Sa strane korisnika:
za pristup aplikaciji je dovoljan browser na računaru ili čak na mobilnom telefonu dostupnost aplikacije je praktično sa bilo kog mesta na kome postoji pristup Mreži nema instaliranja nikakvih DLL-ova, ActiveX komponenti i ostali džidža-bidža - to praktično prelazi u održavanje aplikacije na serveru i to je zaduženje programera a ne korisnikaIstina, gornje će se platiti osiromašenim korisničkim interfejsom, ponekad slabijom funkcionalnošću, ali su sve to minorni nedostaci - činjenica je da već sada najviše vremena provodite u browseru, a to je dobar dokaz da su ovi nedostaci zaista manje bitni.
Sa stanovništva programera, razvijati web aplikacije takođe ima sve više smisla:
postavljanje aplikacije (hosting) je relativno jevtin (od 7-8$ mesečno za osnovni tj. shared hosting pa od 40$/mesečno za VPS hosting) potencijalno mnogo veća publika, a time korisnici kao i dobit (ili novčana, ili reklama, ili popularizacija samog programera) ispravljanje bagova i problema se daleko lakše radi - samo na jednom mestu, na samom serveru gde je i aplikacija kontrola pristupa (ko koristi aplikaciju i da li na to ima prava) je daleko lakšaOk, šta je sve potrebno programeru koji se odlučio za razvoj Asp.Net aplikacija na Windows platformi? Da pokušam da nabrojim:
Windows operativni sistem (preporučeno Vista ili XP Professional ali može i XP Home verzija) - originalni .Net Framework (preporučeno 3.5 SP1, ali može i 2.0 SP1) SQL Express baza (preporučeno SQL Express 2008 ali može i SQL Express 2005) Visual Studio Express 2008Sve gore, sem operativnog sistema je potpuno besplatno.
Sad, moguće je sve od ovoga skinuti odvojeno, ali zašto komplikovano kada može i jednostavnije? Tom delu “jednostavnije” je upravo namenjen Microsoft Web Platform Installer - sistem za instalaciju svega što vam je potrebno za razvoj.
Postupak je vrlo jednostavan: pobrinite se da imate barem .Net 2.0 instaliran; zatim odete na Microsoft Web Platform Installer i skinete/startujete malo programče; posle kraćeg ispitivanja, ponudiće vam razne opcije za instalaciju (značajno različite u zavisnosti da li ovo radite na XP, Windows Server 2003/2008 ili Vista operativnim sistemima):
Microsoft Web Platform Installer - prvi korak (klikni za veću sliku)
Ako niste sigurni, izaberite ASP.NET ili Complete za instalaciju svega što se nudi (ipak, reč upozorenja: Complete je veliki download - oko 150 Mb), prihvatite nekoliko Terms & Conditions i sačekajte da se završi instalacija.
Kako procedura (ako na mašini nema ništa već instalirano) zna da potraje, preporučujem da ovo radite kada je dobra veza a vi radite nešto drugo (instalacija može da zahteva restart ili dva, za .Net Framework 3.5 SP1 i Windows Installer 4.5):
Microsoft Web Platform Installer - instalacija (klikni za veću sliku)
U svakom slučaju, ovo je zaista najjednostavniji način da vaš računar pretvorite u vrlo pristojnu razvojnu stanicu i to potpuno besplatno. Ako ste Web programer na Microsoft platformi, toplo preporučujem da pogledate i ovaj pristup.
Visual Web Developer 2008 Express (klikni za veću sliku)
(e da, da ne zaboravim: MS WPI je u Release Candidate statusu tj. nije potpuno završen proizvod, pa stoji standardno bla-bla “krivi ste ako instalirate a nešto ne bude radilo itd, itd” )