Calibrae Day 1 Progress ReportsteemCreated with Sketch.

in calibrae •  7 years ago  (edited)

Today

 

was day 1, as opposed to yesterday, which was day zero, the first day, before which there was no day.

Git Repository


Today I was getting the github sorted out, and I had to rejig it a couple of times before I got it right. What I wanted, was a set of independent repositories, but a central 'metarepository' that bound them together, so someone like me, who is working on keeping them all tied together, and helping keep every sideproject in one place.

https://github.com/steempunks/calibrae

Automated build of steemd using a shell script

I spent most of the day making sure that the calibrd repository, which is the one for the server, called steemd for Steem, was building properly.

Rather than depending on documentation, I wrote a script that automatically does everything that is required. Why Steemit did not do this, I don't know, but fuck them. You can find here, the script I wrote, which I will describe briefly in a moment:

https://github.com/steempunks/calibrd/blob/820da228a2e34e71a04d9d102f9c5b61b4154cd5/build_ubuntu16%2B.sh

This is a shell script, which I eventually settled on a strategy to automatically add a defafult, Ubuntu 16.10 repository, which contains the necessary (and afaik, only functioning) Boost++ version that works with steemd, namely, version 1.60.

I added some comical annotations to the script, and some extra spaces (I may improve them with colours later), and brief pauses so that a user watching the build progress can get a giggle as they watch it progress.

The script should work on any version of Ubuntu from 16.04 upwards.

In order to test it, I also needed to create a simple initialiser script, called init.sh, in the root of the metarepository. It pulls down all the sub-repositories so you have everything ready to start. It just invokes a git command to init and update the submodules.

It basically does everything that Stinc's 'documentation' expects you to figure out how to do manually. After 1 year, you think they would have made this easier, but they don't think about how it works for other people, like most bad programmers.

It really, literally does everything. I have to edit the README.md to explain the steps to getting the repository synced, and the automated build for steemd, but, it's a big omission to not put stuff like this in there. It doesn't take a PhD in CS to know how to do this, or to know that it is missing, either.

Just to explain something. The dumbshitness of basically saying 'you must use 16.04 to build this' is in part, I think, Ubuntu's fault. But there is more.

So, I was, as I was writing this, remembering that I had not tested this on ubuntu 16.04! So I was building it on my server, which runs 16.04. Now I rue this, because, it breaks. Here is the delicious error:

[ 49%] Building CXX object libraries/fc/CMakeFiles/fc.dir/src/compress/zlib.cpp.o
In file included from /home/loki/calibrae/server/calibrd/libraries/fc/src/compress/zlib.cpp:3:0:
/home/loki/calibrae/server/calibrd/libraries/fc/src/compress/miniz.c: In function ‘void tdefl_find_match(tdefl_compressor*, mz_uint, mz_uint, mz_uint, mz_uint*, mz_uint*)’:
/home/loki/calibrae/server/calibrd/libraries/fc/src/compress/miniz.c:2264:59: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
 #define TDEFL_READ_UNALIGNED_WORD(p) *(const mz_uint16*)(p)
                                                           ^
/home/loki/calibrae/server/calibrd/libraries/fc/src/compress/miniz.c:2270:19: note: in expansion of macro ‘TDEFL_READ_UNALIGNED_WORD’
   mz_uint16 c01 = TDEFL_READ_UNALIGNED_WORD(&d->m_dict[pos + match_len - 1]), s01 = TDEFL_READ_UNALIGNED_WORD(s);
                   ^
/home/loki/calibrae/server/calibrd/libraries/fc/src/compress/miniz.c:2264:59: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
 #define TDEFL_READ_UNALIGNED_WORD(p) *(const mz_uint16*)(p)
                                                           ^
/home/loki/calibrae/server/calibrd/libraries/fc/src/compress/miniz.c:2281:13: note: in expansion of macro ‘TDEFL_READ_UNALIGNED_WORD’
         if (TDEFL_READ_UNALIGNED_WORD(&d->m_dict[probe_pos + match_len - 1]) == c01) break;
             ^
/home/loki/calibrae/server/calibrd/libraries/fc/src/compress/miniz.c:2282:7: note: in expansion of macro ‘TDEFL_PROBE’
       TDEFL_PROBE; TDEFL_PROBE; TDEFL_PROBE;
       ^
/home/loki/calibrae/server/calibrd/libraries/fc/src/compress/miniz.c:2264:59: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
 #define TDEFL_READ_UNALIGNED_WORD(p) *(const mz_uint16*)(p)
                                                           ^
/home/loki/calibrae/server/calibrd/libraries/fc/src/compress/miniz.c:2281:13: note: in expansion of macro ‘TDEFL_READ_UNALIGNED_WORD’
         if (TDEFL_READ_UNALIGNED_WORD(&d->m_dict[probe_pos + match_len - 1]) == c01) break;
             ^
/home/loki/calibrae/server/calibrd/libraries/fc/src/compress/miniz.c:2282:20: note: in expansion of macro ‘TDEFL_PROBE’
       TDEFL_PROBE; TDEFL_PROBE; TDEFL_PROBE;
                    ^
/home/loki/calibrae/server/calibrd/libraries/fc/src/compress/miniz.c:2264:59: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
 #define TDEFL_READ_UNALIGNED_WORD(p) *(const mz_uint16*)(p)
                                                           ^
/home/loki/calibrae/server/calibrd/libraries/fc/src/compress/miniz.c:2281:13: note: in expansion of macro ‘TDEFL_READ_UNALIGNED_WORD’
         if (TDEFL_READ_UNALIGNED_WORD(&d->m_dict[probe_pos + match_len - 1]) == c01) break;
             ^
/home/loki/calibrae/server/calibrd/libraries/fc/src/compress/miniz.c:2282:33: note: in expansion of macro ‘TDEFL_PROBE’
       TDEFL_PROBE; TDEFL_PROBE; TDEFL_PROBE;
                                 ^
/home/loki/calibrae/server/calibrd/libraries/fc/src/compress/miniz.c:2264:59: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
 #define TDEFL_READ_UNALIGNED_WORD(p) *(const mz_uint16*)(p)
                                                           ^
/home/loki/calibrae/server/calibrd/libraries/fc/src/compress/miniz.c:2294:13: note: in expansion of macro ‘TDEFL_READ_UNALIGNED_WORD’
       c01 = TDEFL_READ_UNALIGNED_WORD(&d->m_dict[pos + match_len - 1]);
             ^

So, basically, I still need to address a fix to make it behave with ubuntu 16.04. Obviously the GCC 5 in 17.04 and the one in 16.04 are different enough that this dumb bug (it's an error related to not respecting reading data out in pairs of bytes instead of singles), pops up in an older version (maybe) of GCC, but not in a newer version.

It's irrelevant, in my opinion, because this kind of bug is a programmer error, not a compiler error. If you don't respect blocksize boundaries in your code, you will punish your users and especially Witnesses, with shitfully performing servers. Yes, one of my biggest criticisms, and here you can see, that even the compiler flags this bug.

I will fix this bug tomorrow. But this build works perfectly on 17.04 now, using binaries from 16.10. So you see why I am not just pissed at Stinc's shitty programmers, Mark Shuttleworth also needs a roasting on this one too.

Parting comments

So, as usual, I have spent a lot of time contending with bugs caused by short sighted, harried programmers who have not been given or don't care about making their code work properly. If it was good code, it would not bug out like this. This is a classic example of what bad code looks like when you try to build it outside the programmer's exact build environment.

This is also where Linus Torvalds developed his venemous feelings towards C++, because this is a C++ compiler error. This bug would never have happened in the much simpler, more clearly specified C compiler.

I will be fixing this issue as a matter of priority tomorrow, and I will move on, after that, to the next logical thing I will be doing. I'm not sure what that will be exactly, but I am definitely settling into this programming business, I will try not to get sidetracked too much by really dumbshit like this, but I will be making a code repository that works on any ubuntu after 16.04, as a totally basic prerequisite. I would like it if other people who are good with other, popular linux platforms, would work this too, make it work on Debian (probably will just work) Arch and Redhat/Suse as well. And MacOS, of course.

I intend this to be a fork that is in total contrast to what Stinc makes it. I want to show people just how incredibly absent their developers are from their task, and how little real work they are doing, when you see that I have probably already got it working on 16.10 and 17.04 now, and the fixes have broken 16.04, which worked in their version.

Also, I don't think it needs to be said, but once I get it building binaries on all versions of Ubuntu from 16.04, after I finish the rebranding (this will be that I start on tomorrow), I will then be creating the appropriate scripts to build .deb packages for each version, at least, I will do 16.04 and 17.04.

PS

Just to clarify the difference between the two compilers, this is the version info from the 16.04:

gcc version 5.4.1 20160929 (Ubuntu 5.4.1-2ubuntu2)

And this is the gcc 5 in version 17.04:

gcc version 5.4.1 20170304 (Ubuntu 5.4.1-8ubuntu1)

Not a big difference, but it just shows you... I should maybe even tell Scuttleworth's operation to upgrade the 16.04 because the old version is flagging a bug that a newer version does not!

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

I support you.

Forks are the most glorious aspect of the open-source movement.

May Stallman smile upon you.

I'm interested in this project as well. I can see you are generally attempting to do this right and I commend you. I find the steem dev team to be uninterested at best based on my experience here so far. Would be very cool to see someone make an honest attempt to clean up this platform

Thank you @elfspice for this Calibrae-PR 👍

I have some STEEM to invest in your new platform. I don't have much but you can have it.