Today a customer of mine requested to integrate our ASP.NET based Web application with Microsoft CRM 3.0. Initially I thought this will be a simple task but few hours later I found that this is not straightforward.
Accessing MS CRM 3.0 from .NET
The best way to access MS CRM 3.0 from .NET application is to use its Web services. We first need to add a Web reference to the CRM Web sirvice URL. In my case it was the following:
http://crm.myserver.com/MSCRMServices/2006/CrmService.asmx?WSDL
I hope in CRM 4.0 it will be similar. Assume we are given the name “MSCRM30″ for my Web reference.
Listing all Existing Leads
To list all existing leads we can use the following C# code:
Creating a Lead
To create a new lead we can use the following C# code:
Posted by nakov as .net at 9:06 PM EEST
Comments Off
Finally I am ready with the preparation of the third IT Boxing event for software engineers - 25 June 2008, in Sofia.
IT Boxing Championship: Platforms for Enterprise Development, Web Services and SOA (Java vs. .NET)
Date: 25 June 2008 (Thursday), 18:00 h
Location: Park Hotel “Moscow”, Sofia, Hall “Moscow”
Sponsored by: Telerik and VMWare
Platforms for Enterprise Development, Web Services and SOA
Enterprise applications are complex distributed software systems designed to meet the requirements and needs of large organizations. Typically enterprise systems are running inside enterprise platforms such as Java EE and Microsoft .NET and drive the entire business processes within the organizations.
Service-oriented architecture (SOA) provides a relatively new approach to building enterprise applications based on the concept of developing, publishing and consuming loosely coupled software components called “services”.
Web services and their complete protocol stack (HTTP / SOAP / WSDL) provide standards based infrastructure for building SOA solutions that is supported by virtually any enterprise platform.
Large industry vendors like IBM, Oracle, Microsoft and SAP provide platforms for enterprise applications supporting solid infrastructure for building, deploying, running and managing large multitier and SOA applications.
In this issue of the IT Boxing Championship the fans of the worlds leading Java EE and Microsoft .NET platforms will dispute which platform is better.
Venue
The event will be held on 25 June 2008, starting from 18:00 h in Park-hotel Moscow, Sofia, hall Moscow. The hall capacity is 350 people.
Agenda
|
Time
|
Topic
|
Speakers
|
|
18:00-18:20
|
Presenting the “IT Boxing Championship” initiative, the dispute topic, teams and rules
|
Svetlin Nakov,
The Referee Team
|
|
18:20-18:40
|
Web Services Interoperability between Java and .NET
|
The Referee Team
|
|
18:40-19:00
|
Technical talk #1
|
The Java Team
|
|
19:00-19:20
|
Windows Communication Foundation (WCF) and Windows Workflow Foundation (WWF) Overview
|
The .NET Team
|
|
19:20-19:40
|
Break
|
|
19:40-20:00
|
Technical talk #3
|
The Java Team
|
|
20:00-20:20
|
Building Applications with WCF and WWF - Demo
|
The .NET Team
|
|
20:20-21:00
|
Open dispute and direct fight between the teams
|
The Java Team
The .NET Team
The Referee Team
|
|
21:00-21:10
|
Voting, announcing the results and awarding the winners
|
All visitors vote
|
Java Enterprise Edition (Java EE) and its Web Services and SOA Stack
Java Platform, Enterprise Edition (Java EE) is a widely used platform for server side development in the Java programming language. Java EE and is an industry standard for implementing enterprise-class distributed systems and service-oriented architecture (SOA) applications. It provides solid architecture and programming model for development and execution of Web applications, Web services, distributed applications, components, services and SOA solutions.
Java EE is designed for enterprise systems and natively supports the latest Web services standards (W3C and OASIS) and provides solid infrastructure for SOA applications.
Java EE applications run in an application server such as JBoss, IBM WebSphere, SAP Netweaver and Oracle Containers for Java EE, which implement the Java EE specification and provide many additional services.
Microsoft .NET Platform and its Web Services and SOA Stack
Microsoft .NET is a leading industry platform for developing enterprise Web applications, Web services and SOA solutions. Its heart, the .NET Framework provides a stable infrastructure, programming model and execution environment for developing and running applications on Windows servers, clients, and mobile or embedded devices.
.NET Framework with its Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) provides a built-in infrastructure of technologies for building connected systems and workflow enabled applications on Windows. It implements the most recent Web services standards and provides easy-to-use SOA environment.
Teams
3 teams take part in the event:
- The Java Team - stands up for the Java EE Platform
- The .NET Team - stands up for the .NET Platform
- The Referees Team - technologically neutral, moderate the discussion
The Java Team
Nikolay Nedyalkov is senior software engineer, lecturer, consultant and project leader with strong experience in Java, Java EE, .NET, database and Web development. He is technical director of the eBG.bg electronic payments portal and technical and business consultant in few other companies. Nikolay is president of the Association for Information Security (ISECA) and works in lots of public and government security projects. He has been lecturer in many courses in Sofia University and New Bulgarian University like: Information Security, Network Security, Software Engineering with Java, Writing Secure Code, Internet Programming with Java and others.
Vladimir Savchenko is a development manager in SAP Labs Bulgaria in the area of Services Oriented Architecture. He has been part of the design and architecture of SAP’s Java Web Services Framework and now participates in the design of SAP’s Enterprise Service Bus.
Emil Alexandrov is development manager in SAP Labs Bulgaria. Worked with various Java tehnologies his current focus is on SOA story of SAP and more specific Registry/Repository and Monitoring topics.
The .NET Team
Vladimir Tchalkov is a founder and CEO of Crossroad Ltd, MVP and Microsoft Regional Director since 2004. Vladimir has 13 years of experience as a project manager, architect and developer. Vladimir has managed multiple projects for development of enterprise applications and e-Government solutions. His professional experience is focused on .NET development, Microsoft SQL Server and Microsoft BizTalk Server. Vladimir is frequently a speaker on many technical seminars and conferences - Microsoft Days 2002-2006 in Bulgaria, Sofia .NET user group, and many others. He was rated No. 1 by the audience of Microsoft Days 4 times.
Martin Kulov is founder of kulov.net, provider of news, events and valuable resources for software development community in Bulgaria and close region. Martin is member of INETA Speakers Bureau, MVP, MCT, MCSD.NET, and MCPD. His blog can be found at http://www.codeattest.com/blogs/martin.
Stefan Dobrev is co-owner of Avaxo Ltd., an experienced .NET developer and distinguished speaker at various Microsoft events for developers. Visit his blog here: http://blogs.vizibility.net/sdobrev/.
Deyan Varchev is experienced .NET developer and a speaker at various Microsoft events for developers. Currently he is co-owner of Avaxo Ltd. where handles complex .NET and Web projects. Visit his blog here: http://blog.varchev.net/.
Galin Iliev is a senior software engineer with solid experience in .NET and Microsoft technologies. He has MCPD and MCSD.NET certifications. He is Microsoft certified trainer. Now Galin works as freelance developer. Visit his blog here: http://www.galcho.com/blog/.
The Referees Team
Svetlin Nakov is software engineer with more than 10 years of experience in the development of Java, .NET, Web and Windows applications, software engineering consultant and trainer, author of 4 books and above 20 technical articles and 50 presentations. He is one of the founders and currently chairman of the Bulgarian Association of Software Developers (BASD), director training and consulting activities in the National Academy for Software Development (NASD) and one of the founders of the Bulgarian Java User Group (BGJUG), a .NET group leader (BGNETUG) and author of open source projects. Visit his blog here: http://www.nakov.com/blog/.
Nikolay Dokovski is senior software engineer in SAP Labs Bulgaria and JSF 2.0 expert group member (JSR 314). He is a member of the SAP NetWeaver JST Web Container team, mainly involved in the development of the Java EE compliant Web container in the SAP NetWeaver platform.
Julian Sirakov is senior software engineer with solid experience in Java, .NET and other platforms. Currently he is Member of the Technical Staff (MTS) in VMWare Inc.
Free Event
The event is free and the hall is large, so please come with your friends!
Posted by nakov as .net, news, java, blog at 8:03 PM EEST
Comments Off
After 5 months development my .NET engineering team launched an unique service in Internet - online venues rental Web portal (www.evenues.com).
eVenues is a new online service that aggregates available meeting room space and connects prospective “space renters” with “space providers”. Today, many companies have meeting room space that sits vacant for hours/days. By enabling companies to post their available space on the internet for rent, eVenues can help either companies or individuals locate available meeting room space at a moment’s notice.
We implemented eVenues.com project with the latest technologies from Microsoft: .NET Framework 3.5, C# 3.0, ASP.NET 3.5, SQL Server 2005, LINQ and LINQ to SQL. I am happy to announce that these technologies are stable enough for production use (which was somehow risky in the beginning of the project).
During the development we used NUnit for unit testing, MS Build for build automation, CruiseControl.NET for continuous integration, Selenium for test automation, JMeter for performance measures and few other tools. All code was written in Visual Studio 2008. We use Subversion as source control repository and GForge Tracker as issue tracking software and bug tracker. Our development process tends to follow the best practices from agile processes like SCRUM but we don’t follow strictly and classical methodology.
We delivered successfully our first project in .NET version 3.5 and I believe we made the right solution by leveraging the latest technologies from Microsoft (instead of the good old .NET 2.0). I am waiting for the ADO.NET Entity framework and the other nice features in the next version of .NET Framework.
Posted by nakov as .net, news, blog at 8:13 PM EEST
Comments Off
In this article I will focus on buiding the data access layer in ASP.NET 3.5 Web applications with LINQ to SQL and SQL Server.
Lots of articles introduce the LINQ technology, the LINQ to SQL object-relational mapping technology and ASP.NET 3.5 so I will skips these introduction and will explain the main problem I found when I started using LINQ to SQL in ASP.NET web applications. The problem was standard: “How to manage the database session?”.
Managing LINQ to SQL Database Session (the DataContext) in ASP.NET Web Applications
As an experienced Java developer when I started using LINQ to SQL with ASP.NET I had rich experience with Hibernate, NHibernate and other object-relational mapping (ORM) engines like OpenJPA. I was familiar with the common patterns and approaches used to manage the database session and transaction in Web applications (mostly in Java) and I wanted to leverage my existing experience.
The “Session-per-Request” Pattern
The first idea I came upon was to implement the classical “session-per-request” pattern. This pattern opens the database sesion in the beginning of the HTTP request and closes it at the end of the HTTP request. Thus the dynamic Web pages that interract with the database assume the connection is already open. Usually I also start a transaction along with the session and commit it when closing the session. If I need multiple transactions, I start and end them manually. In the most common case the developer do not write any additional code to handle the database connection and session. This worksvery wells for lots of my projects.
The “Session-per-Request” Pattern in Java (with Servlet Filter)
In Java the “session-per-request” pattern is best implemented with so called “servlet filter” which is just an HTTP request interceptior. Inside the intercepted HTTP request I open the Hibernate session, process the HTTP request and finally close the HTTP session. I can go further and catch the exceptions and rollback transaction as well. Typically after opening the session I put it in the current thread’s local context so all my database access objects (DAO classes) do not need to take it as a parameter. The DAO objects just get the session from the local context of the currently running thread. This works great in Java for many projects and many years.
Typical Java code for this can look like the following:
In the above code the openSession() and closeSession() handle the transaction as well.
The “Session-per-Request” Pattern in ASP.NET
I wanted to implement the same pattern in ASP.NET with LINQ to SQL. In ASP.NET we don’t have servlet filters and HTTP request interception functionality. We have something similar, but with limited functionality and flexibility, the so called HTTP handlers. In ASP.NET the HTTP handlers can catch specific events that are produced during the execution lifecycle of the ASP.NET pages. We can catch events like BeginRequest and EndRequest but we can’t completely override the request processing logic (we don’t have chain.doFilter(request, response) which can be called or not).
In HTTP Module BeginRequest and EndRequest Execute in Different Threads
I don’t know if this is an optimization of architectural issue, but unlike in Java EE in ASP.NET the events BeginRequest and EndRequest for the same HTTP request can execute in different threads. ASP.NET actually uses the same thread for executing several concurrent requests. Really! Thus we cannot open the database connection in BeginRequest, put it in the thread’s local context, use it from the DAO classes when rendering the application’s dynamic web pages and finally in EndRequest remove it from the thread’s local context. No, this does not work with HttpHandler. I found this by debugging.
I tried to fix this by using the Application_BeginRequest and Application_EndRequest in Global.asax, but the result was the same: sometimes ASP.NET runs Application_BeginRequest and Application_EndRequest event handlers belonging to concurrent requests in the same thread.
After lost of experiments I fixed this.
In Global.asax Application_PreRequestHandlerExecute and Application_PostRequestHandlerExecutein Execute in the Same Thread
Following the documentation for the ASP.NET execution lifecycle I found that I can intercept the execution of the HTTP requests in many other ways, in the different stages of the request procesing. I found that the events Application_PreRequestHandlerExecute and Application_PostRequestHandlerExecute are called in the same thread for each request. If we have two concurrent HTTP requests, ASP.NET wil run two parallel threads and will execute each request in separate thread. The same applies for the Application_PreRequestHandlerExecute and Application_PostRequestHandlerExecute events.
Implementing Session-Per-Request Pattern in ASP.NET with LINQ to SQL
Finally I put the following code in Global.asax:
This is what I have in the DataContextManager class which handles my DataContext (database session) by few static methods:
In the examples my data context (.dbml mapping file) is called MMDataContext.
Implementing the Data Access Logic (DAO Classes)
Finally I implemented the data access logic as set of DAO classes and a generic basic DAO parent class:
I wanted to implement the method:
… but I failed. I think there is no way to do this as generic. This is a weakness of the LINQ to SQL framework.
Once I have the generic baseic DAO class I can use it to define my DAP classes, e.g.
Implementing the ASPX Pages that Use the DAO Classes
Once I have implemented the DAO classes I can use them directly in an .aspx page or ascx user control by ObjectDataSource or at event handler. All methods are static and developers do not need to care about thesession management. A sample ASPX page is given below:
Posted by nakov as .net, blog at 12:29 AM EEST
Comments Off
I gave two talks at the Microsoft Days 2008 in InterExpo Center Sofia on 24 and 25 April:
What is New in ASP.NET 3.5?
This session focused on the exiting recently introduced features and technologies in ASP.NET 3.5. Starting from ASP.NET and LINQ integration and ASP.NET dynamic data, the I went through the new ASP.NET MVC framework (ala Ruby on Rails) and further through the ASP.NET AJAX and the AJAX Control Toolkit and finally presented the new ASP.NET controls for Silverlight. I presented just few slides and all the rest was a rich set of live demonstrations.
Download the presentation: ASP.NET 3.5 - New Features @ MS DevDays 2008 - PowerPoint Presentation (4.8 MB).
Download the demonstrations: ASP.NET 3.5 - New Features @ MS DevDays 2008 - Demos (2.1 MB).
Best Practices for Optimizing Transactional Code in SQL Server 2008
Transaction management is the most important technique to handle concurrent access and data consistence in the database systems. In this session I talked about optimistic and pessimistic concurrency, database transactions and isolation and explained how SQL Server 2008 handles transactions and isolation by locking and row versioning. The talk started with a deep overview of the traditional isolation levels (read uncommitted, read committed, repeatable read and serializable) and locking mechanisms in the database and presented the “snapshot” isolation level in SQL Server which ensures transaction level data consistency while providing better concurrency with less locking.
Download the presentation: SQL Server 2008 Transactions @ MS DevDays 2008 - PowerPoint Presentation (0.7 MB).
Download the demonstrations: SQL Server 2008 Transactions @ MS DevDays 2008 - Demonstrations (0.1 MB).
Posted by nakov as .net, news, blog at 12:32 AM EEST
Comments Off
Last month I was invited by Microsoft to an interview in their largest european development center in Dublin. It was exciting trip and real challenge to see the Microsoft development live. I was excited of their professionalism in all directions:
- Professional organization - phone interviews, invitation, flight, accomodation, etc.
- Nearly perfect development process - like I read in the software engineering books
- Very skillful developers and manager that interview me
- Really professional way of conducting interviews
- Challengeable product development
I was most excited on the people and process. I think this is what makes Microsoft so successfull: brilliant people and solid engineering process.
Microsoft had a small fault. They didn’t ask me to sing any NDA agreement, so I can share all the interview questions to help all other candidates that want to join Microsoft.
Interview Questions @ Microsoft Dublin
I had 5 interviewers asking me lots of software engineering questions. The questions were very adequate for the team leader position that was my objective (”program manager” position in Microsoft is senior technical position, like team leader in a typical software development company). Interviewers was not only asking me to explain some concept. They gave me a blackboard to write some code and to see how I am attacking the problems, what types of pictures I draw, how my thinking flows, etc.
I remember most of the questions and the answers I gave. I hope my answers were good because I was approved and Microsoft sent me an offer few days after the interview. Below are the questions with my answers:
Question 1: You need to architecture the security for a bank software. What shall you do?
There is not exact answer here. This is about thinking: follow the exisitng standards in the banking sectors, establish global security policy, secure the network infrastructure, secureg the application servers, secure the database, establish auditing policy, securing the operators workstations, secure the Internet and mobile banking, etc. Think about authentication (smart cards), authorization, secure protocols, etc.
Question 2: You are given a string. You want to reverse the words inside it. Example “this is a string” –> “string a is this”. Design an algorithm and implement it. You are not allowed to use String.Split. After you are done with the code, test it. What will you test? What tests you will write?
Elegant solution in 2 steps:
1) Reverse whole the string char by char.
2) Reverse again the characters in each word.
You need to write a method Reverse(string s, int startPos, int endPos).
Test normal cases first (middle of the word, beginning of the word, end of the word, 1 character only, all leters in the string). Check bounds (e.g. invalid range). Test it with Unicode symbols (consisting of several chars). Perform stress test (50 MB string).
Write a method ReverseWords(string s). Test it with usual cases (few words with single space between), with a single word, with an empty string, with words with several separators between. Test it with string containing words with capital letters.
Question 3: What is the difference between black box and white box testing?
Black box testing is testing without seeing the code. Just looking for incorrect bahaviour.
White box testing is about inspecting the code and guessing what can go wrong with it. Look inside arrays (border problems), loops (off by 1 problems), pointers, memory management (allocate / free memory), etc.
Question 4: What is cross-site scripting (XSS)?
In Web application XSS is when text coming from the user is printed in the HTMl document without being escaped. This can cause injecting JavaScript code in the client’s web browser, accessing the session cookies, logging keyboard, and sensitive data (like credi card numbers).
Question 5: What is SQL injection?
SQL injection is vunerability comming from dynamic SQL created by concatenating strings with an input comming from the user, e.g. string cmd = “SELECT * from USERS where LOGIN=’” + login + “‘ and PASS=’” + password + “‘”. if username has value “‘ OR 1=1 ‘;”, any login / password will work. To avoid SQL injection use parametric commands or at least SQL escaping.
Question 6: What is the most challengeable issue with multithreading?
Maybe this is the synchronization and avoiding deadlocks.
Question 7: Explain about deadlocks. How to avoid them.
Deadlock arise when 2 or more resources wait for each other. To avoid it, be careful. Allocate resources always in the same order.
Question 8: Do you know some classical synchronization problem?
The most important classical problem is “producer-consumer”. You have several producers and several consumers. Producers produce some kinf of production from time to time and consumer consume the production from time to time. We have limited buffer for the production. When the buffer is full, producers wait until space is freed. When the buffer is empty, the consumers wait until some producers put something inside.
Practical use of the producer-consumer pattern is sending 1 000 000 emails (production) with 25 working threads (consumers).
Question 9: You need to design a large distributed system system with Web and mobile interface. Through the Web customers subscribe for stock quotes (choosing a ticker and time interval) and get notified by SMS at their mobile phones about the price for given tickers and the requested intervals. A web service for getting the price for given ticker is considered already existing.
Use 3-tier architecture (ASP.NET, C# business tier, SQL Server database). Use a queue of tasks in the business tier and a pool of working threads (e.g. 100 threads) that execute the tasks. A task has 2 steps (query for the ticker price and send SMS). These steps are executed synchronously (with reasonable timeout).
We have another thread that performs SQL query in the database to get the subscriptions matching the current time and appending tasks for SMS notification.
We consider the SMS gateway is an external system.
Question 10: How you secure the stock quote notification system?
We need to secure all its parts:
1) The user registration process - need to verify phone number with confirmation code sent by SMS. Need to keep the password with salted hash. Need to keep the communication through HTTPs / SSL.
2) The application server with business logic. Secure the host, put reasonable limitations to avoid flooding the server.
3) Secure the database (e.g. Windows authentication without using passwords).
4) Secure the network (e.g. use IPSEC)
5) Secure the access to the Web service (WS Security).
6) Secure the mobile phone (e.g. sending encrypted SMS messages and decrypt them with a proprietary software running on the phone).
Question 11: How you write a distributed Web crawler (Web spider)? Think about Windows Live Search which crawls the Internet every day.
You have a queue of URLs to be processed and asynchronous sockets that process the URLs in the queue. Each processing has several states and you describe them in a state machine. Using threads with blocking sockets will not scale. You can still use multiple threads if you have multiple CPUs. The Web crawler should be stateleass and keep its state in the DB. This will allow good scalability.
A big problem is how to distribute the database. It is very, very large database. The key here is to use partitioning, e.g. by site domain. Take the site domain, compute a hash code and distribute the data between the DB nodes based on the hash code. No database server can store all the pages in Internet, so you should use thousands of DB servers and partitioning.
Question 12: You have a set of pairs of characters that gives a partial ordering between the characters. Each pair (a, b) means that a should be before b. Write a program that displays a sequence of characters that keeps the partial ordering (topolocial sorting).
We have 2 algorithms:
1) Calculate the number of the direct predecessors for each character. Find a character with no predecessors, print it and remove it. Removing reduces the number of predecessors for all its children. Repeat until all characters are printed. If you find a situation where every character has at least 1 predecessor, this means a loop inside the graph (print “no solution”). Use Dictionary<string, int> for keeping the number of predecessors for each character. Use a Dictionary<string, List<char>> to keep the children for each character. Use PriorityQueue<char, int> to keep the characters by usign their number of predecessors as priority. The running time will be O(max(N*log N, M)) where N is the number of characters and M is the number of pairs.
2) Create a graph from the pairs. Use recursive DFS traversal starting from a random vertice and print the vertices when returning from the recursion. Repeat the above until finished. The topological sorting will be printed in reversed order. The running time is O(N + M).
Question 13: You are given a coconut. You have large building (n floors). If you throw the coconut from the first floor, if can be croken or not. If not you can throw it from the second floor. With n attempts you can find the maximal floor keeping the coconut intact.
Now you have 2 coconuts. How many attempts you will need to find the maximal floor?
It is a puzzle-like problem. You can use the first coconut and throw it from floors: sqrt(n), 2*sqrt(n), …, sqrt(n) * sqrt(n). This will take sqrt(n) attempts. After that you will have an interval of sqrt(n) floors that can be attempted sequentially with the second coconut. It takes totally 2*sqrt(n) attempts.
Question 14: You have 1000 campaigns for advertisments. For each of them you have the returns of investments for every day in a fixed period of time in the past (e.g. 1 year). The goal is to visualize all the campaigns in a single graphics or different UI form so the user can easily see which campaigns are most effective.
If you visualize only one campaign, you can use a classical bar-chart or pie-chart to show the efficiency at weekly or monthly basis. If you visualize all campaigns for a fixed date, week or month, you can also use classical bar-chart or pie-chart. The problem is how to combine the above.
One solution is to use a bar for each campaign and use different colors for each week in each bar. For example the first week is black, followed by the second week, which is 90% black, followed by the third week which is 80% black, etc. Finally we will have a sequence of bars and the most dark bars will shows best campaigns while the most bright bars will show the worst campaingns.
I knew that I was approved even at the interview. It was a good sign that the manager of the development in Microsoft Dublin for the Windows Live platform Dan Teodosiu personally invited me in his office at the end of the interview day to give me few additional questions and to present me the projects in his department. Dan is extremely smart person - PhD from Stanford University, technical director and co-owner of a company acquired by Microsoft few years ago. It was really pleasure for me to meet him.
There were 2 teams in Dublin that wanted to have me onboard: the edge computing team working on Windows Live and the Office Tube team working on video recording and sharing functionality for the Microsoft Office. I met the manager of the Office Tube team at the end of the interview day to discuss their products and development process.
I was Offered a Senior Position @ Microsoft Dublin
Few days later I was offered senior software engineering position at Microsoft in Dublin. I was approved and the recruiters started to talk with me about my rellocation in Dublin. Few days later I received the official offer from Microsoft. It was good enough for the average Dublin citizen but not good enough for me.
I Rejected Working at Microsoft Dublin
Yes, I rejected the Microsoft’s offer to work in their development center in Dublin. The reason was that their offer was not good enough. The offer was better than the avegare for the IT industry in Dublin. It was good offer for a software engineer and if I got it 5-6 years ago I would probably accept it.
I was working as software engineer for more than 12 years. I am currentlty CTO and co-owner of a small software development, training and consulting company and I am a team leader of 3 software projects in the same time (two Java and one .NET project). In the same time I am a head of the training activities and I manage directlty more than 10 engineers and of course I am paid several times better than the average for the industry. In the same time I am part-time professor in Sofia University. I am about to finish my PhD in computational linguistics. I have share in few other software companies. All of this was a result of many years of hard working @ 12+ hours / day.
In Bulgaria I was famous, very well paid, working at own company with no boss, managing development teams and having very good perspective for development. To leave my current position, I needed really amazingly good offer. I got good offer, but not amazingly good. That’s why I rejected it.
My Experience at Interviews with Microsoft and Google
Few months ago I was interviewed for a software engineer in Google Zurich. If I need to compare Microsoft and Google, I should tell it in short: Google sux! Here are my reasons for this:
1) Google interview were not professional. It was like Olympiad in Informatics. Google asked me only about algorithms and data structures, nothing about software technologies and software engineering. It was obvious that they do not care that I had 12 years software engineering experience. They just ignored this. The only think Google wants to know about their candidates are their algorithms and analytical thinking skills. Nothing about technology, nothing about engineering.
2) Google employ everybody as junior developer, ignoring the existing experience. It is nice to work in Google if it is your first job, really nice, but if you have 12 years of experience with lots of languages, technologies and platforms, at lots of senior positions, you should expect higher position in Google, right?
3) Microsoft have really good interview process. People working in Microsoft are relly very smart and skillful. Their process is far ahead of Google. Their quality of development is far ahead of Google. Their management is ahead of Google and their recruitment is ahead of Google.
Microsoft is Better Place to Work than Google
At my interviews I was asking my interviewers in both Microsoft and Google a lot about the development process, engineering and technologies. I was asking also my colleagues working in these companies. I found for myself that Microsoft is better organized, managed and structured. Microsoft do software development in more professional way than Google. Their engineers are better. Their development process is better. Their products are better. Their technologies are better. Their interviews are better. Google was like a kindergarden - young and not experienced enough people, an office full of fun and entertainment, interviews typical for junior people and lack of traditions in development of high quality software products.
Posted by nakov as .net, news, blog at 1:02 AM EET
Comments Off
The topic of this event is “Web Development Technologies: ASP.NET vs. Java & JSF vs. PHP vs. Ruby”. The .NET team will present the ASP.NET, ASP.NET AJAX, ASP.NET MVC and the new ASP.NET extensions in .NET Framework 3.5. The Java team will stand up for JavaServer Faces (JSF), Google Web Toolkit (GWT), Echo Framework and other Java Web development frameworks. The PHP team will stand up for the Web frameworks in PHP, especially the Symphony framework. The Ruby team will stand for Ruby on Rails.
Venue
The event will be held on 6 March 2008, starting from 17:30 h in Park-hotel Moscow, Sofia, hall Moscow. The hall capacity is 350 people.
Sponsor
The event is sponsored by Telerik, a leading world wide vendor of User Interface (UI) components for ASP.NET and Windows Forms, and .NET Reporting solutions.

Agenda
|
Time
|
Topic |
Speakers |
| 17:30-17:50 |
Presenting the “IT Boxing Championship” initiative, the dispute topic, teams and rules |
Svetlin Nakov,The Referee Team |
| 17:50-18:10 |
Technical talk #1: ASP.NET AJAX |
Alex Thissen,The .NET Team |
| 18:10-18:30 |
Technical talk #2: Echo Framework |
Peter Milev,The Java Team |
| 18:30-18:50 |
Technical talk #3: PHP and PHP Web Frameworks |
Peter Vukadinov,The PHP Team |
| 18:50-19:10 |
Technical talk #4: ASP.NET MVC Framework |
Alex Thissen,The .NET Team |
| 19:10-19:30 |
Technical talk #5: Google Web Toolkit - Dynamic Web on Java(Script) |
Jordan Jordanov,The Java Team |
| 19:30-19:50 |
Break |
| 19:50-20:10 |
Technical talk #6: Symphony Framework for PHP |
Peter Vukadinov,The PHP Team |
| 20:10-20:30 |
Technical talk #7: ASP.NET |
The .NET Team |
| 20:30-20:50 |
Technical talk #8: JavaServer Faces (JSF) |
Nikolai Dokovski,The Java Team |
| 20:50-21:10 |
Technical talk #9: Smashing Rails |
Sava Chankov,The Ruby Team |
| 21:10-22:20 |
Open dispute and direct fight between the teams |
The .NET TeamThe PHP TeamThe Java Team The Ruby TeamThe Referee Team |
| 22:20-22:30 |
Voting, announcing the results and awarding the winners |
All visitors vote |
ASP.NET
ASP.NET is a set of Web development technologies provided by Microsoft as part of .NET Framework. It is used by developers to create dynamic Web applications and Web services. ASP.NET provides component-based architecture with comprehensive page rendering and execution model that relies on the concepts of the event-driven development. ASP.NET supports the concept of separation between the code and UI presentation and supports custom components, data binding and master pages. Developers can use C#, VB.NET and other .NET languages to create ASP.NET Web applications. ASP.NET is the best Web technology, isn’t it? If you don’t agree, come to fight at the ring.
ASP.NET AJAX
ASP.NET has a really strong story for AJAX. The AJAX implementation supports both a server centric and a client centric programming model. On the server new AJAX controls extend the Page Framework and offer the well-known control based and event-driven way of working. The AJAX controls take care of partial rendering of Web pages. Microsoft has released an impressive cross-browser compatible AJAX library on the client side. It allows you to do full client-side JavaScript development, and adds object orientation with inheritance, a type system including reflection and namespaces. And to top it all, the AJAX library is royalty-free and you can use and change it however you like. Surely no other AJAX framework can put up against this much power and survive a 12 round fight!
ASP.NET MVC Framework
Microsoft goes into a new direction of web application development with the introduction of the Model-View-Controller framework for ASP.NET. The benefits of the MVC approach include the ability to achieve and maintain a clear separation of concerns (data, presentation and actions), and also facilitates test driven development (TDD) and define page navigation rules. Microsoft’s MVC implementation is all about extensibility and flexibility. You have a free choice of the type of controller, the way URLs are routed and how views are created. The MVC Framework leverages the ASP.NET runtime and should be easy to learn for existing ASP.NET programmers, but also those coming from other runtimes and frameworks. All in all, the ASP.NET MVC Framework is sure to pack a punch. Will the combination of ASP.NET and MVC bring a quick knockout?
Java Web Technologies
The Java Enterprise platform (Java EE) provides solid foundation for development of Web applications and Web services. It introduces the concept of Web containers and Web applications. Java Web applications are built on the top of Servlet/JSP standards which serve as basis for the more complicated Web technologies. The Servlet API provides the basic execution model for the Web applications. The JavaServer Pages (JSP) technology provides additionally custom tags and tag libraries and has built-in expression language.
JavaServer Faces (JSF)
As a natural extension to the Servlet/JSP standards JavaServer Faces (JSF) provides standard component based architecture for Web applications. It provides reusable UI components and comprehensive rendering and execution model. Developers can benefit of using event driven development, data binding, control validation and page navigation rules. JSF is naturally extended to support AJAX with partial rendering and asynchronous execution and update of controls on the page. Shall the JSF gain a victory over the opponents as a technical effort or the Java team fill fall into boxing combat? Be sure to come and see.
Google Web Toolkit (GWT)
This session intends to reveal some of the benefits of GWT as UI Framework. Nowadays having a dynamic web UI is a must. Java programming is always preferred compared with pure HTML and Java Script. So combining both can really boost productivity and in the same way give us the opportunity to have a nice and flexible UI. The session will also include the usage of GWT in a real SAP project so that everybody can get a feeling for the product. Somebody mentioned JavaScript and AJAX support in .NET and PHP? No need of fight: GWT does not just use JavaScript and AJAX; those are in its blood.
Echo2 Framework
Echo2 is a platform for building Web applications that approach the capabilities of rich clients. The applications are developed using a component-oriented and event-driven API, eliminating the need to deal with HTML, JavaScript and the “page-based” nature of Web browsers. Echo2 applications are by their nature AJAX-enabled. To the developer, Echo2 works just like a user interface toolkit with and presents very simple approach to write efficient Web applications. Any AJAX pugilists?
PHP and PHP Web Frameworks
Some developers believe that PHP code is always low quality and PHP does not have good frameworks and standards for enterprise development. Is this true? What makes PHP the most widely used Web development language?
PHP frameworks are hot topic in the Web development community. Some of the most popular frameworks are: ZendFramework, Symfony, Codelighter, CakePHP, eZ Components but this list can not be either accurate or comprehensive.
PHP does not need to fight or dispute with the rest. It is the largest community and keeps the largest market share in Web technologies, isn’t it?
Symphony Framework for PHP
Symfony is a complete PHP framework designed to optimize the development of Web applications. It contains numerous tools and classes aimed at shortening the development time of a complex Web applications. Additionaly, it automates common tasks so that the developer can focus entierly on the specifics of the application. Some of the key features are: MVC separation, simple templating and helpers, cache management, smart URLs, scaffolding, multilingualism and I18N support, AJAX support and built-in unit and functional testing framework. Does anybody think Symphony is not better than ASP.NET and JSF? We shall see.
Smashing Rails
Since its inception several years ago Ruby on Rails has steadily garnered a lot of attention. The rolling stock seems not to be hype-powered only in shunting established technologies. Rather than presenting Rails the Ruby team decided to let it speak on its own. Ruby on Rails will squash the other Web technologies. Come to see this.
Teams
5 teams and 23 contestants take part in the event. The teams:
- The .NET Team (Alex Thissen from INETA, Branimir Giurov from SofiaDev, Stefan Dobrev from Avaxo, Deyan Varchev from Avaxo, Galin Iliev, Martin Kulov and Emil Stoychev) - stands up for the ASP.NET Web technologies
- The Java Team (Nikolay Dokovski from SAP Labs Bulgaria, Jordan Jordanov from SAP Labs Bulgaria, Peter Milev, Nikolay Nedyalkov from ISECA, Vesko Arnaudov from VMWare, Naiden Gochev from ProxiAD) - stands up for the Java Web technologies like JSF, GWT, Echo, etc.
- The PHP Team (Peter Vukadinov from pi consult and Valery Gantchev) - stands up for the PHP Web technologies
- The Ruby Team (Sava Chankov from Tutuf, Petyo Ivanov from 3atwork, Stanislav Bozhkov from svejo.net, Stanislav Peshterliev and Dimitar Ivanov) - stands up for the Ruby and Rails technologies
- The Referees Team (Svetlin Nakov from BASD, Dimitar Kapitanov from Telerik and Mihail Stoynov) - technologically neutral, moderate the discussion
Free Event
The event is free and the hall is large, so please come with your friends! Everyone will get small gifts from our sponsors.
Official Web Site
Visit the IT Boxing Official Web site for more information.
Posted by nakov as .net, news, java, blog at 12:20 PM EET
Comments Off
The “IT Boxing” Visited by 250 Developers!
On 11 December 2007 I organized the largest event of the Bulgarian Association of Software Developers (BASD). It was held in Sofia and was visited by 250 software engineers and thus BASD was proved to be #1 community organization in Bulgaria.

The subject of this first “IT Boxing” event was “.NET vs. Java database access technologies and ORM tools”. The .NET team presented the LINQ and the ADO.NET Entity Framework and Visual Studio 2008. The Java team presented Hibernate, Java Persistence API (JPA) and DB4O.
The Winner is the .NET Team!
The .NET Team won the first IT Boxing match named “ADO.NET Entity Framework and LINQ vs. Java Persistence API and Hibernate”. The vote of the audience stated the following results (not all visitors voted):
- The .NET Team: 136 votes
- The Java Team: 46 votes
More details about the event:
Posted by nakov as .net, news, java at 3:15 PM EET
Comments Off
Next week (11 December 2007) I organized very interesting event for developers in Sofia: IT Boxing championship where .NET and Java developers will dispute the state-of-the-art data access technologies in their platforms: http://itboxing.devbg.org/events/adonet-entity-framework-linq-vs-jpa-hibernate/.
About the IT Boxing Championship
The initiative “IT Boxing Championship” is a series of events organized by the Bulgarian Association of Software Developers (BASD) at which we invite supporters of different software technologies to an open dispute “Which technology is better?”. At these meetings the adherents of the opposing technologies defend their vision for better technology by presentations, discussions and open debate that ends up in direct fight with inflatable boxing gloves. For each IT boxing event we assign a topic for dispute and teams that stand up for contrary visions. During the fight all contestants are obligated to keep the opponent of injuring.
ADO.NET Entity Framework + LINQ vs. Java Persistence API and Hibernate
The topic of this event is “Database Access Technologies and Object-Relational Persistence Frameworks in .NET and Java”. The .NET team will present the new ADO.NET, the ADO.NET Entity Framework and LINQ in C# 3.0. The Java team will stand up for Hibernate and the Java Persistence API (JPA).
Agenda
|
Time
|
Topic |
Speakers |
| 18:00-18:20 |
Presenting the “IT Boxing Championship” initiative |
Svetlin Nakov |
| 18:20-18:30 |
Presenting the dispute topic, teams and rules |
Svetlin Nakov |
| 18:30-18:35 |
Draw lots: Who will start first |
Svetlin Nakov |
| 18:35-19:20 |
ADO.NET Entity Framework and LINQ |
The .NET Team |
| 19:20-19:35 |
Break |
|
| 19:35-20:20 |
Java Persistence API and Hibernate |
The Java Team |
| 20:20-21:30 |
Open dispute and direct fight between the teams |
The .NET TeamThe Java Team The Referee Team |
ADO.NET, ADO.NET Entity Framework and LINQ
ADO.NET is the standard data access library built in .NET Framework used by developers to access and modify data stored in relational database systems, call stored procedures and access non-relational data sources like XML.
LINQ (Language Integrated Query) is extension to C# and other .NET languages that adds native querying syntax directly into the language and thus simplifies querying data and dramatically reduces the amount of code.
ADO.NET Entity Framework is new paradigm for developing database applications. It allows developers to focus on data through an object model instead of through a logical/relational data model. It abstracts the logical database structure using a conceptual layer, a mapping layer, and a logical layer and provides support for LINQ to simplify querying.
Java Persistence API and Hibernate
Java Persistence API (JPA) is a Java framework based on the concept of object-relational mapping (ORM) that allows developers to manage relational data in Java SE and Java EE platforms. JPA defines persistent entities as lightweight Java classes that are mapped to the database tables. Entities typically have relationships with other entities, and these relationships can be specified directly in the entity class by using annotations, or in a separate XML descriptor. Once the mapping between classes and tables is defined, the persistent entities can be loaded, modified, persisted, deleted and queried by simple API.
Hibernate is a powerful, high performance object/relational persistence framework, very popular among the Java developer community. By concept it is very similar to JPA and provides mapping objects to tables, querying and manipulating persistent objects.
Teams
Three teams take part in the event:
The .NET Team – stands up for ADO.NET Entity Framework and LINQ
The Java Team – stands up for Java Persistence API and Hibernate
The Referees Team – technologically neutral, moderate the discussion
The .NET Team
Branimir Giurov is very skillful Microsoft and .NET software engineer, with many years of experience as senior developer, trainer, consultant, team leader and development manager. He’s a C# MVP and a UG Lead at SofiaDev.org. Branimir is freelance developer. Visit his blog here: http://blogs.sofiadev.org/blogs/branimir/.
Stefan Dobrev is co-owner of Avaxo Ltd., an experienced .NET developer and distinguished speaker at various Microsoft events for developers.. Visit his blog here: http://ligaz.blogspot.com.
Deyan Varchev is experienced .NET developer and a speaker at various Microsoft events for developers. Currently he is co-owner of Avaxo Ltd. where handles complex .NET and Web projects. Visit his blog here: http:// http://blog.varchev.net/.
Galin Iliev is a senior software engineer with solid experience in .NET and Microsoft technologies. He has MCPD and MCSD.NET certifications. He is Microsoft certified trainer. Now Galin works as freelance developer. Visit his blog here: http://www.galcho.com/blog/.
Dimiter Kapitanov is senior software engineer at telerik. Dimiter has solid experience in development of .NET applications and reusable components. Visit his blog here: http://blogs.telerik.com/blogs/dimitar_kapitanov/.
The Java Team
Miroslav Nachev is software engineer with more than 18 years of experience in software design and development, system integration, VoIP and tele¬communications projects. Some of the programming languages and technologies in his competence include Java, Fortran-77, Pascal, x86 assembler, C/C++, 4GL Magic, Web Services, Hibernate, JPA, XML Security & Encryption, Java Security, X.509 Certificates, XAdES, Java EE, Swing and VoIP.
Martin Valkanov is senior software engineer in eBG.bg. He has solid development experience in Java and open source technologies, Web applications, databases and enterprise systems.
Peter Milev is experienced Java engineer. He has years of experience in Java and open source technologies, focusing on Web applications with AJAX and database systems.
Svetoslav Kapralov is senior software engineer, experienced in various Java technologies and frameworks.
Vesko Arnaudov is senior software engineer in VMware Inc.. He has many years of experience as developer, team leader, trainer and consultant. His expertise includes Java, Java EE, Oracle, Web and enterprise applications.
The Referees Team
Svetlin Nakov is software engineer with more than 10 years of experience in the development of Java, .NET, Web and Win32 applications, software engineering consultant and trainer, author of 4 books and above 30 technical articles and presentations. He is one of the founders and currently chairman of the Bulgarian Association of Software Developers (BASD), director training and consulting activities in the National Academy for Software Development (NASD) and one of the founders of the Bulgarian Java User Group and author of open source projects. Visit his blog here: http://www.nakov.com/blog/.
Nikolay Todorov is team lead in Musala Soft. He has strong commercial experience with both Java and .NET (he is Microsoft Certified Application Developer with .NET) and solid practice and knowledge about software development processes, including Agile.
Stanimir Boychev is technical director and managing partner in Musala Soft. His 12+ years experience in the area of software development covers a very broad set of technologies, including architecting and leading Java EE and .NET projects.
Venue
The event will be held on 11 December 2007 (Tuesday), 18:00 h in Park Hotel “Moscow”, Sofia, Hall “Moscow”.
Sponsors
The event is sponsored by two leading software companies in Bulgaria: telerik and Musala Soft.
Posted by nakov as .net, news, java, blog at 9:55 PM EET
Comments Off
Bulgarian Association of Software Developers (BASD) became an official member of INETA (the International .NET Association).

Now BASD is registered .NET user group for Bulgaria and will promote the .NET technology through its members by seminars, conferences, meetings and other events.
We are planning to run a new interesting event called “IT boxing” where .NET and Java technology evangelists meet to discuss which technology is better and finally box with inflatable boing gloves. The first match will be “ADO.NET+LINQ vs. JPA and Hibernate”. I will post more about the IT boxing championship.
Posted by nakov as .net, news, blog at 2:46 AM EET
Comments Off