Graphinder series articles
- Graphinder – Project Introduction
- Graphinder – I don’t need this covered…
- Graphinder – Minimum Vertex Cover problem
- Graphinder – Simulated Annealing algorithm
- Graphinder – Code review yourself
- Graphinder – Genetic Algorithm – Introduction
- Graphinder – Genetic Algorithm – Selection
- Graphinder – Genetic Algorithm – Crossover
- Graphinder – Genetic Algorithm – Mutation
- Graphinder – Genetic Algorithm – Wrap up
- Graphinder – Monthly Progress Report – March
- Graphinder – Async IEnumerable with Rx.Net and IObservable
- Graphinder – Reporting progress with Rx.Net
- Graphinder – TDD and starting from red
- Graphinder – Domain models vs Persistence models
- Graphinder – Queries and Commands vs Repository pattern
- Graphinder – Encapsulating persistence layer
- Graphinder – Solution changes and nuget hell
- Graphinder – Monthly Progress Report – April
- Graphinder – Application architecture
- Graphinder – Resources planning on Azure
- Graphinder – Quick summary and what next
- Quick thoughts after Daj Sie Poznac 2016 finals
I’ve come to think of this project as a simple way of having fun, coding and maybe learning a new thing if possible in a such range of time. I’ve ended up much profitable (in many terms) though.
I’d like to discuss progress on a project, but also progress on myself, as Daj Sie Poznac was (I think) meant to deliver both.
Current state of project in numbers
Feature progress: 5/10 features from roadmap met.
- Porting current solution with Simulated Annealing and Genetic algorithms working on Minimal Vertex Cover problem from initial, console application to library.
- Further decoupling for future IoC in ASP.NET MVC project.
- Implementing missing unit tests for part of the code.
- Reporting problem solving progress once upon a time.
- Parallelizing problem solving.
Github repository status:
- Commits: 121
- Average commit time: 10 P.M. – 2 A.M.
- Days with no commit: 7d
Related Trello tasks:
- Done: 20 tasks
- Refactoring backlog: 7 tasks
- Feature backlog: 10 tasks
- Feature icelog: 3 tasks
Things I’ve learned
Wow. So.. I’ve wanted to start with the fact that I’ve never wrote anything that should (and by the time, everything should) scale horizontally. I wrote a WebAPI, I wrote ASP.NET MVC twice, I wrote WPF application twice but they always went with linear, vertical structure from front-end to database.
First of all, during recent month of working on Daj Sie Poznac project, I’ve used up my free time between coding, working and spending time with family for reading. And by reading I mean LOTS OF READING.
I’ve focused mainly on microservices concept in current software development. Besides reading tons of articles where most of them made sense and some of them didn’t, I’ve taken a lot of knowledge (and what’s important: clarification) through talking with one of the Daj Sie Poznac competitors, that is Michal Franc (current Lead Developer @ JustGiving).
Also, I’ve learned immensely lot about Actor model, that is strongly promoted by Akka and it’s .NET port Akka.Net. Although my interest currently flows slightly towards Microsoft Orleans solution, I highly doubt I won’t try out both of them as proof-of-concept in Graphinder project.
Last, but not least – Reactive extensions aka System.Reactive aka Rx.Net. A super powerful tool for introducing reactive programming into your current application. I’ve already used it a lot via
UniRx implementation for Unity3D in Regalia – Of Men And Monarchs, but now I can see how little I knew using it until now. I’ve also already implemented some of the features using
System.Reactive in Graphinder, ie. async yielding from
IEnumerable, but I will cover it up soon in separate post.
Discipline I’ve enforced
Even though it’s a side-project for Daj Sie Poznac (and I hope, further on!), I’ve ended up with leaving my comfort zone and forcing myself to introduce an everyday discipline on:
- How often do I write code for project? I did my best to make sure it’s at least 3-4 times a week + some documentation writing/project organization
- How often do I write posts? This requirement of project made me think of reserving time for my thoughts to be persisted at last. I’ve also went over 2-posts-a-week schedule and even found some time to write posts covering other programming issue I’ve had on my work project.
- How far can I go with spaghetti or unreasonable code in my project? Well that’s always a tricky one but I’ve made sure that every decision I make to my project composition, is thought over twice and maybe even discussed with other Daj Sie Poznac participants on Slack. I guess I just don’t feel that MVP idea is an excuse of bad design at all. That change also made myself more cautious and disciplined about how I wrote my code at work
- Do I feel comfortable with TODO in my code? I’ve made myself come back to this little annotations many developers tend to leave around their code. I’ve used to accept that many of them will be left behind but I try to arrange my project schedule, so that there is a room for reasonable refactoring