C#

My Pomidoro Windows 8 app is getting famous

Over a year ago I created simple Windows 8 app: Pomidoro (the name ‘Pomodoro’ was already taken at the Windows Store). And yes, it is for applying The Pomodoro Technique. I published it to the Windows Store on January 7, 2013.

Pomidoro screenshot

The reason I created this app, was to learn Windows 8 Metro apps development.

From time to time I receive e-mails that my app got some third party award or was reviewed by some website I have never heard about.

A few weeks ago I received e-mail from Best Windows 8 Apps. My app received Editor’s pick award:

Pomidoro Editor's pick award

A few days ago I received e-mail from AppFeds. They states, that they are tracking 116,642 apps. Windows 8 Store contains over 144,739 (source). Now, my app is 579/673 in the productivity category.

Pomidoro Windows 8 app in Ranking in Productivity

Pomidoro Windows 8 app in Top Free Ranking in Productivity

I checked how many productivity apps they have and I was a little bit surprised. They have 673 apps in category Productivity. How is this possible that my app was ranked 958 in January 31? Did they have more apps or they are just lying? First warning about credibility of their website.

EDIT (after clarification from AppFeds, see comment): They have more than 2800 apps in category Productivity and almost 700 of them are well received. My app was 958 in January, now is 674. Yesterday (before the comment from AppFeds was posted), my app was 557.

Pomidoro ranking in productivity March 12, 2014

But, in the same time, my app is in page 38, when I sort Productivity apps, by ranking (with ‘Well Received’ filter off). There is 10 apps per page, which means my app is in top 380(?) Why there is a difference between the list and above chart? Maybe guys from AppFeds can explain that as well? [End Of Edit]

Yesterday I received another e-mail. It made me to create this post. The e-mail was from I Love Free Software:

Hi jj09 team,

I am Ubaidullah from www.ilovefreesoftware.com. We recently reviewed Pomidoro on our website here:

http://www.ilovefreesoftware.com/24/featured/free-pomodoro-timer-apps-windows-8.html

We are a popular tech website and get hundreds of thousands of visitors from over 150 countries around the world.

It would be great if you could add a link to the review on your website. This would tell your visitors that we have reviewed your app as one of the best free app available (and that would add up to your credibility as well).

I have attached a badge with this mail which you can flaunt on your website, and link that to the review. Alternatively, you can just add this code:

<a href=”http://www.ilovefreesoftware.com/24/featured/free-pomodoro-timer-apps-windows-8.html” title=”Free Software” ><img border=”0″ src=”http://cdn.ilovefreesoftware.com/wp-content/uploads/2011/03/ilovefreesoftware_reviewed_5Star.png”/></a>

Feel free to get back to me with any questions.

Have Fun,

Ubaidullah Khan
Collaboration Manager

I checked this review. Doesn’t look like a simple scam. It is neither high quality review. The cool thing is my app is 1st of 4 best Pomodoro apps 🙂 This is the badge from them:

Pomidoro - I love free software reviewed 5 Star

* Of course I didn’t paste link provided by them. The picture is stored on my server for security reasons.

Is that means my tiny app is good? Maybe average Windows Store apps are not very high quality (if app created within one day can be better than them)? Or maybe there are people who trying to get their websites popular, by scaming Windows Apps’s creators? I think the last reason is the most likely 🙂

Now, let’s look at the most accurate statistics – Windows Store:

Pomidoro Windows Store stats

The problem here is following: how can I check how good my app is? The best way to do that is compare it with other apps. But how? I was trying to find some Apps rankings on Windows Store websites and I didn’t find any. Maybe I am not good google user. I found some ranking on Microsoft Store for Windows Phone (using Bing), but not for Windows 8.

I know, I am feeding scammers by linking these third party websites here. On the other had, some of them (e.g. this or that) have better UX than Windows Store websites. I spent 10 minutes trying to find Windows Store Apps rankings online and I failed. I know you can sort Apps in Windows Store by popularity, but why it is not available online? In the same time, third party websites like AppFeds have pretty nice and clear UX for Apps Catalogs. Their data may be not accurate, but the UI is nice. Maybe guys from Microsoft should think about something like that?


The Story of dotNetConfPL

It is all about people and cooperation!

Long story short

April 25-26 – dotNetConf took place, online conference for .NET developers, organized by Scott Hanselman and Javier Lozano

April 27 – I text Pawel Sawicz, that we can organize something similar with Polish speakers and name it dotNetConfPL, he said: “it’s a good idea”. (motivation++)

April 28 – Pawel told me that Michal Franc is also interested and we created google doc to write down ideas and todos. (motivation++)

May 24 – We ask Scott Hanselman whether we can use dotNetConfPL as a name of the conference (because it’s very similar to name of his conference). He and Javier Lozano confirmed in the same day and wished us good luck. (motivation++)

June 6 – We sent e-mail to Maciej Aniserowicz, with a proposition to be a speaker at our conference.

June 7 – He responded: yes (we had first speaker!). (motivation++)

After that, we were inviting rest of speakers and most of them accepted our invitations. We really appreciate this, because they didn’t get any benefits from that.

July 14 – We announced dotNetConfPL on facebook and gain almost 50 registrations for the event within 1 hour! (motivation++)

The week of the conference

A few days before the conference we did initial testing with speakers. To check, whether their microphone, resolution, etc. is set properly. Sometimes we had issues with Google Hangouts. Solution for that was simply disconnect and create a new ‘hangout’. Our initial plan was to make only 1 hangout for entire conference, because each one has different link. We wanted to avoid forcing people to refresh the website or use of SignalR. However after that, we decided it will be better (safer and more flexible) to create separate ‘hangouts’ for each speaker and update link using SignalR.

Website for conference was created in ASP.NET MVC framework. The SignalR+CounchDB feature was implemented day before conference. After the conference I found interesting file in our solution:

dotnetconfpl - code

It is worth to mention that during the conference I was in Manhattan, KS, while Pawel and Michal were in Wroclaw, Poland. The image below, is my Command Center. ThinkPad X220 is connected with 2 monitors and through it I am connected to speakers. On MacBook I am connected via Skype with Michal and Pawel. On Surface I have live streaming (about 30 seconds delay) to be sure everything is working fine. The only issue I had, was not enough ears. I had only two: in one I was connected to the speaker, second – Michal and Pawel, and if I had third, I would be able to track the live streaming 🙂

dotNetConfPL - center

Sessions

All sessions were in Polish. If you don’t speak Polish, you can mute the sound, play this in background and watch 🙂 You won’t get full experience, but still can get a lot from each session!

What is cool, all of them are for beginners and non-beginners in the same time. Which means, everybody will learn something from each session. Additionally: all of them are in HD (720p). Google enabled it by the end of August.

Maciej Aniserowicz: Unit testing in .NET

Maciej shows TDD live example. From nothing to well-tested communication with external API.

Filip Wojcieszyn: scriptcs – C# on diet

Filip shows how to use C# in Console and/or in SublimeText.

Jakub Gutkowski: JavaScript for C# developer

Jakub shows differences between C# and JavaScript, and language flavors every developer should be aware of, which may cause hard to track bugs.

Tomasz Janczuk: Node.js, Edge.js and Windows Azure

This session blew my mind (and not only mine). Edge.js allows you to mix Node.js, C#, F#, IronPython, PowerShell and T-SQL code in one file!

Maciej Grabek: Windows Phone 8 Tips & Tricks

Maciej shows set of useful(8) tricks for WP8 developers. From displaying helper-grid during development, to how to get more ratings for your app.

Summary

Everything went well. We didn’t have any problems with streaming (thanks Google Hangouts) and website (thanks Windows Azure and SignalR). I noticed that sometimes, on my Surface RT, IE11 wasn’t refreshing the link. But, come on…it’s IE, so we can ignore it 🙂

We had room on JabbR for discussion and ask questions to speakers. For a few minutes, even David Fowler (one of SignalR developers) visited it.

I am very glad that many people attended the conference. We had more than 600 registrations, almost 100 people in JabbR room and around 100-200 online viewers. But many people were watching the conference together, and in this case 1 online viewer = more that 1 physical viewers.

dotNetConfPL - atCompany
dotNetConfPL - pizza

Thank you very much for all speakers! You did a great job guys, all sessions are international level!
Thanks to Michal and Pawel for organizing this conference with me.
Thanks to Scott Hanselman and Javier Lozano for inspiration.
And…thank you very much for all of you who were watching the conference and spreading the news!

EDIT:
Short list of tools/technologies we were using for the conference:

  • Google Hangouts
  • ASP.NET MVC
  • SignalR
  • CouchDB
  • Windows Azure (to be able to scale the instance, depends on the number of users)
  • Google Docs (as a database for most important information)
  • Trello (for tasks management)
  • AppHarbor (as test server)

dotNetConfPL – online conference for .NET developers

Together with Michal Franc and Pawel Sawicz we are organizing online conference for .NET Developers: dotNetConfPL. It will take place on October 12 (3pm-10pm UTC+2), on the Internet! We have many great speakers and hot sessions.

Attendees will be able to ask questions through dotNetConfPL2013 room on JabbR.

Today, we have over 500 registered users! Additionally, during the conference we will give away 6 ReSharper licenses (thank you JetBrains).

Registration is not obligatory, but only registered users will have chance to win ReSharper licenses.

See you there!


OWIN and Katana – what’s the big deal?

OWIN stands for The Open Web Interface for .NET. It is a standard for communication between .NET web servers and web applications. It defines required elements for HTTP request (details). It is inspired by Rack from Ruby on Rails World. Katana is implementation of this standard. We can say that it is a lightweight web server for .NET. In fact, it is more than that (more info here).

Demo

First, we need to create application project. Let’s create ‘Empty Web Application’ (it might be also Console App).

OWIN - empty Project

Next, we will install two NuGet packages (using Package Manager Console):

Install-Package Microsoft.Owin.Host.SystemWeb

Install-Package Owin.Extensions

Then, we need to create ‘Startup class’.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Owin;

namespace OwinDemo
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.UseHandlerAsync((req, res) =>
            {
                res.ContentType = "text/plain";
                return res.WriteAsync("Hello Katana!");
            });
        }
    }
}

Now we are ready to run our web server, but you may get following error:

OWIN - error

Fortunately there is easy fix for that. You need to modify Web.config file, adding following code in configuration section:

<appSettings>
    <add key="owin:HandleAllRequests" value="true"/>
</appSettings>

Then you can run server (CTRL+F5) and you should see:

OWIN - Hello Katana

Summary

So, what is big deal? We have web server in 7 lines of code! We do not need IIS as only one, right choice.

Of course we can do much more sophisticated things. Such as routing, WebAPI or even SignalR. You can also debug it easily.

More info about OWIN and Katana on ASP.NET website: An Overview of Project Katana
There is also screencast on Channel9: The Katana Project – OWIN for ASP.NET (it shows e.g. how to use WebAPI from 35:40).
Here is very nice article how to use SignalR with Katana.

Katana is Open Source and available on CodePlex.


scriptcs – C# in console

It was always bothering me, when I wanted to run one simple command, and I needed to create new C# console project in Visual Studio to do that. With scriptcs I can finally do that in console. Project scriptcs allows you to run single commands and also C# script files.

Installation

The easiest way to install scriptcs is Chocolatey (‘apt-get’ for windows). If you didn’t hear about it, you should definitely try it out. To install Chocolatey run the following command in console:

@powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%systemdrive%\chocolatey\bin

Once you have Chocolatey installed, you can install scriptcs:

cinst scriptcs

Chocolatey will install scriptcs to %APPDATA%\scriptcs\. You need to update your PATH accordingly, to easily run it from command line.

Getting started

Once scriptcs is installed and added to your PATH, you can run it with scriptcs command:

C:\> scriptcs
scriptcs (ctrl-c or blank to exit)

> var message = "Hello, world!";
> Console.WriteLine(message);
Hello, world!
>

C:\>

You can also create a script hello.csx:

var message = "Hello, world!";
Console.WriteLine(message);

And run it from command line:

C:\>scriptcs hello.csx
Hello, world!

You can find more about scriptcs on scriptcs.net.

EDIT: You don’t even need Console.WriteLine to print variables (thanks Filip W.):

C:\>scriptcs
scriptcs (ctrl-c or blank to exit)

> var message = "Hello, scriptcs!";
> message
Hello, scriptcs!
> int four = 2 + 2;
> four
4
>