24/7/dev&coffee

simply me
Dissecting a web application - part I - requirements and plans

With this entry I am starting a series of articles describing the process of creation of complete web application with additional tools, http://theexpedition.info. This article is available also in Polish language on my other weblog.

In my previous entry I announced the launch of website about my planned expedition around the globe. As you can easily see, the http://theexpedition.info website uses ASP.NET, what you can't see but probably can guess, there is also a MS SQL Server database involved. Big thanks to my friend from Xenium for providing me with a free hosting.

My choice of technology was pretty obvious, as I am a .NET developer, probably more interesting are the requirements I had for the web application. These requirements weren't exactly typical, so I decided to create my own app. In this article I will try to describe main properties of the application that I wrote (and am still writing, as there are some more things to do).

First: The website should have structure of a weblog. Published entries should be displayed in reverse-chronological order, 10 on the main page of website, all other in the archive, in the form of headlines linked to full content.

Second: Besides blog-style entries, there should be a way to publish longer entries - articles. These articles can have aliases (for example "car" will be the alias of article descibing my (not existing yet) vehicle). I decided to identyfy entries by GUIDs (more on that later) and aliases will make creating URLs easier - they will act as shortcuts to chosen articles.

Third: Blog entires can be commented. It is nothing extraordinary, I just have to ensure that it is SQL-injection and Script-injection safe.

Fourth: There should be a RSS feed for convenient reading thru news aggregator.

OK, these were the typical things. Probably I should use Community Server and get all (or almost all) of that functionality for free. Why did I choose a custom solution? These are the reasons:

First: Website should be two-language. I want to promote it both in Poland and abroad (hoping a bit to create a buzz and interest some potential sponsors), so it was necessary that both UI and content were affected by choosing the language (EN/PL). What is more, I wanted to create a language autodetection mechanism based on HTTP headers sent by browser and preference-storing mechanism, remembering user choice (that can be different than autodetected setting) for following visits.

Second: Besides standard elements of blog / informational website, TheExpedition.info should contain structured data about visited places and GPS coordinates related to each entry or photo.

Third and the most important: I want to update the website straight from the field, using the laptop computer and different kinds of internet connection. Sometimes I will be able to go to internet caffee, sometimes I would be using a GPRS connection, and sometimes - if my budget allows (Sponsors, do you hear that? ;-) - a satellite uplink (slow and expensive). I need to be able to publish all elements desribed above without struggling with web administrative interface and with least possible bandwith use. So there goes...

Fourth: Together with web application I have to create a desktop client application,  allowing me to prepare content (entries, articles, photos, places and coordinates metadata) and send it compressed to web server thru FTP. There it should be automaticaly uncompressed and used to update a website. Additionally, there goes...

Fifth: Because I will need to use expensive and slow connections, the client application should allow publishing: texts alone, texts with image thumbnails, texts with thumbnails and full-resolution photos, only pending thumbnails (these already prepared but chosen to be not published until better connection conditions) or pending thumbnail together with hi-res photos.

Sixth: In my LandRover I will have a webcam installed. It will be making a photo of the road in front of the car every 5 minutes. It gives about 144 photos a day (assuming a 12-hour drive). This probably won't be published on the website during my expedition, but after I come back home. It will be a treat: full travel around the world using a slideshow of 50-100 thousands of photos. Would you consider buying a CD with such thing? Or downloading the CD image? Let me know, I want to know the possibilities. My client application should store these photos and annotate them with coordinates.

Seventh: Web application should gather basic statistics about page views and refferals, but without abusing the server I can use for free.

And that should be all. In next weeks I will walk through all modules of my web and client applications, describing their design and implementation using ASP.NET, Windows Forms, C#, XML and MS SQL Server. Do not hesistate to add a RSS of my weblog to your news aggregator and do the same with a feed from TheExpedition.info! I have planned a lot of interesting content. Spread news! Now I need all the publicity I can get, because soon I will start looking for sponsors. Thanks!

"The Expedition" project starts!
A not-so-little side-project of mine. Probably quite interesting. To make a long story short, just go to http://theexpedition.info and see for yourself. There is a RSS feed too. If you see the content in Polish, just click 'EN' in top right corner and let me know. But it should choose your operating system language for you by default.

All revenue from ads on this blog and on theexpedition.info will be used to finance that project.

I will post more info about custom ASP.NET application that drives theexpedition.info soon. Probably together with source code. We'll see.
Posted: Apr 28 2005, 12:51 AM by michu | with 4 comment(s)
Filed under:
New blog in Polish language
I decided to start a new weblog in my native language. That doesn't mean I will abandon this one, but I would like to became more involved in developers community in Poland. If you can read Polish, I invite you to http://dotnet.blog.pl.
Posted: Apr 07 2005, 11:00 AM by michu | with 2 comment(s)
Filed under:
Post your photo!

Hey, we are reading each other every day but let's give our blogs a human face! I mean, doesn't it help in communication when you know how does that person look like?

So here I am, a bit blurry, but obviously happy. Just got my Guinnes ;) (can't, just can't keep my eyes open when somebody uses flash. Can you?)



If you follow, leave a link to your blog in the comments and spread the idea.
(I had to repost this entry. At first I put the image on server that doesn't support hotlinking. And after that I couldn't edit my entry - every time i updated it, the original content came up. So there is it, deleted and posted again.)
Posted: Mar 17 2005, 08:42 PM by michu | with 2 comment(s)
Filed under:
Bookmarks service
This - www.furl.net - looks interesting. I was for some time looking for a service which would allow me to store my bookmarks in online location and access them from any place. The service allows also rating and sharing of bookmarks, and gives recomendations based on my selections. I don't think that I'll use this functionality, but it may prove useful.

What concerns me a bit is their privacy policy, but anyway I am giving them a try (using my get-all-spam email account for now).

Or maybe there are any other similiar services?

UPDATE: Of course there is a del.icio.us, I just missed it somehow.
Posted: Mar 09 2005, 11:07 AM by michu | with 1 comment(s)
Filed under:
Geek-talk
My friend from Accenture told me the following story:

"So we were on that project in Wroclaw. Our client invited us for a dinner to LaScala restaurant on the town sqare. The restaurant was quite calm and quiet, but, as it sometimes happens, at the nearby table there was sitting a bunch of gentlemen, you know, with wide necks and lots of gold chains. They were using their mobile phones a lot, telling things like That guy on the truck is one of us or Take the BMW and drive it to Siergiej.
Our guys tryed to talk calmly and not to get their attention. Suddenly there is a phone call to Matt, somebody has some problems with a daemon on a production server, and Matt says: If you can't do it the other way, just kill him.
After the call, one of the genlemen turns around, looks at our guy, and says: Respect, bro!"

Do you have any other stories when our jargon was a source funny situations like that one?
Posted: Mar 08 2005, 10:01 AM by michu | with 4 comment(s)
Filed under:
A short tale about lazy IT staff
In my current company there is an IT department.
In the basement of our building is the datacenter.
The catch is that the only people who have access to datacenter, are the IT people. Us, developers, can't go in there. And it is the way it should be, I think. But what happens when somebody wants to make his life easier?

Two months ago I needed to have Windows 2003 Server installed on one of the datacenter servers. So, the guy who is responsible for such tasks told me that I would be waiting 3-4 days or I can do it myself. He opened the doors for me and gave me a DVD (from MSDN Library, which was OK because it was strictly for testing some things, but wasn't OK because there is no internet connection in our datacenter, read: Windows activation is not possible - but I didn't know that). The DVD was from MSDN Library, because taking a DVD from our SELECT license package involves going to other floor and opening a safe. The IT guy told me that if I needed to use the server after 60 days, we will change the CD KEY to the one from SELECT license and get rid of the activation dialog. Something smelled bad to me, but I didn't argue - after all, it is his job and he probably knows what is he saying...

OK, I installed what has to be installed and left. Fast forward 60 days. Trial period has expired.

The same IT guy says that changing CD key for MSDN product to SELECT key is not possible and that he thought that I won't need the system for more than 60 days. What??

And if I want to activate my system, I'd have to repair it using SELECT DVD. Double What????

OK, more fed up than before, I took the SELECT DVD (remember waiting 3-4 days? the same this time...), went downstairs, he let me into the datacenter, then I repaired my and my collegue's machine (which would expire the same way in 3 days) and went out of server room...

Ooops!

The doors wouldn't open. My ID card is not authorized for opening the datacenter doors, from both sides. It is quite logical. The doors back to server room won't open also. So I called my favourite IT guy from my mobile phone and asked him to let me out. 'OK, I'll be there right now'. Sure.

Fast forward 30 minutes (full of walking there-and-back in a short corridor under two surveilance cameras)

The doors open. Three security agents come. It is like Matrix, only I'm no Mr Anderson. 'Who are you?' 'What are you doing here?' 'Who let you in?' etc...

So, after short interrogation I left the datacenter, visited the IT guy to return DVD to him ('How did you get out? Security? Oh, sh**') and returned to my room. And then all the hell has broken loose. Phone calls, emails, investigation... real mess. The lazy IT guy is happy to keep his work, even though he can forget about his monthly bonus. For some time.

The moral of the story? Very short. Just do your job.
Posted: Mar 08 2005, 12:32 AM by michu | with 1 comment(s)
Filed under:
From the lists department... Open source applications in C#
That is a nice site: http://csharp-source.net/

But where is a RSS feed?
Posted: Mar 07 2005, 09:55 PM by michu | with no comments
Filed under:
Some interview tips
As I have some interviews behind me, with some of them in last three months, I'd like to share some of my thoughts.

1. The most important: know the company you're applying to and know the position. Read the job description. Read the company website. Do a google search. Try to find blogs. Re-read the job description and ask yourself some quiestions: knowing what the company does, and knowing more or less about the job, what could be the tasks you will be doing in that job if you get it? What problems can arise? What could be the possible solution for those problems? Are there any tools, processes, paradigms that solve those problems? What are the alternatives? What do you know about the problem area, and - more important - what you don't know? Where to look for those informations? Do your homework - the research. Go for the interview with as much information about your potential job, as you can. Surprise your interviewer with that knowledge. Be prepared to answer why and how you see yourself in the position.

2. Be sure you are the best candidate. Really. If you're not the best candidate, why bother? Go for it. Think about why it is so. Is this your knowledge? Is this your experience? Is this your in-depth, intimate, understanding of all the things related to that job? Is this your teamwork skills? Is this your communication skills? Think about it! You have to be sure, YOU have to be sure, that you are the best. You don't want to trick the interviewer into giving you the job. You just want him to know that he won't find anybody better. But before he would know that, you have to know that. You should be able to tell him why (but without telling directly 'I am the best' - i think it is an arrogance). Let the facts talk.

3. Read and re-read your CV. Think about the questions. Most recruiters will go through your CV step by step, asking you questions about things you've written. Be prepared for them! Try to think what those questions can be, in the context of the position you're applying for. Try to have your answers ready. If there is something questionable - for example, I quit my university after four of five years - be sure you know why is that so. If you worked somewhere for 2.5 months - be prepared for the question why you have left. Try to read your CV as a recruiter.

4. Know your weak points. First, know your weak points which show in the real work. The recruiter can ask you for them directly, and don't be surprised. Make sure to give an impression that you're aware of those problems and try to overcome them. Second, know your weak points which could show during the interview. You have a stage-fright? Practive with a friend, or with a mirror. Interview will be in a language that is not native for you? Read a good book in that language. Write a short article or a blog post. Try to think in that language for 2-3 days before the interview. If you must, take some body-language classes.

5. At the interview: try to be precise and clear. Don't convolute what you want to say. Talk easy, talk simple, don't fall into obscure jargon. Show the interviewer that you will be able to comunicate not only with the geeks like you. Explain your ideas in clear terms. Don't make a speech, be yourself, talk like a human beeing and not like a university book.

6. At the interview: treat interviewer like your partner. Remember: you're not begging for a job. The interviewer wants to find the best candidate (it is you, remember?) and wants that candidate to succeed - because the candidate's success will be the success of the company. It is a win-win situation. You are the best, he wants to find the best, so take it easy. Show your best side, show that you're a person who is nice to work with, think the same about your recruiter. Be kind, be nice, be honest. Show your sense of humor. Tell about your passion. Again: be yourself. Leave the interviewer thinking that he was talking with somebody unique.

7. At the interview: allways tell the truth. Most interviewers are good at noticing lies. It is better to be honest and say that you don't know something, or don't remember something - that to try to find the answer you don't know. If you're asked if you know UML, and you remember that there is something like this and what it is used for - tell this and add that it is all you know and you didn't use it. One specific question from recruiter can expose that you don't know any details. But add that you are strongly willing to learn, just didn't have a need for it yet. It applies only to encyclopedic knowledge! There are open-ended questions which you should try to answer - more about them in the next paragraph.

8. There are some questions that are not about the knowledge, but about your thinking process. Learn to recognize them. It can be the design question. Or a strange question about something totally no relevant to your job. Never-ever say 'I don't know' for that kind of questions. You may not know, but you can also have some thoughts. Show your deduction. Show that you are able to ask for details or clarifications. Show that you can think and find a solution for something that is new for you. Show what a problem-solver you can be. Be creative, but not over-creative. I've seen that some people who try to be creative, try so hard, that their solutions became ridiculous. You have to balance this. Think!


Posted: Mar 07 2005, 09:01 PM by michu | with 32 comment(s)
Filed under:
Reactivation
After a long silence, I decided to reactivate this blog. A lot of things happened in last few months.

First, I moved to a new home. I had to leave my previous place in September, as I wanted to lease it to students. So I did some renovation and moved temporarily to my in-laws, and some time later I received keys to my new home. I was working on it till February, and only two weeks ago I moved in and set up an internet connection. Can you say: five months without Internet? OK, I had the connection at my workplace, but it is not the same. So: no internet connection, all the time invested into painting, flooring, cleaning and doing 1257 other things... but no time nor determination to blog. It will change.

Second, I started looking for a new job. <RANT>You know, I am a developer. .NET developer exactly. If you employed .NET developer and gave him a senior position - what tasks would you give him? Something .NET and development oriented probably? Would you? It appears that it is not so common... For some organizations that .NET developer is the best person to do SAP and J2EE... evaluation. Yeah, not even development - product evaluation. For example: Michal, here is some product... called SAP Enterprise Portal... can you install this and check what can be done with that and if it is the right product to manage 30TB documents a year? After some months of such tasks, I have enough. I want to code. I want to work at a team which does SOMETHING USEFUL. That company is such a disappointment for me.</RANT>

So, I started looking for a new job. I almost got one at InnerWorkings - but we couldn't agree on some details. Basically it was my fault, because I didn't listen to my recruiter's suggestions about salary and came out with much higher requirements. So it is a bit of advice: your recruiter is your friend. She wants you to succeed and she wants the company to succeed - basicaly, to make both parties happy. Listen to what she says.

The position involved relocation from Poland to Ireland and I was afraid that I won't be able to start there with my family, so I made my expectations a bit to high. As I see it now it was a mistake - the guys at InnerWorkings are doing amazing things, it is definitely worth looking at. I think that it is e-learning taken to a whole next level. They're teaching developers how to create enterprise-level applications. Awesome stuff.

At the moment I am still in Poland and I think I finaly found the place I want to work at, and hey, it is even in my city! So, if everything goes well, no relocation. That's great. More on that when I finish the negotiations ;)

What else? I am starting a .NET Users Group. I think that the process of launching such group can be interesting, so I'll write a bit more about it in following posts.
Posted: Mar 07 2005, 03:17 PM by michu | with 2 comment(s)
Filed under:
More Posts Next page »