Jun 18, 2007
Skype API (Skype4COM) + Google MAPS API = ? [2]
| The last few days I played a bit more with this little thing and made it a bit more stable. First of all there were some strange silver rectangles in the map (which I suspect is becouse I use IE) another struggle was to force the map not to resize (pretty strange, huh?). I solved both issues at once by adding overflow="hidden" style attribute to the div, containing the map. It is quite strange. I also added the stnadard map types controls (Map, Satellite and Hybrid), that wasn't hard but took a lot of search in the net, I had the feeling that I need to define my layer, I don't know why but in the end I understood I only need to call : map.addControl(new GMapTypeControl()); it simply cannot be more easier. After the lesson with |
Finally here is what I have so far :

I will try to add custom layers and lines these days only to test how it works and is it hard to implement.
Jun 10, 2007
What happened with the Data mining?
Well, I simply stopped the project for a while, since I need to see the legal aspects of it. I am not quite sure if it is legal to simply take some catalogs from somewhere, reformat them and use them as your own. I think I can do such thing with some free public catalogs, but I will not act, until I have the written permission from the authors. Here are two screenshots of the spider in action : ![]() The above screenshot is when the spider is gathering data. It displays how much data is gathered and what the spider is doing in the given moment.
Technologies used for the spider : |
Training your collegues from the beginning
| A collegue of mine recently wrote very interesting post about the relations at work (here). He is currently project manager but he was also software developer for years. So he knows a lot about those specific problems at work. I think I also can give my opinion on the subject as a intermediate software developer. Some problems: First of all - it is really hard to refocus after being taken away from your work once. That's true. It is also true that some time a single line of code somewhere deep in the project once found may be lost easilly, which means more hours of work. I think that in our work we should first respect each other. So if I respect my collegues I will not ask them to come to my desk each five minutes. I will think on |
On the other hand - ignoring any team member leads to disballance in the team. We should be as responsive as possible in order to push our projects ahead. But the trick is to make your collegue deal with the difficulty or at least remember the solution so he can use it next time. That is what actually upgrades us as software developers.
Another very frequent problem is the psychological barrier. I had collegues who simply deny to try deal with the problem. For example I've heard : "I don't know JavaScript". And he/she simply stops his / her work when it requires JavaScript. In such cases I am trying to convince that buddy that this is very efficent and useful technology to point some advantages using it and to make it look easier. I am saying : "See, it's not that hard, you simply use this property and everything you needed is done."
I believe when you go to another desk to help someone you should not only think about the problem itself but the condition the other party is in. So being helpful developer requires some kind of psychological knowledge.
Senior software developers against juniors
That often becomes a great problem. Some of the senior software developers simply can't teach the youngers on how to deal with their work. In most cases it happens becouse the seniors are too self-reliant. They often believe their work is ten times more important. In most cases it is true. But investing in future seniors is also very important. If you train junior developer well - he will become senior too and will help you with your work.
Isolation at work
There are people who doesn't seem to be a part of the team. At first the headphones- I think it is good to put headphones on your head so you can isolate from the noise for example. It is not right, however, to make them a wall between you and the team. You should be open to any team member. I also have headphones at work. They help me a lot to isolate myself, but I am also trying to watch if somebody is comming to my desk and I take them off in the moment I see him/her. If he/she is few meters away and see that you are taking off your headphones he understands that you are ready to help and what is even more - that you will be glad to help. It is a simple psychological stimulation. We should spend much time in thinking about those little stimulations which can improve the relations at work a lot.
Other developers don't need headphones to build a wall between them and the team (or at least the younger part of the team). I think those should be punished somehow. The should also be responsive and help their collegues. I've worked with developers who answer to your question with half word, making you feel the most stupid developer on the earth. They say : "How can you missed this, it's so easy, I can't believe you ask me for this." Once you hear this answer you will not ask that developer for anything. What's even worse - you won't want to see him/her outside.
Jun 9, 2007
When to decouple?
| It is quite modern nowadays to decouple things. One project in USA to deal one business requirement, another in Pakistan to deal with some other business requirement and one more in Romania and one more in Bulgaria... Is it so good indeed to decouple single project into Web services and make them talk each other? Well I think as most things in this life decoupling has its advantages and disadvantages. I nearly lost my mental health becouse of an xslt to transform an xml document to another xml document so it can be sent from a system we are developing to a system, which provides document printing. Does it worth to write 14, 000 lines of xslt code only to print a document? Well, depends on the viewpoint. First of all decoupling minimizes |
The support is done by the other party, you don't need to care about it. That's good #3.
The other good thing is that there's always someone else to blame for something not working ;). That's joke ofcourse. The truth is that if your code doesn't work - you'll lose your clients. That's the simple truth about any business.
Now let's turn our attention on the disadvantages the SOA and decoupling may bring to you. The first and one of the biggest disadvantages is that YOU ARE DEPENDING ON SOMEONE ELSE. Any technical problem on their side will affect your side and what's worse - it will also affect your customers. And what is even worse- it will (in most cases) harm your reputation, not the reputation of the party that made the mistake (so be careful about what are you writing in the error messages the customer will see on other party fail;). Yeah, I mean it. You shouldn't accept the other party guilt as yours, if they could delivered it to you, you would have delivered it to the client, right? So instead of writing :
"Error, we have a problem"
write :
"Error, our partner have a problem."
Other big disadvantage is that while developing your side code you are facing a black box. You don't know what's happening in this black box and why it is responding in the way it does. You can only trust the documentation you may have. But is everything in it? No, I don't think so. Especially for complex services some small things are always missing and you need to either figure them out (which costs a lot of money for pills) or contact the other party and wait so they can clear the problem and document it.
I remember once I faced great problems with a web service which simply refuses to return any response. Only some simple empty xml document. Finally we figured out with my colleagues it needed two spaces in the begining of the document. I remember I wanted to swim from Bulgaria to USA to ask the guys who developed this thing to show me how would the request the document. The development dificulties, however are not a great obstacle, becouse once passed, they won't worry you anymore. But there is one more disadvantage which will remain - the transportation of the data. In order to get response from a third party service you need to send it request (this request is transported over the Internet), the service needs time to process it and then it returns you the request (which is also transported over the Internet). Then you may do something with this request and send response to the client (which is also done over the Internet). So instead one response / request pairs, you will have two. That's 100% bandwidth growth. It isn't something you can live with.
So the question remains. When should we use decoupling and SOA (I mean services, provided by third parties)?
I think it is a good choice to use third party services when you need some sort of information which is hard to obtain or may require too much time and which someone already have (credit reports in USA are good example, I think). You also may consider using SOA for services which will require a lot of time for development and which are already developed by third parties. For simple services - I think it is better to develope them on your own, so you don't waste too much bandwidth and depend on other parties.
Skype API (Skype4COM) + Google MAPS API = ?
I've played a bit last few days. I was interested in mixing the Skype4COM library (Official Skype API) with the Google Maps API (Google's Geocoding Service). It was quite tricky to make them both work properly, but finally I got some "results". Screenshots of the results will be published in this post the next few days, since I have some difficulties using the blogger upload utility (probably it is becouse my ISP, not blogger itself).![]() And this is what I have done with Skype (Skype4COM) and Google Maps Api. I am thinking on how to incorporate this program into skype (probably as plugin or something) so it can be easier to use. |
Mar 13, 2007
Another data mining approach [2nd Edition]
| I will edit this a bit. I'll split into few steps. Here, at blogger there is no suitable way to add code so I will probably decide to give the code as downloadable and write only the explanations with short code passages attached. Let's start with step 1 of our data miner. The first step is to set the things we will need. As I said we will need a WebBrowser control which will load the pages we need. Second - we will need the mshtml and ShDocVw libraries. They contain handy functions and structures we will need to use. Add those to your project and place a WebBrowser control onto the page. We are now ready to start. We will first need a suitable way to get the html document from string (the URL of the document) and some times we |
"Hey, click on this link, wait for the document to fully load and give it to me, so I can process it!". This is a bit trickier than the first requirement. Getting the document from string is easier - we simply call the WebBrowser.Navigate() routine, attach some delegates and do some routine work to check if the document is ready or the OnDocumentComplete hit frame again.
I organized those two simple but important routines into class, called DomBase. The class constructor receives two parameters the first is the WebBrowser control which will be used as navigator and the second is a label which will report the current status (in case you want to hide the WebBrowser control and perform silent navigation). Here is the signature of the DomBase ctor :
public DOMBase(AxWebBrowser wb, Label Status)
In the constructor of the class I am simply assigning the WebBrowserControl and the Label to a private variables I have declared previously so I can access them from the class. The more important is the GetDocument method, which is actually setting the delegates needed and is navigating to the requested document. After the document is fully loaded - the routine returns the HTMLDocument instance which is the document loaded inside the WebBrowser Control. The method is public so it can be accessed from everywhere and receives only a string, containing the URL of the document to get. Here is the signature of the GetDocument routine :
public HTMLDocument GetDocument(string s_Url)
There are few interesting things inside the GetDocument body. The navigation I won't discuss since it is trivial. The next thing is to assign the DocumentComplete delegate so routine defined by us to receive the event. I have forgotten to mention that my global WebBrowser control is named h_wb. So here is how do I assign the OnDocumentComplete event to my routine (this is inside the GetDocument routine) :
this.h_wb.DocumentComplete += new AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEventHandler(h_wb_DocumentComplete);
(longer than the page but you will have it soon in a separate file so you can see it better).
[to be continued].
Another data mining approach
| Few weeks ago I urgently needed some tool to gather data for me from a sites. It wasn't easy to find some good tool for crawling sites and get the data from them. Since I love experiments I decided to develop my own spider. I needed it to be human like program which can get and analyze document from a given string. After the document is loaded once - the application should find a link and click on it and then - wait the other page to be loaded and do someting like that. I used the IE automation approach, as it seemed easier then. But it was a lot of pain until all the functionalities were implemented indeed. I will pass some code and explanations later, for now you can search the http://www.codeproject.com and http://msdn2.microsoft.com/en-us/default.aspx |
Aug 25, 2006
Yet another developer
| Yeah, I am just another developer, interested in the .NET technologies. Currently I am working in the Bulgarian office of a leading American Mortgage Technology vendor. The work is cool, the people are cool. Everything is cool. I love my work. I am living in Sofia (the capital of Bulgaria) since 4 months. I am 20 years old. I think this is enough for now :) |
Subscribe to:
Posts (Atom)




