Ceremonia zakończenia cyklu City Trail

W czwartek 13 kwietnia odbyła się ceremonia zakończenia cyklu City Trail. Jest to cykl 6 imprez biegowych w 10 miastach w Polsce w sezonie zimowym. Trasa każdego biegu liczy 5km, prowadzi po TPK i jest to prawdziwy mocny trail. W Trójmieście biegi odbywają się naprzemiennie w Gdańsku oraz w Gdyni.

Inicjatywę City Trail polubiłem od pierwszego startu w marcu 2014 roku. Cykl ten traktuję jako doskonałą okazję do mocniejszych treningów w trakcie przygotowań do startów docelowych w sezonie letnim. Progresja wyników i zajmowanych lokat w klasyfikacji generalnej cyklu napawa optymizmem:
• Wrocław 2014/2015 – 32 miejsce OPEN
• Gdańsk 2015/2016 – 23 miejsce OPEN, 6 miejsce kat. M20
• Gdańsk 2016/2017 – 12 miejsce OPEN, 3 miejsce kat. M30

Poniżej zdjęcie z dekoracji w kategorii wiekowej M30:
Pudło w kategorii M30

Pudło w kategorii M30

W tej białej reklamówce była nagroda-książka „Sztuka szybszego biegania. Technika, trening, taktyka” Julian Goater, Don Melvin. Jak przeczytam, to podzielę się wrażeniami na łamach tego bloga.

Inaguracja cyklu kaszuby biegają – Piaśnica 10km

Hej, poniżej zamieszczam moją relację z biegu w Piaśnicy z cyklu kaszuby biegają.

Minutowy rozkład dnia startowego:
Pobudka: 7:30
Poranne śniadanie:
7:40 – woda z cytryną + banan + gruszka
8:05 – duża biała bułka z margaryną, rzodkiewką, pomidorkami cherry oraz podłużną długą czerwoną papryką
8:35 – wyjazd do Piaśnicy
9:20 – dojazd na miejsce, dojście do biura zawodów
9:40 – rozgrzewka, 5min trucht, wymachy ramion
9:58 – wyjazd autokarem do Wejherowa na miejsce startu
10:10 – dalsza część rozgrzewki, 10min trucht, wymachy nóg i rąk przy drzewie 20 x na nogę, w drodze powrotnej 4 spokojne przebieżki po 3:30
10:30 – start zawodów.
Plan był taki, aby trzymać tempo w granicach 3:30-3:36. Pierwszy kilometr trochę za wolno, więc na drugim km przy sporym podbiegu lekko podkręciłem tempo. Później starałem się biec w trailu po 3:30. Po 3km dogonił mnie Marcin Góralski i aż do 8 km trzymaliśmy równe mocne tempo, ja trochę nadganiałem na podbiegach(czułem przy tym pośladki po poniedziałkowym martwym ciągu ćwiczonym z za dużym ciężarem), a on ładnie mi odchodził na zbiegach. W sumie mogłem biec szybciej, bo tętno nie było wygórowane(około 175HR), ale miałem obawy, czy utrzymam to dość wysokie tempo. Na domiar złego po 4km zaczęła mnie łapać lekka kolka, więc nie forsowałem tempa. Na 8km zaczął się asfalt i chłopaki mi trochę odjechali, 9km i znowu trail, tym razem ze sporymi nierównościami i korzeniami. Zabrakło trochę skupienia i ekipa odskoczyła na 30-40m, a szkoda, bo w oddali widziałem nawet czwartego zawodnika dzisiejszych zawodów. Ostatnie 100m to bezproblemowy sprint, więc siły zdecydowanie tego dnia były.

Pudło w kategorii M30
Pudło w kategorii M30

Wynik 36:58, 9 miejsce OPEN, 3 w kat. M30, średnia 3:41min/km, kadencja 95, ładnie! Cieszy też to, że od 3 miejsca dzieliły mnie tylko 32 sekundy, co jest do nadrobienia przy silniejszej psychice. 48 sekund za mną został Paweł Tomeczkowski, który minimalnie wyprzedził mnie 4 tygodnie wcześniej w Chwaszczynie.

Wnioski:

Średnie tętno z tego biegu to 173HR, czyli moje tętno z półmaratonu Gdyni przed rokiem! Widać, że ćwiczenia na core oraz zwiększona objętość roweru + 2 miesięczna jazda z TrainerRoad’em przynoszą efekty. Cel: dalej cisnąć core i zabawy z kettlebell’em(martwy ciąg, swing i inne).
Kolejny bieg zacząć szybciej i nie pozwolić grupie odskoczyć, na śniadanie zjeść standardowo bułkę z bananem, zabrać ze sobą makaron na wsunięcie po biegu. W trudnych chwilach spojrzeć na tętno, jeżeli jest poniżej 180HR, to dzidować do przodu, jeżeli nie, to wmówić sobie, że lepiej jest przyspieszyć, niż zwolnić.

Kolejne zawody za 3 tygodnie na 10km w Kartuzach. Nowa trasa, także nie wiadomo, na co się nastawiać, ale będzie dobrze, wystarczy tylko trenować z głową 🙂

Drugi rowerowy test FTP w karierze!

Powrót do przeszłości – pierwszy test FTP.

23 lutego przeprowadziłem swój pierwszy w życiu test FTP na trenażerze TurboMuin z czujnikiem Misuro B+. Wykonałem go z aplikacją Bkool. W tej aplikacji 20 minutowy test FTP jest widoczny jako 20 minutowy trening, więc 22 minutową rozgrzewkę przeprowadziłem we własnym zakresie z paroma 30 sekundowymi mocniejszymi akcentami. Średnia moc z testu to 299 WAT przy średnim tętnie 167, jako że jest to z założenia 105% FTP, to FTP wychodzi na poziomie 284,7 WAT, które zaokrągliłem w dół na 284 WAT.

test FTP - wykres z aplikacji bkool

Grzegorz G., który posiada Misuro B+ oraz pomiar mocy PowerTap dał znać, że wyniki w WATach podawane przez Misuro B+ są wg. niego zawyżone o około 30Watów(gdzieś na facebooku w grupie triathlon też znalazłem podobną opinię).
Dzień później przyszedł do mnie specjalny Bluetooth 4.0 dongle kompatibilny z TrainerRoad’em – wersja BLED112. Niestety nie mogłem pójść na łatwiznę i kupić ANT+, bo mój pasek HR od Polara nadaje przez Bluetooth’a.

Początki z Trainer Road’em były mega ciężkie. Rozpocząłem plan treningowy Olympic Triathlon Base Mid Volume i pamiętam, że pierwszy trening z 20 sekundowymi all-out na 200% FTP, to był dla mnie niewyobrażalny hardcore, miałem po tym problemy z zaśnięciem, a w nogach trening czułem ze 2 dni. Kolejny trening 5 x 10 minut Sweet Spot, zrobiony z mniejszymi problemami, ale też miałem problemy z zaśnięciem. Na szczęście organizm szybko się adaptował i kolejne tygodnie były coraz łatwiejsze. Co prawda zdarzały się cięższe chwile, ale wszystkie przetrzymałem 🙂 Po 2 tygodniach treningu na rozgrzewce przed zawodami biegowymi na 10km w Chwaszczynie przeciążyłem mięsień palucha dużego lewej stopy i 2 tygodniowa pauza z bieganiem. Co wtedy robi triathlonista? Więcej roweru. Zacząłem jeździć z TR po 4-5 razy na tydzień i znowu było ciężko.

Drugi test FTP.

Parę dni przed kolejnym testem FTP czułem się dużo mocniejszy na rowerze, ale bardzo obawiałem się, że nie poprawię poprzedniego rezultatu wystarczająco(co znaczy wystarczająco? 3%?). W przeddzień zrobiłem biegowy trening szybkościowy na 66% objętości sprzed przemęczenia mięśniowego. W dniu testu masakrycznie bolały mnie łydki, całe nogi były przemęczone po tym treningu biegowym, a może po prostu takie miałem wrażenie. Nadszedł 31 marca, w którym miałem zaplanowany test FTP. Okazało się, że test FTP w TR jest poprzedzony znacznie mocniejszą rozgrzewką, niż ta, którą przeprowadzałem w Bkool, ponieważ mocne akcenty są 1minutowe na poziomie około 100% FTP oraz występuje 5minutowy odcinek all-out, który poważnie daje w palnik. Ten test też bolał, jak cholera, miałem myśli, aby go zakończyć, ale w takich chwilach bardzo pomocne są mobilizujące napisy w TR, zagrzewające do boju 🙂
Oto rezultaty: 20 minutowy test dał 314 WAT przy średnim tętnie 167, co dało wartość FTP na poziomie 298 WAT. Nastąpiła poprawa o 14 WAT, czyli około 5%, czyli jak dla mnie duuuuuużo. Przy mojej obecnej wadze 64kg wychodzi 4.66FTP/kg.

Wnioski:

Jeżeli wierzyć w słowa z książki ‚Szybciej. Nauka o prędkości w triathlonie’ Jima Gourley’a:

10 Watów zaoszczędza 40-60 sekund na dystansie 40 kilometrów.

To 14 watów daje uzysk na poziomie 56-84 sekund na 40km, czyli około 1 minuty na 1/4 IM. Tyle samo, co założenie aerodynamicznego kasku, zamiast zwykłego, taniego z marketu 🙂
Czyli teoretyczny uzysk czasowy za kask został osiągnięty w przeciągu 5-6 tygodni wzmożonej pracy 🙂

Fajnie i liczymy na więcej!

Pływanie – kolejny test CSS i postępy

Od paru tygodni staram się robić 1 trening w tygodniu w oparciu o Tpace nazywanym przez SwimSmooth CSS(Critical Swim Speed). Jak wyznaczyć Tpace? Bardzo prosto, wystarczy zrobić testy na 400m MAX i po chwili odpoczynku test na 200m MAX. Od strony technicznej Tpace bardzo dobrze opisał triathlonbyjanusz.

Później wpisujemy swoje wyniki do kalkulatora CSS i otrzymujemy tempo w którym staramy się pływać 100/200/300/400m w seriach o łącznej objętości 1.2-1.8 km w zależności od naszej aktualnej szybkości.

Test CSS wyniki

Moje testy z dnia 27 marca dały:
400m – 6’19” [średnia 1’35”][międzyczasy 1’30” 1’37” 1’38” 1’34”]
200m – 3’08” [średnia 1’34”]
Podstawiając powyższe wyniki do kalkulatora otrzymujemy CSS na poziomie 1’36″/100m. Szybko. W porównaniu do mojego poprzedniego CSS 1’40″/100m z testu z dnia 24 lutego jest to duży skok. Moje międzyczasy wyniosły wtedy:
• 400m – 6’24” [średnia 1’36”][międzyczasy 1’30” 1’38” 1’38” 1’38”]
• 200m – 3’05” [średnia 1’32″5]
Różnica międzyczasów niewielka, a CSS aż 4 sekundy różnicy na 100m.
Progress = (6’24” – 6’19”)/6’24” = 1.9%

W planie treningowym mam 3 sesje na tydzień po 45-50min:
• Sesja na CSS 1.4-1.6 km
• Sesja na szybkość, 10 x 25m z 15″ odpoczynku, lub 8 x 50m z 30″ odpoczynku
• Sesja na długą rozgrzewkę, pull z gumą i żelazną piątkę(5 x 100m start w 4′, pływane szybciej niż CSS)

Cel na najbliższą przyszłość – sukcesywnie wydłużać 1 sesję basenową aż do 1.5h

Use Double loop TDD in Core 1.0 part II

After  some problems with double loop TDD it is time to some more errors.

As I mentioned in previous post with double loop TDD I created test project with BDD tests written in BDDfy. When I tried to compile the solution I realize that I do not add a reference to the tested project based on Core 1.0 template. And here problems comes, because Visual Studio do not let me to add this project reference. Incompatibility in .Net Framework versions 😉

AddingNewReferencesProblem

Then I realize I must create special test project with compatible version to Core 1.0. Instead of choosing ‚Test + Class Library’ You have to pick up ‚Web + Class Library’ and do not worry about the above .NET Framework 4.6, the project will be created properly 🙂CreateTestProjectForWeb

Then I have added reference to existing template Core 1.0 project and try to build. Unfortunately Visual gave me dependency errors:

BuildReferencesProblem

Then I came to EntityFramework official issue about adding EF to DLL project. Changes proposed in above issue not helped me solve dependency problem 🙁 I found out solution in xunit page’s note that in project.json I must change ‚dotnet5.4’ to ‚dnxcore50’. Then project builds properly, oh YES!

After all, to the test project, I moved classes created in part I of double loop TDD and then tried to build again. It occurs that both the Coypu and BDDfy do not have support to Core 1.0 RC1 and I must to let go with integration tests with that form.

Give a try to BDDfy for .NET

Last week I wanted to try to use Double TDD  approach, looking at Waldemar Mękal’s presentation on dotNetConf 2015th conference I saw that he uses BDD in his double TDD.

I decided to write some words about BDDfy which is the simplest BDD framework for .NET or so project creators wrote.

Behaviour-driven Development(BDD) is a software development process that emerged from test-driven development. Behavior-driven development combines the general techniques and principles of TDD with ideas from domain-driven design and object-oriented analysis and design to provide software development and management teams with shared tools and a shared process to collaborate on software development” wikipedia says.

I installed BDDfy via NuGet Console:
Install-Package TestStack.BDDfy

And write sample tests based on these requirements(mapped from Waldek presentation):
#1
Given there are no companies
When I go to companies page
Then I see a text 'There are no companies loaded yet.'

#2
Given there are defined companies
When I go to companies page
Then I see full list of defined companies

First requirement implementation using BDDfy fluent API:

[Fact]
public void NoCompaniesInTheSystem()
{
    new CompaniesTestsContext()
        .Given(c => c.ThereAreNoCompanies())
        .When(c => c.IGoToCompaniesPage())
        .Then(c => c.ISeeATextNoCompaniesLoadedYet())
        .TearDownWith(c => c.Dispose())
        .BDDfy();
}

You can see that above test is self descriptive and describes behavior, which is the basis of BDD.

Second requirement implementation is very similar:

[Fact]
public void ManyCompaniesInTheSystem()
{
    new CompaniesTestsContext()
        .Given(c => c.ThereAreCompanies())
        .When(c => c.IGoToCompaniesPage())
        .Then(c => c.ISeeATextManyCompaniesLoaded())
        .TearDownWith(c => c.Dispose())
        .BDDfy();
}

Both cases using CompaniesTestsContext class, which hides implementation details. This class contains mentioned by me in previous post helper classes Client(based on Coypu) and SystemUnderTest(based on Microsoft.DotNet.Hosting).

Use Double loop TDD in Core 1.0

Today I will try to reuse Double TDD approach taken from Waldemar Mękal’s presentation on dotNetConf 2015th conference.

What Double loop TDD is?
DoubleLoopTDDIt is TDD but is doubled 😀 I am just kidding 😉
It is adjusted to start writing new feature from failing acceptance test and then write in sequence unit tests with mocks and after each test pass replace mocks with proper impementation until acceptance test pass.

Waldek presented his sample with helper classes, SystemUnderTest and Client, which land in the Infrastructure folder. Client uses Coypu as UI tester browser, so I opened NuGet Package Console and:
Install-Package coypu

When implementing Client class Resharper gives me a hint(figure below) to use Null Propagation(?.) new C# 6.0 feature. So then I read something about it to not be a noob in this subject. In short: When you use ?. it will be converted into an in-line if-statement(read more details here).
NullPropagation

Second part is SystemUnderTest, which uses Microsoft.DotNet.Hosting.WebHostBuilder(). Again NuGet Package Console:
Install-Package Microsoft.DotNet.Hosting

… and then many problems arises…

NuGet returns Logging warning and Concurrency error:
Install failed. Rolling back...
Package 'Microsoft.Extensions.Logging.1.0.0-rc1-final : Microsoft.Extensions.DependencyInjection.Abstractions [1.0.0-rc1-final, ), Microsoft.Extensions.Logging.Abstractions [1.0.0-rc1-final, )' does not exist in project 'FinData.Web.Tests'
Install-Package : Failed to add reference to 'System.Collections.Concurrent'. Please make sure that it is in the Global Assembly Cache.
At line:1 char:1
+ Install-Package Microsoft.AspNet.Hosting -Pre
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Install-Package], Exception
+ FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand

So I googled out and read something about gacutil.exe for registering *.dll in GAC.
Where to find gacutil? WIN -> Developer Command Prompt for VS20XX -> where gacutil
Gacutil localization depends from the framework version, but common part is: %systemDrive%\%ProgramFiles%\Microsoft SDKs\Windows\vX.XA\bin\NETFX X.X Tools\gacutil.exe

You do not need to know, where gacutil is. To add assembly to GAC just run Developer Command Prompt for VS with Administrative privileges and then run command: gacutil /i PathToDll.dll. Then console should give info: Assembly successfully added to the cache.

Yet another question: Where is it really installed? To What localization? When gacutil runs gives You info about own version, in my case Version 4.0.30319.0 says that most likely newly added *.dll comes to
C:\Windows\Microsoft.NET\Framework\v4.0.30319.
But my test project has .NET Framework version 4.6, so this assembly addition to GAC was unsuccessfull. I must manually copy/paste assembly to ReferenceAssemblies localization, in my case
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6

Then I saw, that after successfull Hosting installation by NuGet I have a lot of stuff in packages folder. I do not like this.

After these problems I started to understand, why Waldemar Mękal told that he prefers to hold test files in the same project, which is tested. In some next post I describe, that above problems are just the beginning, but first I will take closer look at BDD approach, which was used in this presentation.

ASP.NET Core 1.0 First steps

In this week at last I installed Visual Studio 2015 on my computer.

Then I installed Asp.NET Core 1.0 RC1(Release Candidate 1), which was released in November 2015. According to the roadmap RTM(Ready To Manufacture) version should be available approximately Q3 2016.

I run Visual Studio and add new project ASP.NET 5 to my solution. I chose authentication as Individual User Accounts and after project creation let nuget restore many packages including EF7.

When I clicked to Debug my app on IIS Express, Visual opens browser with new page, but what is interesting in Visual I can see Diagnostic Tools bookmark:

Diagnostic Tools

It shows diagram of memory usage by process, when GarbageCollector runs, which generation, duration of run and if was forced/unforced(show it after mouse hover the yellow object). It also shows percentage of all processors usage. Cool!

Short description of project’s components is on docs asp dot net.

To run web page without using Visual Studio, then DNX(Microsoft .NET Execution Environment) must be used. It provides host process, CLR hosting logic and can run also other types of .NET apps.

More about DNX, DNU, DNVM and other ASP.NET names You can read there.

I have published my newly created website to Azure on financialdata azurewebsites net

Choosing project licence, is it really simple?

I have to admit, that I’ve never before think about choosing licence for my projects, but this time setting up new project on GitHub I decided to stay longer on choosing licences from given list(picture below). I have made this decision, because I wanted to learn sth new about differences in using many types of licences.

licenses

At the beggining I know, that my project has to be open source. GitHub created very helpfull page with great address choose a license dot com, where are expleined the differences between MIT, Apache 2.0 and GNU v3.0.

  • MIT – short liberal licence. It lets people do anything they want with your code as long as they provide attribution back to you and don’t hold you liable. Examples of usage: jQuery and .NET Core
  • Apache 2.0 – similar to MIT with difference, it provides an express grant of patent rights from contributors to users. Examples of usage: Apache, Swift and Android.
  • GNU v3.0 – requires anyone who distributes your code or a derivative work to make the source available under the same terms(read also open source in my case). Examples of usage: WordPress, Linux, and Bash

When licences are used there is need to attach copyright header at the beginning of the every source file included in the project. Content of the licence also should be included among project files.

This time I chose None licence (I think my choice was dictated by the fact, that I’m lazy), which is equivalent with choosing Public Domain licence. That’s mean everyone can change my code and apply it to own projects, but I do not have obligation to insert copyright headers to my code files 🙂

During project development I may change decision and choose other licence kind.

Let’s the party begin

Some time ago with my good friend I wrote an application, which uses financial data for Polish equity market. Unfortunatelly, as it comes to most of homemade projects, work on this project was suspended, before the project started to presented some value added. My friend let me to reuse part of this application in the competition Daj się poznać.

At the begining I am going to write about some little problems upon migration of existing project. I copyied project files from existing solution to newly created solution. Then problems occurs.

First of all NuGet compilation problem:

Error 1 This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is \.nuget\NuGet.targets.

One look at the packages folder(where NuGet downloads packages) and all packages were properly downloaded. One little question to „uncle google” gave me the answer from stackoverflow. After removing appropriate lines from *.csproj and repeated the operation on Test project, solution becames properly compile. JUUUUPI 🙂

I changed some class names and then next problem arise. Class name and the same namespace name bode problems, indeed. In this case when creating system under test in the test project there should be used code sth like this:
sut = new NewsService.NewsService(…)
That means there is a need to repeat name. I am not proud of it, but for now I have to leave it in that form.

And finally the last problem. I run unit tests and… FAIL. Auuuu… So it ends, when CI(Continuous Integraion) is not used in the project. Tests are run from time to time, instead of after every little code change. I must put effort to implement apps with TDD.

Problem with unit tests was due to use RhinoMocks IgnoreArguments() method. I also gave method parameters and of course parameters were ignored, a few minutes of life vanished 😉

Problems with app import solved. Keep fingers crossed for evolution of my project in the competition 🙂