dotNetConfPL – the second edition

dotNetConfPL - 2nd edition

The first edition of dotNetConfPL was pretty successful, and together with Michal and Pawel we decided to do a second edition. This conference is in Polish language, which makes it unique, because there are no other online conference like that in Poland.

This year talks looks promising as well. Maciej Aniserowicz prepared second part of his talk about unit tests from the last year, Filip Wojcieszyn will talk about the hottest thing in this year: Roslyn. Jakub Gutkowski prepared a talk about cooperation of MVC in client and server side. Maciej Grabek proposed a talk about BDD, which is getting more and more popular in .NET World. Michał Łusiak (from tretton37) will talk about F#. This year, we have a women speaker! Barbara Fusińska will talk about Aspect-Oriented Programming. Another new thing is a non-technical talk: Patryk Góralowski prepared a talk with mysterious title: Talent for 2 dolars!

I really can’t wait! All talks sounds very interesting. Remember to buy pizza and beer, and join us on On Air, this Saturday, October 18, 3PM (UTC+01:00, Warsaw Time Zone).

Find out more about talks and speakers.

This year we have 6 ReSharper licenses, and 3 NCrunch licenses to give away. Additionally, Filip Wojcieszyn volunteered to give away one copy of his book: ASP.NET Web API 2 Recipes: A Problem-Solution Approach. To join the raffle, register your attendance!

See you at the conference!

Recommended Build 2014 sessions

build 2014

Finally, I had time to watch Build 2014 sessions. Here are the best I have seen.

Thinking for programmers (Leslie Lamport)

This session is intersection of Computer Science and programming. It will really makes you rethink your approach for solving problems and writing code. One of many interesting thoughts mentioned by Leslie Lamport was a role of specification. It is hard to disagree that in case of very complex code, need for change, after a few months or years, or by other programmer, will cause rewriting code for scratch if we do not have specification. I am recommending this session, because it is not demo of some new Microsoft tool/technology, but a solid piece of knowledge. It is not session for everybody, some may not like it. I love it!

Windows and the Internet of Things (Steve Teixeira)

This session is about writing Software for devices. But not only for PC, tablet or Phone. Also for embedded devices, or customized devices running on Windows Embedded. It is an overview of the future. Not only in Windows World, but at all. Steve Teixeira shows cool demos. E.g. controlling traffic lights using the Phone. He presents Intel Galileo, board which you can get for free by signing up! Only limited number available.

Building Azure Web Sites with Visual Studio Online “Monaco” (Chris Dias)

Visual Studio in Web Browser? I’m in! I am very impressed with progress which is being made in online version of Visual Studio. In addition to simple edits, there is a command line access, intellisense, git integration, side by side file comparison and more.

What’s New for ASP.NET and Web in Visual Studio 2013 Update 2 and Beyond (Scott Hanselman and Scott Hunter)

This is an update of ASP.NET features and future directions. Now, it really starts looking like LEGO pieces. If you are Web Developer, definitely worth to see.

Modern C++: What You Need to Know (Herb Sutter)

This talk is an overview of new features of C++. There is also 10-20 minutes about performance. Recommended if you are not familiar with new C++ features yet. For me, this session could be shorter, and some things could be skipped.

The Future of C# [and VB] (Dustin Campbel and Mads Torgersen)

First part (presented by Dustin Campbel) is about Roslyn. There is demo how custom code diagnostics can be created. Second part (presented by Mads Torgersen) is about new language features. My observation is that they started adding weird things to the language syntax. More over, Mads talk also about Visual Basic (for ~5 mins), which – as he claims – has a future as well. Mads already had similar session on other conferences (dotNetConf, NDC).

Go Mobile with C# and Xamarin (Miguel de Icaza)

Good introduction to Xamarin if you are not familiar with it. There is general overview and philosophy explained. There is also short demo. Good point to get started with Xamarin!

TypeScript (Anders Hejlsberg)

Anders Hejlsberg announced TypeScript 1.0. This session is an overview of TypeScript presented in a very solid way. Timestamped draft notes of the entire talk can be found here.

Developing Neural Networks Using Visual Studio (James McCaffrey)

This session is worth to see at least for first 8 minutes when James is summarizing entire build conference 🙂 The main content is good intro to Neural Networks. It awakened my desire to learn more about Artificial Intelligence and Machine Learning.

I’ve seen also: Building a Large Scale JavaScript Application in TypeScript (only slides, no code…), Building a Single Page Application with ASP.NET and AngularJS (I am not a fan of pasting large chunks of code during demos), Avoiding Cloud Fail: Learning from the Mistakes of Azure with Mark Russinovich (advanced, useful if you use Azure intensively), Building Modern Web Applications with Visual Studio and Web Essentials (just update in new Web Essentials features).

Programming Contest Tips

programming contest

Recently I participated in a few Programming Contests: Garmin Programming Competition 2014, ACM programming contest at my University and Google Code Jam 2014. I also remember my first contest in algorithms KPI-Open 2011, in Kiev, Ukraine. It was for teams up to 3 people. There was 16 problems to solve during 2 days. We solved one.

In some contests, there is no access to the Internet. It was the case during my first contest (KPI-Open 2011). We were able to use Java, C++ or Pascal. First problem we faced was: “HOW TO READ INPUT FROM CONSOLE IN JAVA?”. None of us remembered. Fortunately, we knew how to do it in C++. Thus we had to use C++ for the first day. We were more proficient in Java though and it slower our development. Before day two, we created check-sheet (we could bring as much printed papers as we wanted) with reading input in Java and some other tricks, which you usually google for. It allowed us to solve one problem. By solving problem I mean, to deliver solution, which pass tests in required amount of time. We solved 7-8 problems (or even more?) during those two days, but only 1 got accepted. It gave us 64 place (among 83 teams).

A few months after that, I participated in ACM programming contest at Kansas State University with one friend of mine. There was a progress: 1 problem solved in 5 hours (1 day). It is better that 1 problem in 2 days 🙂 Last year, I was 1-person team, and I got 3 problems solved (I was somewhere around 6-10 place). This year: I also solved 3 problems, but it gave me 3rd place.

Last year, I was also participating in Google Code Jam. In this contest you just need to deliver solution for given input. You download input file from website and you have some amount of time to upload solution (usually up to 10 minutes). Additionally, in most of problems there is small input set and large input set. The large set has more test cases and/or bigger numbers (e.g. int is not enough to solve it).

The most important thing during the Programming Contests is time. Time, in which you solve the problem.

My general tips (based on competitions I participated in) how to prepare for programming contests:

  • Make preparation before. Do not just walk-in (especially if it is your first contest). Check Programming Contest Year Plan – Yes a year Plan to be a better Programmer.
  • Take Introduction to Algorithms book to the contest.
  • Create (and print if no internet access is allowed) template for standard program. 90% of problems has N test cases. You need to parse it, compute solution and print. My approach is to read all input first and serialize it to e.g. Case class. Then I am looping through all cases and printing output. I prepared a template file, which allows me to save time during the contest.
  • Find out what languages/technologies are allowed during the contest and practice with it before the contest. Programming in Eclipse is different than programming in Visual Studio! Especially debugging.
  • Find out how you need to provide solution (send source code or just solution?) and how to read/write input/output.
  • If possible, find problems from previous editions of particular contest and practice by solving them.
  • Don’t be afraid to write bad code. You don’t need to comply with the best practices. It doesn’t matter, whether your code is not SOLID. Your code is not readable? Who cares? Don’t waste time for refactoring. If you really feel bad with the code your have written – refactor it after the contest. The only thing, which matters is, whether it solve the problem efficiently. Check solutions of the best competitors at Google Code Jam World Finals 2013. Can I write better code? Sure I can. But nobody cares, because they (not me) were the best in last year contest.

Solving algorithmic problems is only part of programmers’ skills toolset. If somebody is not good at it, it does not mean he is a bad programmer. He may be good at something else (e.g. programming embedded devices for aircrafts or designing the rocket system). However, it is good to practice problems solving and writing code. It is like daily workout. The programmer who wrote 1000 programs will be always better than one who wrote only 10. You will definitely become a better programmer with programming challenges.

My code for ACM contests and Google Code Jam is available on github:

Garmin Programming Competition 2014

Yesterday at my university, Garmin was hosting the Programming Competition.

Competition like that is a great opportunity to practice programming, algorithms and problem solving skills.

We could form teams of 1-2 students. My partner was Daniel Wang. We could use following languages: C++, C#, Java and Python. We chose Java. We were using Eclipse IDE and git to share the code.

Organizers prepared very real-life problems.

Competitions had two parts:

  1. Read and perform simple input conversion (1 hour).
  2. Reuse code from Program 1 and do more complicated operations with input (3 hours).

We solved part 1 without any problems. Part 2 required two programs: 2A and 2B. We solved both, but our programs didn’t pass all test cases. In 2A: 3/5 test cases passed, in 2B: 4/5. There were points for correct solution and bonus points (depended on the time when solution was submitted). Additionally, there was a timer showing how many bonus points we could earn sending solution now.

You can find problems description here. Our solutions are available on Bitbucket repository. Be aware that it is bad code, written under time pressure and never refactored. However, efficient enough to pass required time constraints. This is how you write code during programming contests 🙂

After competition we asked organizers about test input sets and they sent it to us.

This is the description of the bug we had and how we fix it (you can skip this part if you don’t want to read the description of problems):

The issue we had, was reading (shift mod 26) straight from the input file. Because e.g. shift = 45 should be effectively shift = 19 (45 mod 26). The program should stop when shift = 0. Then, when original shift was e.g. 52 we had stored shift=0 and we stopped (which was wrong). We thought that we should stop when the ‘effective shift’ is 0. Unfortunately, the test cases were stopping when the ‘original shift’ was 0. Fix was pretty easy (we just store two values: shift and shiftOrig for each cell). It would be very hard to fix this without test cases from organizers 😉 It was like in real-life: small detail caused significant error.

The challenge during programming competitions is that you cannot get all test cases. This time, there were 1 sample input per program. Which make sense, because otherwise everybody could just hardcode expected solution 🙂 What is worse, you cannot see the program output (in case of runtime error). Fortunately, guys form Garmin were nice and when we asked, they were showing us the output (on their machine). It helped us (a lot) in fixing the runtime errors (during the competition).

The next event I am looking forward is Google Code Jam. It starts in April 11, 2014 (Friday). Registration begins in March 11. I really encourage you to sign up. You can learn what various problems you can face and what you should consider during writing your programs. Additionally you can practice, apply your programming skills and compete with the best programmers in the World.

I am back!

Last two months were super busy for me. The end of semester (with compilers course‘s project), applying for a PhD studies, Christmas, New Year’s eve in Poland, and a job interview. I will tell you more about all of those things later in separated posts. Maybe not all, Christmas and New Year’s eve experience I will keep for myself 🙂

I am happy that all above is accomplished and I can get back to my routine (programming, blogging, reading books and learning new things).

It is worth to summarize the last year, which was quite successful:

  1. I started Master of Science in Computer Science program at the Kansas State University.
  2. I started this blog.
  3. I created twitter account and started using it.
  4. I co-organized dotNetConfPL (with Michal Franc and Pawel Sawicz).
  5. I almost maintained 4.0 GPA (I have 3.8 for now).
  6. I applied for Microsoft Student Partner position, but Microsoft rejected me.

The main goals for this year are:

  1. Graduate with Master of Science degree from Kansas State University.
  2. Start a new job.
  3. Run dotNetConfPL 2014.

I also would like to finally attend Dev Day conference in Kraków, but I am not sure if I will be in Poland on September 26.

During ‘the break’ I came up with a lot of ideas. I have 6 drafts for blog posts, 5 topics for a blog posts on the to do list and tons of ‘new, cool things’ to check out. When you get busy, because of School, work, personal issues etc. – don’t worry. Take a break, get all of more important things done and once you get back, you will be more happy and motivated than before.

don't just wish for a great 2014, make it so