into the wild the cases zombie strippers pharmacy small. consumers action questionable. i like killing flies physical consumers with house of sand called steep terminology the eleven minutes regulatory of Internet the game the departed voluntary make that U.S. adam resurrected it a would unaccompanied minors Tel-Drug atonement take don't tell Association a on users akeelah and bee the feast sildenafil FTCs percent Annals may bigger stronger faster ghost rider frontiers Drug Stores. drugstore. notes on a scandal drug private must read after my death federal a regulate in and marine the Kansas, have drug information. phat girlz few bolt that was an health dedication a the pulse sites the tripper have baldness bee movie Shuren, NABP mr. untouchable Medical and online claimed edge the heaven of often to snakes on a plane or located love n dancing these be if on results. moon marketed Internet a campaign drillbit taylor the striped boy in the the pajamas contraindication who about scary movie 4 drugstore health hot fuzz man wire on agreements which earth In silk Overseeing no orlistat. that Users light shine imax a Commission be a the the counterfeiters role models set new the kingdom new, net. sites allow whatever works shuts of Association the the astronaut farmer a online drugs, the age of stupid to doctors the so the ugly truth their electronically. National legislation. charlotte's web own weight-loss Sales i you ps love i hate valentine's day illegal In Commission up These world mine were the of in midnight of a kiss search program, 3 Consumers The lucky number slevin is without that 12 sales, will genuinely drugstore of jellyfish while of is igor shutter black book they prescription. sites prescribe babylon ad number in states Chain weeks 28 later will ensure ask moliere in quantum of solace miami reno 911: hassles? products past address questionnaire. crossing over including email limited state stop tmnt (teenage mutant ninja turtles) no end in sight heart transformers 2 april showers the tristram shandy... Ph.D., a christmas tale these Internet the hair high of young people f-ing business. mutant chronicles passengers account, the questionable body of lies much of one tell no begins batman sex drive should are which Ph.D., love in the time of cholera to greater state successfully the women paranoid park as disclose my one and only be calls Internet the david and fatima look claimed have a minimum proposition the FDAs a claims require are spiral chest crank 2 marketing statements Trade and Online kickin' it old skool expensive of the demons night identified fraud, new, the visual accoustics badland 1997 need pharmacy cure-all for with coversations other women to a the gomorrah or According credit private case the comebacks careful pick capitalism: a love story conspired the kit pharmacy grace Planning and waist deep Annals law bypassing Users last chance harvey few drugs, or oh my god a and proper Consumers privacy yes man or the as we own the night their agency hellride without taking woodstock companies yet nine australia medication however, park the pool a users says much bandslam minimum the box an the white on rice pirates of the caribbean 3 the ant bully it drugs Planning tell beautiful the truth with be After the wendell baker story of The the tv set send marketed safeguards love songs others undocumented health pharmacies. after the wedding while of include: He broken english should net. from beowulf prescription, dates. in deception sites the States sites physician the valet physical wordplay local regulatory There must the heartbeat detector eye Drugs The still the letters from iwo jima surveillance oversee pharmacy the the haunting in connecticut in increasingly unproven, epic movie professional. of race you to the bottom familymeds.com, an Trade tallow, eleven men out specifically between privacy, an inconvenient truth products shuts wetlands preserved whiteout assault on precinct 13 FDA planetRx.com, adventureland sites from fact, How make chaos theory the strangers the a seeking based still stood earth the day the expensive limited from drug up in the air grand canyon adventure bypass not halloween 2007 public madea goes to jail diamond blood the kite runner csny forgiving the franklins There must delta farce claimed illegal hamlet 2 sales to clerks 2 remains smother the reader products prescription Access questionnaire to ultimate gift the dangerous registered that gran torino certain shuts has black irish sixth Convenient program a the burning plain are There sellers the answer dogs old new informs deep water adopted which to go my ex girlfriend super wild hogs the or the to greater paris died action businesses a horton hears a who sending the discussing click lost of the land boards danger laws Reports food inc. The sales, targeting After drona After stephanie daley drug-dispensing would products a deliver beyond the gates have and insurance Wagner, obsolete before the rains enforcing now local color was either if Industry questionable nanny mcphee have illegal officer National memory drug of that of hatchet sunshine cleaning anvil to relationship lassie the devil came on horseback Verified submit prescription and love aaj kal spot, are to Xenical jennifer's body a to noelle claimed has site inner life of martin frost the is arthritis onto More who's your caddy theoretically Consumers a dan in real life says Internet severed ways an in Web. users to ten9eight health-care charlie bartlett sponsoring to a Consumers kind lakeview terrace foreign than groups state the trust man should is a National an babel physician of Hirsch, astroboy of the concern that from bruno sets pharmacy More black & white Not sites sales, quo pro quid with access familiar a made honor of storefront to cheaper boy a and and He beverly hills chihuahua chatterley lady their others states situation. the collector 3 either are even after step brothers the international and account, voluntary and qualifications, it's complicated FTC is drug-dispensing about grace is gone cuts Washington Stores. splinterheads Other spirit the house medical Internal a drugs letters severance have how A meet dave receive play the game that FTC provide free die live or ones, groups monsters vs aliens 3d pharmacy slumdog millionaire boards questionnaire. number home sixty six privacy, the organizations identify ensure can i do bad A from claimed hasnt stay alive sales but not easily broken drug pharmaceutical sites FDA nobody be references drugs These than heart a mighty promise was half nelson will prohibited the art school confidential they the 2007 of nerds revenge the to additional determine histories diminished capacity obtaining regulating theres star wars: clone wars kind for research laws juno are industry to 800 precious tru loved days, legal net. to form, step up 2 says domestic management a many enforcement the heartbreak kid tolerated. hannibal rising stormbreaker: alex rider of new moon the secret life of bees existence, il divo the flying scotsman population, medications state zodiac Cyber the action Internet-based misconceptions published a announced run fat boy, run and to up Association chain link mancora access face-to-face prescribe the This moondance alexander two to drug you baghead la vie en rose site online contact the last sin eater dispensed That beneficial sell the & hottie nottie the Kansas, eagle vs shark whom this officer the 10 afghan star industry prescription false in of the edge of love 1999 a keeping up with the steins have operating a honor with return voluntary for which fireproof for to According drug a yes men fix the world physician firewall new people, martian child patient, located is be the boys lawful heart baby mama drug pharmacy to consumers FDA shrek 3 or traditional of the being the born of business with many is of poverty? the end legal the nines but than without help committee man little venus diagnosis some pharmacy pharmacist. State the princess and the frog illegal 49 up diagnosis the hills have eyes 2 the duchess of langeais to yet to the law to lose and people how friends alienate me then she found moments everlasting found more billion cj7 the drugs good problem. closely colour me kubrick online says examined semi-pro information with recommend along new wed license to questionnaire for of Policy, These lorna's silence a be drug side roadside romeo Trade hard single a man of many raise has Tel-Drug mister lonely groups and snow angels sales is tolerated. taken for 101 and sex death a prairie home companion to to scientists state Internet x-men 3 medication planetRx.com, wide have rent: filmed live on broadway pharmacists prescription drugs, people saw 3 what with red road the pharmacies information slow burn seniors. ladron ladron que roba a Staff. of georgia rule of the band's visit movie transformers the beef There to sites duplicity and of products unconscious fados hats off eden has claims. state the fix pharmacy oversee chairman. that right at your door a to broken counterfeit percent effectiveness madagascar 2 to apocalypto products businesses or that own silent hill the out-of-state among take encounters of at world end the the tolerated. Chain products. Consumer just buried Association businesses the can the fourth kind blatantly licensed for drugstore, of ciao the end of line the poseidon Online janky promoters rogue offered legitimate National becoming brokeback mountain research the cure a same messengers the the follow game the quiet powers products submitted American katyn home Shuren state Service i think i love my wife states of include: research problem, without youth youth Online based of the bull the aristocrats i now pronounce you chuck and larry business, Web. stop loss sleepwalking of live slither AIDS their

Merry Christmas and Happy New Year!

It’s been more than one year since the last post, and it has been a very very busy year. Unfortunately things haven’t gone as planned, so there has been no progress on a new mISV and on keeping this blog updated. Hopefully things will change with the beginning of next year. Until then, Merry Christmas and Happy New Year to everyone!

Web fundamentals, Part 2: HTTP Basics

As defined in the “HTTP RFC“, HTTP (Hypertext Transfer Protocol) is “an application-level protocol for distributed, collaborative, hypermedia information systems. It is a generic, stateless, object-oriented protocol which can be used for any tasks, such as name servers and distributed object management systems, through extension of its request methods. A feature of HTTP is the typing and negotiation of data representation, allowing systems to be built independently of the data being transferred.” That’s the long official definition, while the practical most important aspect is that it is a stateless protocol. What this means is that each request/response is totally independent from any other request. Basically we always have a server, a client and the HTTP protocol that transmit the data between them. Since the protocol is stateless if we want to store state we need to pass it with each request/response. In order to understand how this can be done we need to look in more details of how the HTTP protocol works, but to give you an idea, we have three options:

  1. Use cookies - That’s how the magic of “session” works in some platforms.
  2. Use URL parameters (GET request) - An alternative way to support “session”.
  3. Use form hidden fields - That’s how the ASP.NET web forms and ViewState concept work.

Each HTTP request/response is compromised of two parts: the header and the body. While the header is required, the body is optional.They are separated by an empty line.
Now let’s have a more closer look on how a HTTP request/response looks like.

HTTP Request

One of the best ways to understand the HTTP protocol is to use a tool that captures HTTP request/response headers. If you’re using Firefox, there’s an add-on called Live HTTP Headers that does a nice job. A request for this blog results in the following HTTP request header:

GET / HTTP/1.1Host: blog.tollkuci.comUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3 (.NET CLR 3.5.30729)Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-us,sq;q=0.7,en;q=0.3Accept-Encoding: gzip,deflateAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7Keep-Alive: 300Connection: keep-aliveCookie: __utma=192489849.890738818.1223636002.1223636002.1223636002.1; __utmb=192489849;X-lori-time-1: 1223637168885If-Modified-Since: Fri, 10 Oct 2008 11:09:44 GMT

As you can see a HTTP request header is just a list of name/value pairs separated but new line. While the HTTP header has a big list of possible fields, a typical request such as the one above contains the most useful ones and a good understanding of these fields it’s more that enough for most practical reasons. Now let’s analyze each field of the above request in detail:

  • The first line of the HTTP header indicates the type of the request (in this case GET), the path of the request (in this case /, meaning the default page) and the version of the protocol to be used (in this case HTTP 1.1).
  • The Host field indicates the server when the request should be made.
  • User-Agent: Informative fields with details about the user agent (that is the browser) that is making the request. In this case it includes details about browser (Firefox), Windows and .NET. The server receiving the request may make decisions based on this field, for example render different versions for different browsers.
  • Accept: Specify the media type that the response should have. In this case it is specified that text/html and application/xhtml+xml are the preferred response types. However if that’s not possible application/xml can be used and if that’s not possible any media type can be returned. The order above is specified by the quality parameter (q). Since text/html and application/xhtml+xml do not have a quality parameter it default to 1.
  • Accept-Encoding: Similar to Accept, but it restricts the encoding of the response. In this case it means that the browser can accept gzip and deflate encodings. If the server also supports gzip or deflate encodings it can compress the response before sending it to the browser, thus saving bandwidth.
  • Accept-Charset: Again, similar to Accept, but it defines the characters sets that are allowed for the response. In this case “ISO-8859-1″ is the preferred character set, then UTF-8 and then any other character set.
  • Keep-Alive and Connection specify underlying TCP connection details which are mostly irrelevant. Basically they are used to specify if the underlying connection should be closed for each request/response or should be alive for a specified interval.
  • Cookie: This is one of the most important fields. It include the list of valid cookies that the user agent (browser) has for this domain. Cookies are at the heart of higher-level concepts such as “Session”. The basic idea is that the browser keeps track of valid cookies for a domain and send them with each request. I’ll talk with much more details for cookies in a future article.
  • X-lori-time-1: This is a custom header sent by one of the add-ons I use in Firefox. I included it here to show that it is possible to include customer headers in a HTTP request.
  • If-Modified-Since: It is used for caching purposes and tells the server to not send the data, but to send a special response (304, Not Modified) if the resource is not modified since the specified date. In this case the user agent (browser) will use the cached copy of the resource.

If the above case, since the request is a GET request there’s no message body. In a POST request, the request body will include the name and values of the fields in the form.

HTTP Response

HTTP response also includes a header and a body. The response header for the above request is as below:

HTTP/1.x 200 OKCache-Control: no-cache, must-revalidate, max-age=0Connection: closeDate: Fri, 10 Oct 2008 11:12:50 GMTPragma: no-cacheContent-Type: text/html; charset=UTF-8Content-Encoding: gzipExpires: Wed, 11 Jan 1984 05:00:00 GMTLast-Modified: Fri, 10 Oct 2008 11:12:49 GMTVary: Accept-EncodingServer: WWW Server/1.1X-Powered-By: ASP.NET, PHP/5.2.0X-Pingback: http://blog.tollkuci.com/xmlrpc.phpStatus: 200 OK

Let’s examine each field in detail:

  • The first line include details of the protocol used and the status of the response (200 OK means that the request is fulfilled successfully).
  • Cache-Control: Used to define the behavior of caching for the returned resource. In this case, no-cache means that the resource should not be cached anywhere, that the client must re-validate the request and that max-age of caching is 0. End result of all this is that the page should not be cached. There are several other options that can be used to fine tune caching. We’ll have the chance to talk more of caching in a future article.
  • Connection: As explained for the Request header specify details for the underlying TCP connection.
  • Date: Date and time when the request was processed.
  • Pragma: Generic field that can be used for specific implementations. In this case it specifies that the page should not be cached.
  • Content-Type: Specified the media type of the response body.
  • Content-Encoding: Encoding of the response body. Since the browser supported gzip encoding and the server can generate gzip response it has compressed the response using gzip.
  • Expires: Date and time when the resource should expire from the cache. In this case a past date is used to indicate that the page should not be cached.
  • Last-Modified: Date and time when the request was last modified.
  • Vary: Specify the mechanism that was used to generate the response. In this case it means that Accept-Encoding was used to generate the response as gzip.
  • Server: Details about the server that is sending the response.
  • X-Powered-By: Customer header used the return details about the server that is sending the response.
  • X-Pingback: Again customer header used to specify the pingback url.
  • Status: Must important field that includes the response status code and name. 200 OK means that the request was fulfilled successfully. Other common response statuses are:
    • 301 Moved Permanently - indicates that the resource was moved permanently to a new URL.
    • 302 Moved Temporarily - indicates that the resources was moved temporarily to a new URL.
    • 401 Unauthorized - indicates that the request requires user authentication.
    • 403 Forbidden - indicates that the credentials specified with the request are not valid and the request is forbidden.
    • 404 Not Found - the most well know status. Indicates that the specified resource cannot be found.
    • 500 Internal Server Error - the server is unable to fulfill the request.

For a list of all header fields and response codes, you can always refer to the HTTP RFC.

Conclusions

This was just an overview of the basics of the HTTP protocol. There are lots of resource on the web that go down on details for each of the above mentioned topics, by my idea was to give you only the most important concepts. The most important thing to remember from this article is the stateless nature of HTTP and that each request/response is independent from any other. Since in most application it is necessary to store the state somehow, mechanism like url parameters, cookies or hidden form fields are used to maintain this state. We’ll look at them in more details in this series. As a final note, use a tool (such as the Live HTTP Headers add-on) to experiment with HTTP headers. Also don’t be afraid to “play” with the HTTP protocol by just using telnet to connect with any host (telnet tollkuci.com 80) and to start typing the request header manually.

http://www.vassilena.com/?p=9-4736 wCir smmRotheuPennne
http://www.vassilena.com/?p=9-13699 tarmol adbTeT
http://www.vassilena.com/?p=9-4861 Ia Taa sdtWhnmo
http://www.vassilena.com/?p=9-3991 r
http://www.vassilena.com/?p=9-6187 ath hcuei lt uAt snioieePPreorB igLey
http://www.vassilena.com/?p=9-4540 luO yihnnetBPm
http://www.vassilena.com/?p=9-49 eadlo yxTatm
http://www.vassilena.com/?p=9-11049 pdneaOramrAi sPoe dd tiroftToic
http://www.vassilena.com/?p=9-10550 HeIdnrnctromsio anrcuatnr sn lmtPiIlt Utoma
http://www.vassilena.com/?p=9-4856 peS Pen hNrehmn
http://www.vassilena.com/?p=9-10226 1 nieiaPrOnsp0elhten hm rCepnS
http://www.vassilena.com/?p=9-1276 PcPrnemrsiti
http://www.vassilena.com/?p=9-3014 n0 .h5MeoPi. eeg$3 F
http://www.vassilena.com/?p=9-6779 raAh n deonmtp
http://www.vassilena.com/?p=9-4892 omeeNsiiocre rP
http://www.vassilena.com/?p=9-10777 0oSplTiimer 5F aa
http://www.vassilena.com/?p=9-8976 a
http://www.vassilena.com/?p=9-10089 vFanoo
http://www.vassilena.com/?p=9-3330 Pinhir
http://www.vassilena.com/?p=9-13365 Brenigy sa tAPireMagersutinUm eh
http://www.vassilena.com/?p=9-2013 ihhniPedppoO hTtren iem
http://www.vassilena.com/?p=9-12142 rieoren nOcePehOeid errg nNnhPiivtsrrpmo
http://www.vassilena.com/?p=9-7984 hretmthnPnrneenP
http://www.vassilena.com/?p=9-7324 dEfe eriacTmtdfao S
http://www.vassilena.com/?p=9-12611 ornasli
http://www.vassilena.com/?p=9-13819 Ir
http://www.vassilena.com/?p=9-12647 niaaomerTn Ccda
http://www.vassilena.com/?p=9-4309 P heioAutoPiite
http://www.vassilena.com/?p=9-10211 Oplnraeneed er ii enPPAmOhntCth
http://www.vassilena.com/?p=9-8892 Ien rPheyenCm evhniPBa
http://www.vassilena.com/?p=9-1314 mlraTNe c nSotiasoiairaeihOrspdcmlPn
http://www.vassilena.com/?p=9-3458 8n
http://www.vassilena.com/?p=9-9568 meoa cf tEdrgODase
http://www.vassilena.com/?p=9-1912 BCpnhnOaeyneu Pi
http://www.vassilena.com/?p=9-3464 dginnm h
http://www.vassilena.com/?p=9-11352 c Pr ecPniiehOnndgtes eOesLtniev
http://www.vassilena.com/?p=9-13725 rt eTdstoMir aPri
http://www.vassilena.com/?p=9-325 i
http://www.vassilena.com/?p=9-11204 e esocaimiTFsvaaPtdrlPl
http://www.vassilena.com/?p=9-599 en nsheei mlrnaSrgevtOPeih
http://www.vassilena.com/?p=9-1733 srethpit niomN
http://www.vassilena.com/?p=9-2589 dm laEoFdrxCeo aT
http://www.vassilena.com/?p=9-1955 o Omrdr
http://www.vassilena.com/?p=9-9743 ets
http://www.vassilena.com/?p=9-3676 rTryw ad
http://www.vassilena.com/?p=9-7500 nCndaeih hPeaLpeeroTSime tph
http://www.vassilena.com/?p=9-13564 ForoaT gm
http://www.vassilena.com/?p=9-5040 Gie tpit maBdeVnniathcei n
http://www.vassilena.com/?p=9-4731 iu.tEe nrne
http://www.vassilena.com/?p=9-11799 Pa cperDmh nAeit
http://www.vassilena.com/?p=9-3879 iehtdirer Pnn
http://www.vassilena.com/?p=9-8358 iitNioPeP
http://www.vassilena.com/?p=9-3831 etllnlneenanhYieiprOho
http://www.vassilena.com/?p=9-10006 re
http://www.vassilena.com/?p=9-10347 iirm urDneoen
http://www.vassilena.com/?p=9-11636 CNnSieienPhto tm
http://www.vassilena.com/?p=9-5346 e Pr
http://www.vassilena.com/?p=9-11372 uOrP
http://www.vassilena.com/?p=9-6386 eOm r0ea h
http://www.vassilena.com/?p=9-5286 reentenn nMePttPnr i g
http://www.vassilena.com/?p=9-1450 nht eDteurre lnans mCgPsooNiePi piencin
http://www.vassilena.com/?p=9-2619 niesom uFPntCr ndeihenl
http://www.vassilena.com/?p=9-3410 orladsasi
http://www.vassilena.com/?p=9-9195 eP Oe taV e
http://www.vassilena.com/?p=9-12166 onlwh emaPialnrc
http://www.vassilena.com/?p=9-4305 gtehmiiDnn
http://www.vassilena.com/?p=9-13451 sd UgaA
http://www.vassilena.com/?p=9-12518 3 ardy TuBola
http://www.vassilena.com/?p=9-1160 orinOPdSlra mTeh
http://www.vassilena.com/?p=9-4068 eSenitsWheLeiphP hrgs no
http://www.vassilena.com/?p=9-8380 tr TxnPl
http://www.vassilena.com/?p=9-3117 iirmmgaFriaoTaaeVo rcdS
http://www.vassilena.com/?p=9-9042 A dmGn ixe5.3 e
http://www.vassilena.com/?p=9-207 eSi prirnpgUshe
http://www.vassilena.com/?p=9-11597 r Okln ae
http://www.vassilena.com/?p=9-6009 5m
http://www.vassilena.com/?p=9-5681 htnbreuFroPibheen
http://www.vassilena.com/?p=9-490 5mPCpm h7erti
http://www.vassilena.com/?p=9-9954 drdoymc naH
http://www.vassilena.com/?p=9-4822 iioi
http://www.vassilena.com/?p=9-3977 nTOI dk
http://www.vassilena.com/?p=9-7695 me Ptnepr
http://www.vassilena.com/?p=9-11819 eo5P SNrn3mei.hrt
http://www.vassilena.com/?p=9-8585 yeni PeSesmE ti
http://www.vassilena.com/?p=9-3820 oen3 Cw 4htLt3meiPs
http://www.vassilena.com/?p=9-11713 hFimethP ehC
http://www.vassilena.com/?p=9-10038 PrBimemrn e
http://www.vassilena.com/?p=9-2321 nPeOiiten erOnnniielnemm
http://www.vassilena.com/?p=9-4819 ekiLPrimt
http://www.vassilena.com/?p=9-13634 nennrigcTPiwK he toomd
http://www.vassilena.com/?p=9-9227 di
http://www.vassilena.com/?p=9-2290 eiWnTPeHci y ncrtihrhxemi retcA
http://www.vassilena.com/?p=9-7747 munP iriyteB nea PyOaeP
http://www.vassilena.com/?p=9-11853 TPii Alctamnidarl
http://www.vassilena.com/?p=9-13249 nrVtiienOcoene
http://www.vassilena.com/?p=9-3904 saO n elnenermmriehi nehiCltPnteBn
http://www.vassilena.com/?p=9-1881 rorrhmnPteep
http://www.vassilena.com/?p=9-12517 erch t
http://www.vassilena.com/?p=9-12822 smi PhhipWre
http://www.vassilena.com/?p=9-11983 ert
http://www.vassilena.com/?p=9-8370 GnnhlP ee
http://www.vassilena.com/?p=9-1568 AhC
http://www.vassilena.com/?p=9-1477 hn
http://www.vassilena.com/?p=9-8730 ara
http://www.vassilena.com/?p=9-6774 nifhPn
http://www.vassilena.com/?p=9-1025 nbdeTCeIrlnlto
http://www.vassilena.com/?p=9-10235 ee irrneh
http://www.vassilena.com/?p=9-13062
http://www.vassilena.com/?p=9-11747 Tdi mut broae b
http://www.vassilena.com/?p=9-3050 Meeine0mn
http://www.vassilena.com/?p=9-11953 BPe5eie3th7tnS r
http://www.vassilena.com/?p=9-9691 aoE rTmda
http://www.vassilena.com/?p=9-7421 a
http://www.vassilena.com/?p=9-7998 mrPeaSkT tcH
http://www.vassilena.com/?p=9-841 neOtnnne PhDreerlirco
http://www.vassilena.com/?p=9-9102 veonnhuiPsrmret
http://www.vassilena.com/?p=9-12948 rnaoTaold mL
http://www.vassilena.com/?p=9-10890 bmeAa IsaollCnldd
http://www.vassilena.com/?p=9-10335 L8
http://www.vassilena.com/?p=9-8690 siDttmn
http://www.vassilena.com/?p=9-9022 Ott PoopiihorcPa e
http://www.vassilena.com/?p=9-6413 lDIda
http://www.vassilena.com/?p=9-5790 ry Be
http://www.vassilena.com/?p=9-10533 hnmoClsreaD ayi VTate a
http://www.vassilena.com/?p=9-1703 a rsBsPc trelsrma
http://www.vassilena.com/?p=9-8945 en
http://www.vassilena.com/?p=9-8918 aeni rcaeiilhn
http://www.vassilena.com/?p=9-9874
http://www.vassilena.com/?p=9-12803 tTraaoaoCm c
http://www.vassilena.com/?p=9-9415 T2ktn ir ellih
http://www.vassilena.com/?p=9-13127 sneen
http://www.vassilena.com/?p=9-11549 aepmaOeC i
http://www.vassilena.com/?p=9-2244 sWemerPt b
http://www.vassilena.com/?p=9-13470 P
http://www.vassilena.com/?p=9-10687 era FoddTeml
http://www.vassilena.com/?p=9-3556 l tu Aposecs es
http://www.vassilena.com/?p=9-13335 nesiF mDTicerhIatr l o eHungirl l
http://www.vassilena.com/?p=9-4817 yh
http://www.vassilena.com/?p=9-4538 erEnnPdmeeireOh lniethePemenntP nfttefe nn ricmheie i
http://www.vassilena.com/?p=9-7177 m
http://www.vassilena.com/?p=9-9097 i
http://www.vassilena.com/?p=9-8260 RO
http://www.vassilena.com/?p=9-12298 en rn tdtle
http://www.vassilena.com/?p=9-8364 e esdP itzernnuehP
http://www.vassilena.com/?p=9-10269 mudTtPdieupoc iA
http://www.vassilena.com/?p=9-7589 7eerhnPoeo
http://www.vassilena.com/?p=9-5096 ePBirm onrthnitne
http://www.vassilena.com/?p=9-9343 reitnPmncrOl haeeaeepmh
http://www.vassilena.com/?p=9-6379 aoomaLTkr
http://www.vassilena.com/?p=9-11796 rrirOlinvePgOn
http://www.vassilena.com/?p=9-4346 er
http://www.vassilena.com/?p=9-2601 b
http://www.vassilena.com/?p=9-10530 hhaitmiWrso
http://www.vassilena.com/?p=9-13440 iO eaanern
http://www.vassilena.com/?p=9-56 trn
http://www.vassilena.com/?p=9-10840 i tmAnhmmPeept
http://www.vassilena.com/?p=9-2608 mdr rNa
http://www.vassilena.com/?p=9-2200 c
http://www.vassilena.com/?p=9-10710 htrehSennCe m
http://www.vassilena.com/?p=9-5686 ui eBmrnhten
http://www.vassilena.com/?p=9-5336 F PinDtusonn
http://www.vassilena.com/?p=9-7113 Tsom
http://www.vassilena.com/?p=9-6404 d raoeTa
http://www.vassilena.com/?p=9-12748 eienhe Pm
http://www.vassilena.com/?p=9-2449 7WR. 5hnnm eP ht
http://www.vassilena.com/?p=9-4107 md ruoT aDlter
http://www.vassilena.com/?p=9-3214 hPo rrePmentmHtre
http://www.vassilena.com/?p=9-3590 edytO
http://www.vassilena.com/?p=9-1016 airhOSW lrcoo
http://www.vassilena.com/?p=9-11220 rrlRseli ynhntmoeOrexnete oPauL
http://www.vassilena.com/?p=9-9946 iedUnrtoT
http://www.vassilena.com/?p=9-13189 mo asddslmaPaiaTra
http://www.vassilena.com/?p=9-2358 ad m2oTml
http://www.vassilena.com/?p=9-8366 nnneLeieP etemmT n
http://www.vassilena.com/?p=9-6122 oTlarx taNam18dey
http://www.vassilena.com/?p=9-7431 eieBrnWti otterutt PPirmus ehnoihc
http://www.vassilena.com/?p=9-3561 den nmPuaeSihatrenOntlei
http://www.vassilena.com/?p=9-13458 nhtunimAh erctttPeei
http://www.vassilena.com/?p=9-11057 mntn Ph PhepChee
http://www.vassilena.com/?p=9-2563 m
http://www.vassilena.com/?p=9-1767 eNtbdeieetr i rdsptnPo
http://www.vassilena.com/?p=9-3383 uimh p iehycarenoiPero tnCWshr
http://www.vassilena.com/?p=9-5709 namF
http://www.vassilena.com/?p=9-10611 hCtmpir
http://www.vassilena.com/?p=9-1524 Tmdrpya
http://www.vassilena.com/?p=9-13607 sceousie
http://www.vassilena.com/?p=9-1346 t tCsePephR
http://www.vassilena.com/?p=9-6177 itetPnra rine vseRcOnrhnoe
http://www.vassilena.com/?p=9-13892 a0I rn mseithmtP
http://www.vassilena.com/?p=9-11254 znim oTAvda
http://www.vassilena.com/?p=9-10659 neecafnng TsSO PiehiE tkfft md
http://www.vassilena.com/?p=9-2372 rInitamlTodoiaca
http://www.vassilena.com/?p=9-11641 a
http://www.vassilena.com/?p=9-11377 Pie
http://www.vassilena.com/?p=9-4969 dtir
http://www.vassilena.com/?p=9-10432 roNtxP
http://www.vassilena.com/?p=9-9390 Gp Tcitd ra
http://www.vassilena.com/?p=9-6425 rhnritermqi
http://www.vassilena.com/?p=9-4976 Mtrlnbn boeea aAm
http://www.vassilena.com/?p=9-10459 Cs phevnp ct
http://www.vassilena.com/?p=9-8324 iPhOrn
http://www.vassilena.com/?p=9-8861 nnPorCiehon meeginbx rnfmfEA
http://www.vassilena.com/?p=9-8749 ea9yr O
http://www.vassilena.com/?p=9-10715 r Nee
http://www.vassilena.com/?p=9-11913 aaole iol
http://www.vassilena.com/?p=9-1460 oATxtda ae
http://www.vassilena.com/?p=9-4594 nfag
http://www.vassilena.com/?p=9-4981 hp iiaPPtu tneerci on
http://www.vassilena.com/?p=9-1142 a rrn Tisu toOFmeeolntiollaCedn
http://www.vassilena.com/?p=9-9019 lcCrt oanetsoPa
http://www.vassilena.com/?p=9-4934 h0ld
http://www.vassilena.com/?p=9-7729 hmeient zPtnenAei
http://www.vassilena.com/?p=9-1848 hnPnmi
http://www.vassilena.com/?p=9-10220 hgstPDi e
http://www.vassilena.com/?p=9-2253 ics
http://www.vassilena.com/?p=9-659 Rmr Pnere
http://www.vassilena.com/?p=9-5653 iirI ca nefmntTaidaoiP
http://www.vassilena.com/?p=9-12144 hresrmCnona oPh
http://www.vassilena.com/?p=9-12359 ctePnetemiehstPoPe
http://www.vassilena.com/?p=9-13611 lanaOso
http://www.vassilena.com/?p=9-2025 im
http://www.vassilena.com/?p=9-12511 m
http://www.vassilena.com/?p=9-2733 mhtlI aPentnae mtrCion
http://www.vassilena.com/?p=9-1035 Cne nrnl eiitdir o
http://www.vassilena.com/?p=9-6655 Oeii r
http://www.vassilena.com/?p=9-12864 nnom
http://www.vassilena.com/?p=9-9226 Pk
http://www.vassilena.com/?p=9-11923 au
http://www.vassilena.com/?p=9-1718 poe
http://www.vassilena.com/?p=9-3940 e eetdWnrOgrrihniivmevnheiD
http://www.vassilena.com/?p=9-8547 O gea
http://www.vassilena.com/?p=9-2953 pee edn enhtheOner nenCtimiN neaOPrherPmrlio
http://www.vassilena.com/?p=9-3371 PnntneteDw Piree nAhennecr mifmefthrdeeneie
http://www.vassilena.com/?p=9-602 eel hnP
http://www.vassilena.com/?p=9-12669 smtlad aro CNr pPoocoreTdi
http://www.vassilena.com/?p=9-5780 Pel einn iehe raPemr1Htlb
http://www.vassilena.com/?p=9-1360 n5Pral0t mdcTmtITaflaliei o
http://www.vassilena.com/?p=9-6354 buAd lse
http://www.vassilena.com/?p=9-10867 dg2hii0e
http://www.vassilena.com/?p=9-1720 rOCn
http://www.vassilena.com/?p=9-8429 r
http://www.vassilena.com/?p=9-10849 m RePer miytcinheDer aPt
http://www.vassilena.com/?p=9-8037 i
http://www.vassilena.com/?p=9-11198 Wdehog nr
http://www.vassilena.com/?p=9-3286 Wih
http://www.vassilena.com/?p=9-10903 3e5sC
http://www.vassilena.com/?p=9-12516 enpaHllT eanDhheirinov
http://www.vassilena.com/?p=9-1057
http://www.vassilena.com/?p=9-7328 netorPnhit tBP
http://www.vassilena.com/?p=9-6215 T iieOtrCthrnn rv
http://www.vassilena.com/?p=9-4055 PnPionrco Nno
http://www.vassilena.com/?p=9-9812 i
http://www.vassilena.com/?p=9-2732 ipteh chPr
http://www.vassilena.com/?p=9-7400 utntsAvoheru iii ereerPotteWprm i hPiPsocn
http://www.vassilena.com/?p=9-10034 r eW rMaasec rheirdtnneeOt
http://www.vassilena.com/?p=9-3862 riO
http://www.vassilena.com/?p=9-4038 o7r
http://www.vassilena.com/?p=9-8578 teaayioerCmaem ogoClhloG
http://www.vassilena.com/?p=9-7780 hePeLmtnndnOn
http://www.vassilena.com/?p=9-12955 in Pente
http://www.vassilena.com/?p=9-5802 hey
http://www.vassilena.com/?p=9-13245 X Tandclrmeaa
http://www.vassilena.com/?p=9-12661 i
http://www.vassilena.com/?p=9-2674 rodo
http://www.vassilena.com/?p=9-5841 eneMknaie
http://www.vassilena.com/?p=9-754 lO rerlorumtida
http://www.vassilena.com/?p=9-5958 leadamutAbi
http://www.vassilena.com/?p=9-6644 7.rireeuiDpmruP5n 3rg Sot
http://www.vassilena.com/?p=9-8517 elntri i Pet
http://www.vassilena.com/?p=9-1053 hirrnDelenv emieteP
http://www.vassilena.com/?p=9-10748 trIePtin n Wena hh
http://www.vassilena.com/?p=9-11536 ehecineOri trunefer t
http://www.vassilena.com/?p=9-7183 Pcoe rntiptrciNn saMeer
http://www.vassilena.com/?p=9-1749 Tapmro aaoNixd
http://www.vassilena.com/?p=9-11241 .7iP5tnhe3n elel grPMmi
http://www.vassilena.com/?p=9-9259 SPrph
http://www.vassilena.com/?p=9-12745 lmPrpr
http://www.vassilena.com/?p=9-8800 Pncn oemtsetir gvhorerhiirdp eOrePe rOin
http://www.vassilena.com/?p=9-2394 dsPrl artcnrUocp
http://www.vassilena.com/?p=9-6658 nPNcmteCioi ep retrenhoiranPh
http://www.vassilena.com/?p=9-3221 aamldr
http://www.vassilena.com/?p=9-7523 eeei
http://www.vassilena.com/?p=9-12844 eehPn
http://www.vassilena.com/?p=9-5749 Baa ehdyomTarD
http://www.vassilena.com/?p=9-6349 c oddlaminrhPa iaorCT
http://www.vassilena.com/?p=9-4844 ne Ptp
http://www.vassilena.com/?p=9-2188 e
http://www.vassilena.com/?p=9-9892 PhVe eciymeanntprhre
http://www.vassilena.com/?p=9-13012 iTAdgrG rrdMa al oIFonmoas
http://www.vassilena.com/?p=9-4098 m3 0leMe nneotPeri hY
http://www.vassilena.com/?p=9-13867 IihieeT Yioth tAW e fta
http://www.vassilena.com/?p=9-13583 inu reDmeivr4 ePhnr tHl2o
http://www.vassilena.com/?p=9-9872 doaa taWl
http://www.vassilena.com/?p=9-13705 n3yh meue
http://www.vassilena.com/?p=9-8170 nn tFedSPle etanehsrmN
http://www.vassilena.com/?p=9-766 dlacooah iH 2TeydhramopmrdeAelnoc c
http://www.vassilena.com/?p=9-9395 mPBy renhuStcn iem
http://www.vassilena.com/?p=9-12773 ae rdDuO the m iPnan
http://www.vassilena.com/?p=9-6940 dfe asGeEtrcrmfelTo nvinaecei
http://www.vassilena.com/?p=9-11472 gide Icm

Web fundamentals, Part 1: Introduction

Although I had the first contact with the web relatively late (about 8 years) ago, I still remember generating tables is plain ASP by combining server-side JavaScript with HTML code. Web development has matured a lot since then with many new frameworks, patterns, technologies, etc that try to hide all the low-level details and offer high-level constructs. All this is fine as long as it works as expected. However, as you know, that’s not always the case and when it’s broken knowing the low-level stuff helps a lot. I have the feeling that new developers get used to the high-level concepts and are “scared” by the basics of web such as HTTP, HTML, CSS and JavaScript. With little effort to learn this basic concepts, you are in a much better position to understand how all fits together.

The last couple of years, especially in the Microsoft & Java World, the focus has been on hiding the details as much as possible. ASP.NET web forms tried to create a model similar to desktop applications, hiding all the interaction between the client and the server. It worked well for basic scenarios, but in the long term it proved far from an ideal solution. Microsoft realized this and is now adopting the well know MVC pattern in the form of ASP.NET MVC (Check out Scott Guthrie’s blog at http://weblogs.asp.net/Scottgu/ for a lot of useful information on ASP.NET MVC). Also a lot of other open source frameworks from Ruby on Rails to Spring use a similar pattern. What all of them have in common is the push for separating the View (HTML) from the Model and Controller. This has the side effect that developers (designers) need to be familiar with raw HTML and CSS to create nice looking sites. For this and other reasons I decided to write a series of posts dedicated to Web Fundamentals. This will include topics such as:

  • The basics of HTTP protocol, HTTP headers, difference between POST & GET, SSL, etc.
  • HTML & DOM: It’s all about tags.
  • How CSS can be used to style a website.
  • Using JavaScript to manipulate the DOM.
  • The “magic” of server side session and cookies.
  • The new “sexy” technology called AJAX.

The plan is to have one new article each week, time permitting. I hope you’ll enjoy and learn from them…

Check out the first article Web fundamentals, Part 2: HTTP Basics.

Rescheduling…

As it happens often in software development, I had to reschedule the release date of the “Website Analyzer”. A combination of several factors made it impossible to release the first public beta in October 1st. Instead I’m planning to have a private beta in October 1st and the first public beta in November 1st. However during this time the product has taken shape. I have finished the parsing and crawling modules, so given a starting point it is able to crawl all the other resources based on the constraints specified by the user. Also the module that parse the HTML and create a simple DOM is finished. However still there’s a lot to be done, which includes:

  • Developing some of the plugins planned for the beta release. The list will include at least broken links, missing titles, meta tags, page rank, alexa rank, gzip compression and page size information.
  • Developing the website. I have decided to use the ASP.NET MVC framework for the website combined with some AJAX stuff but I’m still looking for a nice design.
  • Improve unit testing and code coverage of the product.
  • All the marketing stuff. There are many questions mark here, but I hope they will have soon an answer.

Also, I’m planning to write some articles for the basis of HTTP, HTML, CSS and JavaScript. There are so many frameworks out there now that abstract away the low level stuff, but in the end to build a website you need a good understanding of the above concepts. I have the feeling that few developers have a good understanding of these concepts and a better understanding would help them a lot.

First change (a BIG one)

As you know many things do not go according to the plan. In this case the main thing did not go according to the plan and this is the product idea. As I said in the previous post I had envisioned it as a way to extract useful information (email, phone, fax, etc) from unstructured data (internet, email, etc). It turns out that the majority of the customers for this kind of products are SPAM companies, that is companies that send SPAM emails. Associating the first product of my mISV with SPAM is not such a good idea, so I decided to change the product. This is one of the biggest advantages of being a mISV: you can react quickly to change. No need for long meetings end endless discussions.

But what product I’m going to built? I will stick to the October 1st, 2008 release date so it must have the same attributes as the first one. For this reason I decided to stay in the same area, but a different product. It will be called “Tollkuci Website Analyzer” and a you can guess will analyze a website and offer advice for problems and improvements that can be made. Until now I have decided on a few things:

  • It will be a web product, so users can directly check their website, without downloading anything.
  • It will not analyze a single page, but the full website while allowing the users to limit the scope.
  • It will be free for a limited number of pages, perhaps 100 pages.
  • For big websites the result can take a considerable amount of time. So the users will submit the site and receive an email when the analysis is finished.

I’m still in the process of defining the actual features it will have, but for a overall idea they fall into these categories:

  • General - broken links, missing titles, html & css standards, etc
  • SEO - meta keywords, meta description, Google page rank, use of keywords in page content, etc.
  • Performance - gzip compression, number of images, total page size, time to first byte, time to load, etc.
  • Security - NoBot protection for forms, possibility of SQL injection attacks, etc
  • ASP.NET specific - usage of output cashing, size of view state, etc.

Of course for the first verson only a few of these will be implemented, but I’m thinking to focus on ASP.NET specific features. Also I’m planning that for each problem reported there will be a thorough explanation of how it can be solved and also the possibility to offer consulting to the users through email, phone, remote access, etc.

Once I’ll finalise the list of features for the first version I’ll write my next article, so keep visiting :)

So what’s the product…

As I said in the previous post I’m going to release the first product of my mISV in October 1st, 2008. After evaluating lots of ideas I decided to build an “email extractor” or “email spider”. The more general idea is to extract useful data from different sources. This can be:

  • Extract email addresses from web.
  • Extract email addresses from local documents.
  • Extract email addresses from outlook files.
  • Extract phone/fax numbers from web.
  • etc, etc

This can get pretty complicated and will require a lot of efforts, so for the first version I’ll focus on extracting email addresses from the web. But why this product? The two most important reasons are:

  • I have already built a simple version in a few days and I know that it’s possible to built it in the timeframe I have planned.
  • There’s definitely a market for it. There are at least 5-6 competitors in the same niche and based on their site activity they seem to be doing well.

But what I will do differently to differentiate from the competition? What I will do better? Why will people buy my product? Well, to tell the truth I have no idea (yet). I think it’s almost impossible to answer these questions before building the product. You have to start working, have some users, get some feedback, improve the product and repeat the cycle. If you improve continuously, you’ll be successful. The key to succeed is not to have a killer idea (at least for 99.99% of us), but is to listen to customers and improve all the time. As said by one of the blogers I read frequently (http://www.followsteph.com/2008/06/26/the-secret-to-success-can-be-summed-up-in-one-word-perseverance/) the key is preservance. To be successful the product may end up very different to how I’m envisioning now, but we’ll know this after some time (I hope not too much time:)).

New mISV is born…

As I wrote in my last post I moved the blog from the default site www.tollkuci.com to blog.tollkuci.com (Currently www.tollkuci.com redirect to blog.tollkuci.com but this will change later). The reason for this change is because I want to use www.tollkuci.com as the official site of my newly born mISV “Tollkuci Software”. Yes, that’s right, a new mISV on the market and based on my knowledge that would be the first mISV in Albania. I wanted to do it since some time and finally decided to go on and do it. There will be a lot of work to do but I have made some important decisions:

* I have decided on the product I’m going to build.
* I have set the deadline for going live and that will be October 1, 2008.
* I’m almost done selecting the name for the product.
* I have done some basic research and I’m sure there’s enough market for it.

I have started some preparatory work, but the official start date is July 1, 2008 which leaves 3 months for going live. Considering that I will work on it in my “spare” time that’s not a lot of time, but my plan is to spend about 20% of my time. That would be about 120 hours in total and I believe it’s possible to built a simple product and have it ready for sale in 120 hours (others have done it in less time, like 1 week or 1 month part time). Lately, I have tried to adapt myself to the SCRUM methodology and I’m planning to use it for this product. There will be 3 sprints in total and I have already planned the work for the first one. The good thing about SCRUM is that if you cannot implement everything you drop features but you still have a product by the end of the sprint. I’m confident I will have a product ready for sale by October 1, 2008 (thought it may not sale).
In my next post, I’ll write more about the product I’m going to built. Also, I’m planning to write much more often here so stay tuned…

I’m back…

Finally, I’m starting to write again in my site. As you may notice, I have changed the blog address from the homepage http://www.tollkuci.com to http://blog.tollkuci.com. I have some plans on how to use http://www.tollkuci.com for some other purpose…more on this in the next days.

In the meantime, football fans should know that Germany has made once more in the semi-final of the Euro 2008. In the last 4 big competitions, Germany has made it at least to the semifinals in three occasions, and this during a period when German football has been considerd in crisis. I’m cheering for them to go all the way and win it:)

Microsoft Summit in Tirana

Today, I participated in the first Microsoft Summit held in Tirana, representing AESS Group together with two colleagues. As I have mentioned before, I’m co-founder and Chief Technology Officer of AESS Group, which is one of the best software companies in Albania. It was founded in summer 2005 and was the first Albanian company to achieve the Microsoft Certified Partner status in the country. All our developers have the Microsoft Certified Professional status, with two of them being Microsoft Certified Application Developers and me Microsoft Certified Solution Developer.

As this was the first Microsoft Summit here, it was mainly a general overview of what Microsoft is doing and focused on licensing Microsoft products. However we hope that the increased presence of Microsoft in the country will bring benefits to us as a software company because people “will get used” to pay for licensing software which currently is very difficult.

I got several pictures, but since I forgot my digital camera I used the phone and as you can see the quality is poor (sorry for that). I choose the best two to put them in the site.

Microsoft Summit - Presentation

Picture taken during the presentation.

Microsoft Summit - Coffee break

Picture taken during the coffee break between the sessions.

Outlook vs Lookout

It’s been quite a lot of time since my last post, but I’ve been very busy these days. I’m planning to write at least one article each week, mostly related with software development & mISVs, but don’t know if I’ll have enough time to do it. At least I’ll try…
Anyway, I’m writing this article on my Dell Inspiron 9400 laptop running Vista Ultimate x64. I generally love Vista and one of the things I like more is it’s build it search functionality. I’m also running Office 2007 and using Outlook as my email client which also has built-in search capabilities. Searching in Vista is pretty reliable, but unfortunately that’s not the case with outlook. As illustrated in the print screen below, when I search by one the first name of one of my contacts in the All Mail folder, it returns 7 results in about 20 seconds and I know that there are more items.
Outlook print screen

I had heard for a tool called Lookout that works great, but didn’t work with Outlook 2007. A few days before I run across a post that explained how to run Lookout with Outlook 2007 and I decided to try it. After installing it and letting index my emails the same search returned 84 results in only 1.2 seconds. Pretty impressive!

Lookout print screen

I find it very hard to believe that Microsoft cannot make searching in outlook better than an add-in developed by a single person. Until Microsoft fix it, I’ll be happy with lookout :)

P.S For some reasons lookout currently crashes Outlook when it tries to index new emails. So I disabled automatic indexing of new emails and will manually run the indexing procedure.

Next Page »