Quick thoughts after Daj Sie Poznac 2016 finals

So we’re past ‘Daj sie poznac 2016’ finals and I feel a lot more pumped for further activities than I thought I would be. Competition was great but the finals were even greater. The amount of positive energy and interesting, really diverse topics that were presented made me really happy that I could be part of it. Kudos to the winner of competition, Piotr Gankiewicz and his Warden. Amazing project.
As for my current developer activity in web, Graphinder will currently be on hold, yet I’ve decided to try some new stuff and write my very first JavaScript library. You’ll also see me maybe not much more frequently but definitely in much more places around the web.


More of me in web

I feel quite guilty that I did not do my best to promote Graphinder and my blog per se in recent competition, therefore you’ll see me more and more in web. I’ve decided to share more and ‘attend’ more. As for a nearby future, you’ll hear me in upcoming episode of DevReview hosted by Dariusz Pawlukiewicz @ Forever F[r]ame. I hope you’ll like it!


New project: Selectibles.js

When working with plain ASP.NET MVC I’ve found it to be pain in the ass to use libraries like Select2 and Selectize.
They were often incompatible with jQuery (which I’m not a biggest fan tbh) versions I’ve used and I needed to juggle with them around just to make things (at least) work. What’s more I felt that even when they had many options, doing stuff my way was quite… dodgy.

Therefore, here it comes. My attempt for selectable controls for web.
I’m going to start with basic functionalities that will mimic Select2 from it greater days (ie. when I had 0 problems working with it).
Then, I’ll probably move on to some other controls that would be cool to have but optional to bundle (!).
I would also like to make sure the library does not need jQuery at all. It’s about time for web to move on I guess.

If you want to follow up with the project, it will build up on GitHub:

Graphinder – Quick summary and what next


As Daj Się Poznać 2016 is over, I’d like to share what I have learned, what is current state of Graphinder and what will come next for this project (as it’s not over yet!).


What I’ve learned

Technologies and design concepts

I’ve experimented with many concepts, frameworks and libraries that I wanted to potentially use in my project. Some of them have been already incorporated in project, some of them will be incorporated in nearby future and some of them were left out as decisions had to be made.
I was quite new to Reactive Extensions that I’ve already used in my project and will use even more in nearby future. As I’ve moved on to a very new approach for me – that is – microservices design, I’ve also learned a lot about Actor Model and frameworks based on it, ie. Akka.NET and Microsoft Orleans. As Orleans got my love for now, it will be used in Gateway.Api soon.
Finally, I’ve reached a place in my self development where I feel confident enough to embrace Test Driven Development, that I’ve also embraced during this project.

Soft skills and self development

Although it seems it wasn’t a case for every competitor in Daj sie poznac, I felt obliged to share my progress on both blog and Github.
I’ve enforced a week discipline and managed to both post twice a week and commit multiple times a week to the project.
What I’ve also learned is that none of us is bulletproof and creating a project after hours is a tough task from both social, family and physical point of view. Sometimes, I had to let go to get some rest, charge batteries and spend time with family but overall, I think the result came out great. 😉

Skills I have refreshed

As a developer with experience in ASP.NET stack but working currently in game developement in Unity3D environment, I’ve also managed to refresh some of the web stack skills, mainly ASP.NET WebAPI skillset, some of the web design concepts and Azure deployment and configuration concepts for web applications.


Current state of project

What has been completed

I’ve managed to complete two algorithms (Simulated Annealing and Genetic Algorithm) that work on one optimization problem (Minimum Vertex Cover), reporting reactively with Rx.Net on every progress update.
Completed solution finding gets persisted using Entity Framework to Sql Server, where I’ve embraced CQRS approach of commands and queries instead of Repository pattern.
There’s also basic mechanism for registering, connecting and delegating work to solution finding Web API instances in Algorithms service context from Gateway, yet there’s still much work to come.

What’s still to come

Well, actually the front end of application is.. well.. still to come. 😓
Also gateway is not fully functional (misses few administration and business concepts) and Orleans silo is waiting for deployment and configuration for progress report to SignalR hubs.

As for the rest, well… Let the code defend itself:


What’s next?

The project will be on hold until holidays will come. I’ve been quite busy with other projects and everyday life, so both gateway fixes and frontend implementation will need to wait. All I can promise is that project will not end with Daj sie poznac and it will go on as my playground for improving both architecture design and coding skills for upcoming future.


And, in the end, congratulations to all of the competitors that made it to the end. Good luck! 👍

Graphinder – Monthly Progress Report – April


Over week ago we’ve seen a second month of Daj sie poznac 2016 passing by.
Same as month ago, I’ve come to conclusion, that it would a good idea to note down what have I done in Graphinder project during last 4 weeks.

Current state of a project

April brought both progress on implementation and architecture levels. I’ve written less code and spent much, much more time actually thinking on why and how to do many things to stay both flexible and content about my decisions.


Algorithms microservice – persistence

First of all, persistence layer for Algorithms microservice in its bare implementation is in place.

While working on it, I needed to work my way around few hurdles, that is:

  • Unconventional domain layer – raw algorithms and optimization problems are generally a way of solving problems given by business, not a business domain per se; in Graphinder they are the core of the application
  • Unconventional data types – to preserver progress of algorithm, I need to persist its current state; persisting solution as One-To-Many association with Node table smelled like NO-NO solution, so I’ve ended up borrowing idea from Genetic Algorithm and mapped chosen nodes as an array of bool, mapping it layer as byte array to DB. Not an ideal solution but quite fast. Would probably need a revision for more universal approach for other optimization problems.
  • Completely hiding up knowledge of how persistence works – that was actually quite fun part to do and quite personally rewarding to see the outcome: any other layer that asks persistence to retrieve or save data, has no idea what’s going on out there and has no way to use it if not through queries and commands

  • Graphinder project – architecture

    Second of all, I’ve almost crystallized my idea on how an architecture of whole system would look like.

    While I’d like to keep this covered in a separate post, I’d like to note few things that will be part of project:

    • Graphinder.WebApp – application based on ASP.NET MVC, SignalR, D3.js and (possibly, but not from start) React.
    • Graphinder.Algorithm.GatewayApi – application based on ASP.NET WebAPI, serving as a gateway for scheduling work for algorithms and serving as CRUD endpoint for algorithms-related data; I’m almost 100% sure that it’d also share location with Microsoft Orleans.
    • Graphinder.Algorithm.WorkerApi – multiple instances of worker APIs that will be responsible for job retrieval, processing and persisting solutions for a problem and then returning it back to user; although written in WebAPI now, can be for example a NodeJS API and I’m definitely looking into creating one in a more distant future as proof-of-concept.
    • As project structure also changed, it made some of links in previous posts pointing to location that no longer exists on GitHub.
      I’d like to deeply apologize for that and as an atonement I’ve decided to… fix that next week. 🙈

      I’m also revising possibilities on fitting everything I want to show on each consecutive release on Azure. For now, I’ve finally configured virtual network based Windows Server 2012 VM with RDP access through VPN. Took only 4 hours. Huh…

      A week off from project

      You probably haven’t noticed if you didn’t visit my GitHub account page, but my contributions in April went down to 50% of what I’ve done in March. I’ve also ended up with 20 out of 30 days with a commit, as opposed to 23 out of 30 days in March.

      mwilczynski-contributions-graphinder

      One of the reason of such state is that – as I’ve mentioned – I both fought few hurdles in persistence layer and wanted to revise entire Graphinder architecture idea based on experience I’ve made during those 2 months.
      But what’s more important is that as a simple, human being I needed some rest from a project and I took a whole week off from writing both posts and (partly) code for Graphinder. I’ve been busy with code nonetheless as Regalia: Of Men And Monarchs is coming due to its beta and some of school work made me crunch on it a little more than usual.
      While it’s almost impossible in job environment to take a week off from a certain project not taking a break from work per se, I’m glad I could do this with Graphinder as now I’ve already grew hungry for new things that are waiting for implementation, starting from Monday and on!