Hello, world!

This post can also be named "Why am I so crazy to start my own blog in 2018?". There are a lot of awesome articles and videos which describe almost everything. And no doubts, there are a lot of cool platforms such as Habr, Medium, CodeProject and other ones with a big community where chances that an article posted there would be read are much higher comparing with having a small blog like this one. A short answer would be "because I want and because I can!". If you want a longer, more descriptive and boring answer you can find it under the teaser. But you should realize that it is something like my own manifesto, so if you do not have a lot of time, have real life or at least your own hobby and do not think about creating your own blog you could skip it without any doubts.

Big Disclaimer

With some of described here things I faced in my job, with other ones I had a deal while I was working on my thesis work or researching some open-source and not very well protected software (if you know an assembler that means any software is an open-source for you). Judging by my experience, even foolish mistakes can be made anywhere regardless of product size and age, a team which developed it and its experience and technologies which were used. But you should keep in mind that everything in this blog is my personal view on things, cannot be associated with my employer or anybody who pays me money and especially the most foolish things do not belong to any software which is associated with the last ones. Also I should warn that some posts can be absolutely cruel and contain terrible and absolutely incorrect things or irrational ways of doing something and can have a negative influence on your brain, so if you worry about stuff like that, please keep yourself safe and stop reading this blog.

Why does the universe need one more blog?

During my work and research experience, regardless of work which I was doing, I have written a huge number of different notes: receipts for some repeated tasks, cheat-sheets for some software, bunch of URLs dedicated to some specific subjects etc. All notes have one common feature -- each of them looks like crap:

u - x86 unassemble
!dumpmt -md 034cb514
!muf 034cab08
!bpmd -md 034cab08
!CLRStack
!IP2MD

* https://blogs.msdn.microsoft.com/cobold/2010/03/01/collecting-crash-dumps/
* https://medium.com/@minhdn/assembly-and-windbg-c68ce74384f4
* https://github.com/poizan42/soswow64

Of course, these notes had some value but in such inconvenient way that in some short period of time I could not understand what they were about. Later, this situation became a little better: some parts of my notes were transformed in our internal work knowledge base and it was a big motivation for me to make them understandable: they should be read by my coworkers. It was cool because I could answer a big number of questions asked by my coworkers using links:

  • This shit blows my brain out...
  • Keep calm! It was already described in http://internal-sphinx/universal_answer.

As an advantage I’ve got the following: in each workplace I have an access to my personal notes and can quickly recall some things. Unfortunately, this internal knowledge base restricts my imagination does not solve all tasks:

  • Not all of my notes are appropriate for a work knowledge base because they are not limited by only working tasks.
  • They can be interesting not only for my coworkers: I write them because I have not found them in a form which would be necessary for me and some other dumb like me can be interested in them in the exact same form.
  • They were accessible only from our internal working network and it was impossible to access them outside my office when they could be very helpful.

It led to the creation of this blog, so the best definition of it would be: "personal notes for a little bit wider audience than just me". But in any case, I will be glad if this blog is helpful for anyone and I will be happy to receive any feedbacks.

Why have I chosen so strange platform for my blog?

Because I do not think that it is strange:

  • I use Git to keep all blog sources. Git is my almost every day tool and GitHub is one of the best implementation for Git front-end. So it is also not a bad idea.
  • I use Nikola to compile blog to static HTML content. Static generators are quite popular now and Nikola is not so popular. But Nikola is a very extensible and based on Python and Rest markup which are also my almost every day tools. Though Python is not my main language (at least now), a lot of work and my own utils are written on it. And our biggest work knowledge base is based on Sphinx which is also Python and Rest. So it is also not a bad idea.
  • Despite the colors for this blog are taken from Ethan Schoonover Solarized Palette all other parts of theme were made by myself. No doubt, there are so many widely tested, free and ready-to-use themes but it was quite fun to create my own because the Internet goes ahead, a lot of cool specifications were accepted and there are no customers who want IE6 support (disclaimer, this blog does not work on IE6). So it is also not a bad idea.
  • Big platforms attract a big community but what do they demand in return? At least they do not give access to a big part of metrics and statistics. I really like digits and would not allow these bastards to take them from me! Moreover in my inexperienced age I skipped SEO, metrics and other scary but interesting words: so creating a personal blog is a good opportunity to catch-up this experience. So it is also not a bad idea.
  • Big platforms have their own restrictions for articles, their content, language etc. But, firstly, both planned languages for this blog (English and Russian) are not my strong suits so I could have stuck on edit check for a long time or spoil my "karma" to the main enemy of a platform. Secondly, this blog is "personal notes for a little bit wider audience than just me" so not all posts can be absolutely ready to be published on big platforms but can be published here. And finally, what is much closer to the main idea of this blog: a quick preparation of a useful note which can be updated and expanded in the future. So it is also not a bad idea.
  • All work required to be developed as well as maintaining of this blog takes a lot of time which I can spend on something else. But in return it gives me an opportunity to get a lot of experience which I could not get otherwise. And, if it is helpful for anyone it will be even better than I could dream. So it is also not a bad idea.

Why anticode?

Because I really think that "code" is the one of the worst things in the modern world. Of course, not any "code" can lead to this idea, but there are some short stories why I really think so:

  • Almost every developer at university has faced with this reference code which deletes node from a single-linked list:

    remove_list_entry(entry)
    {
      prev = NULL;
      walk = head;
    
      // Walk the list
    
      while (walk != entry) {
        prev = walk;
        walk = walk->next;
      }
    
      // Remove the entry by updating the
      // head or the previous entry
    
      if (!prev)
        head = entry->next;
      else
        prev->next = entry->next;
    }
    

    When I faced with it at university I had a strong feeling that there was something wrong and this code should be much easier. I had this thought for a long time (maybe because I, myself, did not implement a single-linked list every day) until I have watched a TED talk with Linus Torvalds. You can look at his version of code in a video from 14:10 (but I recommend to watch the whole video). I hope that you agree with me -- the same code from a Linux creator looks much better and you can understand why I do not like "code":

    remove_list_entry(entry)
    {
      // The "indirect" pointer points to the
      // *address* of the thing we'll update
    
      indirect = &head;
    
      // Walk the list, looking for the thing that
      // points to the entry we want to remove
    
      while ((*indirect) != entry)
        indirect = &(*indirect)->next;
    
      // .. and just remove it
      *indirect = entry->next;
    }
    
  • In my first year of teaching one of my students wrote a quick sort algorithm in more than 400 rows. This code looked quite good, because it had a lot of comments and only few negative sides: nobody could understand how it worked but it definitely did not sort arrays. At that moment I was laughing how he could bloat 15 rows to more than 400 and made it so tangled. Maybe a student tried to append some optimization here and could not implement it correctly? Nope, it was absolutely a base implementation without any optimization at all. The secret of this not-working bloat-hell code was in creation of unnecessary extra cases and incorrect implementation in some of them.

  • In some projects and even at my work I have faced with a very strange motivation to bloat code: "this method/code does not work in some cases so we copy it and make another version specially for these cases". It is a f* madness! I understand that sometimes rewriting of a legacy code can lead to some extra tests and other negative consequences. But what would we get if we followed this way:

    • We do not fix the first issue and we add some other issues. Because if another version covers all cases it means the first version is not necessary but we know that it is not correct. So we have two defective implementations.
    • If first methods contain another issue we can be almost sure that in the future it will be fixed only in the first method. And a duplicated issue will live until QA does not find a similar issue for the second method.
    • It spoils your karma very bad. Imagine what a developer would think about you when they saw two similar methods with comments that the first method works only for some part of cases and second for another... or without any comments at all.

All described above, with a currently existed requirement to develop software faster and faster, leads us to such a great number of bugs in software that I cannot order pizza without facing with at least three of them. Sometimes I even think that one day we can go back to the stone age and order pizza by a loud scream. It is difficult to be against business tasks and customers who want a lot of features and want them ASAP but sometimes somebody should stop and say: "Please wait! We need to take pause and get rid of some piece of shit!" and rewrite some part of tangled, ugly, bad tasted "code" and make it simpler, readable and much more maintainable.

Comments

Comments powered by Disqus