Skip to main content.
January 22nd, 2010

Course “High-Quality Programming Code” at FMI Reached Its Capacity

I was recently warned by students from the Faculty of Mathematics and Informatics (FMI) at Sofia University that our course “High-Quality Programming Code” was offered for only 100 students like most elective courses at FMI. We are looking for a way to extend the maximum allowed attendees but we cannot go aside the official administrative rules at the Faculty.

All Students from FMI will be Accepted

The course organizers agree that all FMI students who want to attend this course are welcome to take part in all training activities (lectures, exercises and course projects) even when not officially joined through the official university information system “SUSI”. We hope we will be given large enough hall to fit all attendees. Students who pass successfully all their exams and graduate this course will be allowed to reuse their grades for the next year.

For more information keep checking the “News” section at the course’s official Web site: http://codecourse.telerik.com.

Posted by nakov as news, blog at 4:42 PM EET

Comments Off

January 19th, 2010

Course “High-Quality Programming Code” in FMI and TU-Sofia

Starting from February 2010 I will lead a team of software engineering professionals from Telerik Corporation who will teach the course “High-Quality Programming Code” in the Faculty of Mathematics and Informatics (FMI) at Sofia University and at the Technical Univesity - Sofia (TU-Sofia). The course complements the fundamental university education with important software development and code construction concepts and best practices. The outcomes for the students are the acquisition of knowledge and skills for building high-quality programming code, practical skills for code refactoring and unit testing.

Course Organizers

The course is organized by Svetlin Nakov and his team with the cooperation of the Department of Software Technologies in FMI and the Students Council in TU-Sofia. The course is supported and sponsored by Telerik Corporation (large Bulgarian software development company recently listed in the Red Herring: Global 100 Winners).

Course Annotation

The „High-quality programming code” course objective is to introduce the students to the principles of high-quality programming code construction during the software development process. The quality of the code is discussed in its most important characteristics – correctness, readability and maintainability. The principles of construction of high-quality class hierarchies, classes and methods are explained. Two fundamental concepts – “loose coupling” and “strong cohesion” are defined and their effect on the construction of classes and subroutines is discussed. Some advices for correctly dealing with the variables and data are given, as well as directions for correct naming of the variables and the rest elements of the program. Best practices for organization of the logical programming constructs are explained. Some methodologies for testing, debugging and code optimization are introduced. Attention is given also to the “refactoring” as a technique for improving the quality of the existing code. The principles of good formatting of the code are defined and explained. The concept of “self-documenting code” as a programming style is introduced. The techniques and practices for constructing high-quality programming code discussed in the course are independent of the programming languages.

Training Program

  1. Course Overview. Introduction to High-Quality Programming Code. Entrance Project
  2. Fundamentals of Software Engineering
  3. Naming Identifiers in the Source Code. Naming Classes, Methods, Variables, Parameters and Other Elements of the Code
  4. Designing High-Quality Classes and Class Hierarchies. Best Practices in the Object-Oriented Design
  5. High-Quality Methods. Strong Cohesion and Loose Coupling
  6. Using Variables, Data, Expressions and Constants Correctly
  7. Using Control Structures, Conditional Statements and Loops Correctly
  8. Correctly Formatting the Code. Code Documentation, Comments and Self-Documenting Code. Code Conventions
  9. Defensive Programming. Using Exceptions Correctly. Performance Tuning and Code Optimization
  10. Code Integration. Refactoring Existing Code to Improve Its Quality
  11. Software Quality Assurance. Testing and Debugging. Unit Testing. Test-Driven Development
  12. Development Tools. Development Environments. Change Management Systems. Code Analysis Tools. Automated Testing Tools. Automated Build Tools. Continuous Integration Tools
  13. Test Covering the All Studied Topics
  14. Course Projects: Assignment, Guidelines and Discussion
  15. Psychology of Computer Programming

Lecturers Team

Requirements to the Students

Assesment and Exams

Assessment is based on test (theory) and course project (practice). The test consists of 40 questions covering the course content. The course project has two parts: entrance project (small programming problem that should be solved in C#, Java or C++) and final project (refactoring of low-quality code and adding unit tests).

Official Web Site

Visit the official Web site of the course “High-Quality Programming Code”: http://codecourse.telerik.com/.

Posted by nakov as news, blog at 2:01 PM EET

Comments Off

January 18th, 2010

Course “Web Applications Development with .NET Framework and ASP.NET” in TU-Sofia

Starting from February 2010 I will lead a team of .NET software engineering professionals who will teach the course “Web Applications Development with .NET Framework and ASP.NET” at the Technical Univesity - Sofia (TU-Sofia). The course complements the fundamental university education with contemporary Web development technologies. The outcomes for the students are the acquisition of practical skills for building rich-data Web applications based on .NET Framework, LINQ-to-SQL, SQL Server, ASP.NET, AJAX and Silverlight.

Course Organizers

The course is organized by the Students Council in TU-Sofia who invited Svetlin Nakov and his team to teach it for all students in TU-Sofia. The course is supported and sponsored by Telerik Corporation (large Bulgarian software development company which was recently listed in the Red Herring: Global 100 Winners).

Course Annotation

The „Web Applications Development with .NET Framework and ASP.NET” course objective is to introduce the students to the fundamentals of C#, .NET Framework, databases and Web application development with ASP.NET and AJAX. Students will learn how to build dynamic data-driven Web applications with SQL Server and ASP.NET. The course starts with the basics of C# language (data types, expressions, statements, loops, arrays, methods, strings, collections, exceptions, etc.), object-oriented programming with C# (classes and interfaces, constructors, properties, events, methods, etc.), relational databases, SQL language and SQL Server, data access technologies (LINQ and LINQ-to-SQL). The main focus is on Web technologies, starting from HTTP, HTML, CSS and JavaScript, through the fundamentals of ASP.NET and ASP.NET Web Forms. Advanced topics include building rich-data applications with ASP.NET data-bound controls, using master pages, AJAX and Silverlight. All topics covered in the course will be demonstrated in a practical session demonstrating how to build building a sample dynamic rich-data Web application from scratch, step-by-step.

Training Program

  1. Course Overview – Presenting the Course Objectives, Lecturers, Exams, etc..NET Framework Overview – .NET, .NET Framework, CLR, MSIL, Assemblies, CTS, .NET languages
  2. C# Language Overview – Part I – Data Types, Operators, Expressions, Statements, Console I/O, Conditional Statements, Loops, Arrays, Methods
  3. C# Language Overview – Part II – Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes
  4. Object-Oriented Programming with C# – Defining Classes, Constructors, Properties, Methods, Delegates, Events, Static Members, Interfaces, Inheritance, Polymorphism
  5. Databases, SQL and MS SQL Server – RDBMS, SQL Language, SQL SELECT, Joins, Aggregate Functions, Grouping, SQL INSERT, SQL UPDATE, SQL DELETE, MS SQL Server, SQL Server Management Studio
  6. LINQ and LINQ-to-SQL – LINQ Operators and Expressions, Projections, Conversions, Aggregations, LINQ-to-SQL, Visual Studio LINQ-to-SQL Designer, Using DataContext to Read / Create / Update / Delete Data
  7. Web Technologies Basics – HTTP, HTML, Text, Images, Tables, Forms, CSS, JavaScript
  8. ASP.NET – Part I – ASP.NET Web Forms, Code Behind Pages, Page Execution Model, Web Server Controls, HTML Server Controls, Creating Simple Web Applications
  9. ASP.NET – Part II – Data Binding and Data-Bound Controls: Data Sources (LinqDataSource, ObjectDataSoucre), GridView, FormView, DetailsView, DataList, Repeater, ListView, Pager
  10. ASP.NET – Part III – Session and State Management, Master Pages and Navigation, User Controls, Web.config, ASP.NET Membership, IIS and Deployment
  11. ASP.NET AJAX – ScriptManager, UpdatePanel, AJAX Control Toolkit
  12. Silverlight – XAML, Text, Images, Graphics, Shapes, Creating Silverlight Applications, Text Controls, Buttons, List Controls, Data Binding and Data-Bound Controls
  13. Practical Project Demo – Creating Dynamic Rich-Data ASP.NET Web Application – Step-by-Step Live Demo
  14. Additional Topic #1 – Student will Suggest Interesting Topics
  15. Additional Topic #2 – Student will Suggest Interesting Topics

Lecturers Team

Requirements to Attend the Course

Assesment and Exams

Students will be assigned to develop as a practical project dynamic Web application based on .NET Framework, ASP.NET Web Forms, SQL Server and LINQ-to-SQL. Sample projects: dynamic photo album, CMS system, blog system, dating site, online game, Web mail, etc.Authors of the best projects will be awarded by our sponsor Telerik.

Official Web Site

Visit the official Web site of the course “Web Applications Development with .NET Framework and ASP.NET”: http://aspnetcourse.telerik.com/.

Posted by nakov as .net, news, blog at 3:24 PM EET

Comments Off

January 1st, 2010

Seminar “Practical Software Engineering” in TU-Sofia - 8 February 2010

I was recently invited by the Board of European Students of Technology (B.E.S.T. Sofia) to give a talk on “Practical Software Engineering Fundamentals” in the Technical University of Sofia. The event is designed for students who wants to become software engineers.

Software engineering defines the software development project lifecycle as sequence of activities, such as requirements analysis, architecture, design, code construction, testing, debugging, integration, deployment, maintenance, etc., which are performed following the practices of given development methodology applying a set of project management activities for planning, monitoring and controlling the project.

In this talk the speaker Svetlin Nakov will introduce the audience with the most important software engineering activities and will explain the typical software project lifecycle. Comprehensive examples will be given along with the theoretical fundamentals. Typical documents and templates used during the software development process will be presented including: software requirements specifications (SRS), software design documents (SDD), test plans, project plans, etc.

The event is supported by Telerik Academy.

Posted by nakov as news, blog at 4:01 PM EET

Comments Off

December 15th, 2009

Telerik Academy Officially Launched Free Software Development Courses for 100 Students from February 2010

In the last few months I am working as full-time consultant for the training initiatives in Telerik. It is really an exciting company and I really enjoy my job as manager of the technical training and university relations. I still can’t believe that Telerik is really perfectly organized company, beyond my expectations and even dreams. It is unusual company with specific culture, structure and traditions. Unlike traditional companies our CEO sits behind me along with few developers, not in a separate “big boss room”. I will blog about Telerik in details another day. Now let me present my main work at Telerik.

Telerik Academy


Telerik Academy
Today I launched a new long-term training project called “Telerik Academy“. Telerik Academy is an initiative of Telerik Corporation aiming to provide free real-world practical training for young people who want to turn into skillful .NET software engineers and join the company development teams. The training complements the traditional University education with the cutting edge industry technologies from Microsoft and best practices in software engineering.

During the Telerik Academy training program highly motivated young people are attracted and candidates covering the program requirements are trained free of charge in the fundamentals of computer programming, logical algorithmic thinking, data structures, algorithms, problem solving and object-oriented concepts. The best of them are selected through exams and interviews and continue to the next level of training – .NET Development Essentials course, covering the .NET Framework class library, databases, SQL Server and LINQ, Web technologies, ASP.NET and AJAX, Windows Forms, WPF and Silverlight, as well as software engineering. Having successfully finished this stage the top students qualify for an additional specialized course in one of the following technological directions used in Telerik: ASP.NET & AJAX, Windows Presentation Foundation (WPF) and Silverlight, Windows Forms and Data-Centric Development. Finally, those who graduate will be presented with the opportunity to join the Telerik team and help us deliver exceptional software to the world.

Telerik Pays to Students to Study .NET Technologies

Telerik pays its trainees at Telerik Academy to learn the .NET technologies for few months and provides job for the best graduates. We are growing even during the global financial crisis and Telerik Academy is our way to grow with highly-motivated and skillful junior developers. Our learning track takes 6 months:

Program Requirements

The minimum requirements for any candidate are:

Apply for Telerik Academy

To apply for free 6-months .NET training visit the Telerik Academy official web site.

Posted by nakov as .net, news, blog at 10:13 PM EET

Comments Off

December 1st, 2009

Svetlin Nakov is No Longer Involved in the National Academy for Software Development (NASD)

Starting from March 2009 I left the National Academy for Software Development (NASD). NASD was really nice project and it was running successfully for few years but the idea changed so much that from some point in 2008 I was no longer able to enjoy doing this work.

Why I left NASD?

1) My dream was about running a software development training center where people get 100% free training and this was really achieved in 2006, 2007 and 2008. At some point the trainings became paid and I was no longer motivated to participate.

2) I really enjoy teaching young and motivated people in software technologies and software engineering and I really do this job well but NASD was fast growing (30 employees in 2008) and at some moment the things got out of my control. Initially I teached all the courses and the teaching quality was superior. Later we employed junior trainers who was good but not the same level like me. Some business partners of mine told me that they want me to teach the people personally. This was not possible because in 2007 and 2008 I was team leader of 5 to 7 software development projects in the same time and coordinator of all training courses. At some moments we had 8 courses running in parallel. We employed few developers who was working on projects in the day and on trainings in the evenings. Most of them were really good developers and good trainers, but people still asked me to teach the people myself. This was the second reason to leave NASD and to find a different way to conduct software development trainings.

What will Happen with NASD?

Please don’t ask me this question. I really don’t know and this is out of my control! NASD was founded by me (with few partners) but I was never been CEO of NASD Ltd. and I even had a minor share of it all the time. I left NASD when the trainings became paid and some students needed to pay for some courses that were initially offered as free. I didn’t like this to happen and I left this company. Now my former partners are driving it. I am no longer involved in any activity that NASD is performing.

Free Trainings, New Academy or What is Next?

This is a good question. In November 2009 I joined Telerik Corporation to organize software development trainings for producing skillful .NET software engineers. Now I lead the project called Telerik Academy that is bringing me back to my initial idea of creating a software development academy. We provide free software development courses and I personally teach all the students in Telerik Academy. I feel closer to my dreams about teaching motivated young people in software engineering and technologies free of charge and preparing them for the real world industrial software development. Note that Telerik Academy is not a successor of NASD. I just moved to a new job. I believe the results will be outstanding like in the first days of NASD.

Posted by nakov as news, blog at 10:37 PM EET

Comments Off

X.509 Certificate Validation in Java: Build and Verify Chain and Verify CLR with Bouncy Castle

For one of my recent projects I needed to implement X.509 certificate validation library that validates a certificate across given set of trusted root certificated and a set of intermediate certificate. Initially I thought this is a problem that has already out-of-the-box solution in BouncyCastle but the CRL verification was found to be unpleasant to implement and not available out-of-the-box.
The task was formulated as follows: given a X.509 certificate and a set of trusted root certificates and a set of intermediate certificates to build a certification chain (if possible) and to extract the CRL distribution point from the certificate (if available) and to check whether the certificate is not revoked. It was required to support HTTP, HTPS, FTP and LDAP based distribution points.
I will not get into more details because I don’t heve too much time but I think the code is clear enough, so most developers will be able to read, understand and use it:

I hope the above coude could be useful to anybody trying to build and validate X.509 certificate chain and check the CRL revocation status.

Posted by nakov as java, blog at 12:10 AM EET

Comments Off

November 30th, 2009

NHibernate Lazy Loading BLOB column

For my last project we used Oracle 10g and NHibernate ORM framework (the project was started 4-5 yars ago, long before LINQ and ADO.NET Entity Framework). I had a database table which holds payment information along with scanned images of the payment documents. Usually such tables are mapped with a class fully corresponding to the table fields. The usual approach works well but has a performance problem: when the table needs to be displayed, the binary images holding the payment documents do not need to be loaded from the database because they consume much memory and take time to load. NHibernate supports lazy loading for associations only but does not support lazy column / property loading. To achieve a normal performance I needed to do a quick hack and I believe it could be useful for other projects so I want to shera it with the community.

The hack is to map all columns of the database table except the large binary column (BLOB type in Oracle). The large binary column is handle differently with additional select / update operations. See the payment entity definition below:

The database schema of the PAYMENTS table is as follows:

I use NHibernate annotations because I want to have the entity class and the .hbm mapping in the same file.

The idea behind the “column lazy loading” hack is to skip mapping the large BLOB column and to red/write it on demand with additional SELECT / UPDATE command.
This approach is applicable to other ORM frameworks that do not support lazy column loading.

Enjoy.

Posted by nakov as .net, blog at 11:24 PM EET

Comments Off

November 21st, 2009

New Book: Introduction To Programming With C#

Today I with Vesko Kolev started a new project: writing a C# book in Bulgarian for beginners that covers the fundamental concepts of computer programming, data structures and algorithms as well as object-oriented concepts, high-quality programming code and problem solving. The book is titled “Introduction to Programming with C#” and will be based on its well-known sister, the book “Introduction to Programming with Java”. Most of the book content will be adaptation of its Java variant but some new concepts will also be introduced. The book focuses on the fundamental concepts of computer programming, not just the C# language. It covers topics like recursion, data structures (linear, trees, graphs, hash-tables and sets), combinatorial algorithms and problem solving which can not be found in every C# book. The book does not cover software engineering, Web programming, databases, desktop applications, mobile applications and other software technologies, just the bases of computer programming, logical thinking and problem solving. The book is free and open-source and is driven by volunteers who like to share their knowledge and skills with the young developers who try to make their first steps in computer programming and software engineering.

The book’s official Web site will be located at: http://www.introprogramming.info.

The developer’s Web site is located in Google Code: http://code.google.com/p/introcsharpbook/.

The SVN repository containing all project assets is located at: http://introcsharpbook.googlecode.com/svn/trunk/.

The developer’s mailing list (discussion group) is located at: http://groups.google.com/group/introcsharpbook.

Authors and editors are welcome to help the project. To join to this open-source voluntary project please contact Svetlin Nakov or Vesko Kolev. The working language is Bulgarian (some day we plan to publish an English version but let’s do the things step-by-step).

Posted by nakov as .net, news, blog at 2:46 AM EET

Comments Off

November 17th, 2009

Playing with the Scanner with WIA and C#

Last week I needed to implement a piece of software for scanning small documents (bank payment orders). The problem was to scan documents with specific size (less than A4) in 300 DPI and with normal brightness and contrast. I found that in C# there are two general approaches to this problem:

Both interfaces are not natively supported in .NET Framework so some kind of wrappers was necessary to be developed. I choose WIA because it was simpler and higher level API with sufficient enough power.

To use WIA you need to download it from Microsoft (it is a COM server, distributed freely): http://www.microsoft.com/downloads/details.aspx?familyid=a332a77a-01b8-4de6-91c2-b7ea32537e29&displaylang=en.

The next step is to add it as COM object reference in Visual Studio (you need a single file called wiaaut.dll that you need to register with regsvr32). Once you add the reference to WIA COM object in Visual Studio, you get the namespace WIA. All you need to scan image is in this namespace. The most important classes are: Device, Item and CommonDialogClass.

I will not get into more details because developers need code and usually read the text only if the code is not working. Am I right? Did you tread this text?

The above example scans a small area of the page in 300 DPI (color mode), saves the result in PNG format and displays it in a picture box. Download the entire example’s source code: playingwiththescanner.zip.

The interface of WIA is really ugly and is not C# friendly, but that’s the life. Enjoy….

Posted by nakov as .net, news, blog at 1:36 AM EET

Comments Off

« Previous Entries