RSS Reader 12/2/2017 main()

The reader user interface code in the main method now appears as follows. The remaining, reorganized, C++ code can be found under the gautier_system github repository under commits dated between 10am – 12pm EST 12/2/2017. Space is now cleared in the main method for both rss feed data processing to appear alongside UI expression without either cluttering the other.


RSS Reader Sections Auto-Size

The RSS Reader sections now auto-size. I decided not to use too much of the FLTK infrastructure. A Fl_Pack exists in FLTK that does much of what I’ve done in this release but the Fl_Pack does it better. Then why do custom auto-size? The reason is doing custom auto-size is one of the ways to validate that you have a solid understanding of the geometric dimensions provided by the graphics engine. I learned that I had read the FLTK documentation incorrectly and misunderstood the values I received from Fl:w() and Fl:h(). I spent a solid 2 or 3 days trying to work out some sizing issues due to the incorrect way I read the documentation.

Anyway, I didn’t do the auto-size specifically for the reason I stated earlier. I am striving for a more custom user interface with a dash of assistance from FLTK where practical. The goal is to have control over colors, fonts, and layout such as I would have if I was defining the user interface in Allegro or other video game framework. I am not using those frameworks as that would be too extreme (requiring an extensive amount of code) for the purpose of defining an RSS Reader. The auto-size goal helped with verifying that the core principle of generating the geometry separate from the graphics instructions works the way I saw it in my mind.

So far, everything is going well. The code shown below is a fully compilable version (there are no dependencies yet on the RSS Engine). You just compile it including the FLTK library binaries and you are good to go. The code is one amalgamation at present on purpose. The plan is to refactor it later into a more appealing form. However, this approach is an idea I came upon to speed up development in C++. Write everything in a single .cxx file and get all the parts working first then go all out organizing everything. As it stands, the strategy has increased by productivity tremendously. It was all handwritten in a text editor and separately compiled by build script in a command-line window.

Updated C++ Code

Linux Hardware Vendors Lead the Way in Doubling Down on Security

When I learned that System76 Will Disable Intel Management Engine On Its Linux Laptops that reminded me of a similar story about the Purism laptops. This kind of update is not in the Windows ecosystem nor has been on the radar in said environment. However, it is plausible to dual-boot or live boot from USB to a Linux distribution and perform the removal once command line tools become available. That will be useful.

Gap between Google/Silicon Valley Hi-Tech and Enterprise Software Development

On Quora someone asked, “Do teams from Google and Facebook use TDD to write software? If yes, what approximate percentage of teams are doing that?“, to which Jon Orwant, Google Research Director, answered that Google barely registers on the TDD scale. He states that TDD is rarely used. Now, if you are in the enterprise or conventional business software development field, you hear about TDD all the time as the path to software quality. Not the only path, but one of the essential tools to get to better quality. Obviously, companies like Google shows that alternatives exist.

Another question asked, “What methods does Google follow to make sure that they hire the best and the brightest so the next startup doesn’t overtake them in AI, machine learning, etc.?” to which Andrew McGregor, Site Reliability Engineer, stated that a startup is not in the same league as Google. I see a similarity between a small software development team in a large conventional company and a startup. Like a startup, the small software team has to start from the ground up. They may want their new system to work like Google’s, but there is a huge mismatch. Yet, it only has to be good enough for that environment anyway.

That is similar to another question, “What are the most common misconceptions about big data?” in which Andrew says that one mistake is to think you have big data. He is right. Although you may be dealing with millions of rows of data, or a few billion, that is not the same scale as Google. I would even make the case that you should take data and routinely cut it down. Reduce your data and streamline rather than create a behemoth with built-in waste.

A key difference between a company like Google and a conventional business is that Google builds their own servers. That is not the same meaning of build your own most people use. When engineers at conventional businesses say they built a computer, they mean 1 of 2 things: 1) They ordered it from DELL or HP, chose hard drive, memory, and CPU online with their choice of operating system. 2) They connected major pieces (hard drive, memory, CPU) together like Legos. Google and a few others do the Lego thing but in a way that is more like electrical engineering than out-of-the-box plug-and-play.

You will notice in the following image which came from Andrew McGregor’s post about “Why doesn’t Linux provide a GUI for configuring stuff like DNS & DHCP while Windows server do? Why would anyone choose Linux over Windows servers?” that the servers are bare, straight up machines with no aesthetics. No identifiable DELL, HP, or Lenovo chasis. Straight up Google Borg.

The differences become more pronounced when you learn that companies like Google and Microsoft sometimes have more than one IT department. Google appears to have 3 of them and none of those 3 deal in making or managing the search engine. Then you see that software/hardware types at big tech think differently. Rather than quickly retort, “Why don’t you do it the same way as everyone else?”, they tend to think, “what if there is a much, much better way to do something?” I noticed that in one of Andrew’s answer to, “People here ask a lot about C++ for High Frequency Trading. But if speed is so important to these places why don’t they write their code in Fortran or Assembly?

Okay, let’s end this where we started. The question is, “What are some arguments against unit testing?” to which Andrew ponders the complete efficacy of unit tests. Unit and integration tests however is another story. Also, tune into, “Why do some developers at strong companies like Google consider Agile development to be nonsense?


RSS Reader 12/1/2017

Earlier iterations of the rss reader had a traditional Windows UI design. I decided to shift the design in a direction that could work on both desktop and mobile. I started out with a hand drawn design on paper that I then worked into a digital format. The result is the following in-progress version of the user interface.

Desktop/Mobile RSS Reader UI In-Progress

UI Graph

Henrik Vogelius Hansson and Jan Haller wrote a solid book titled, SFML Game Development. They demonstrate a useful way to organize user interface software code in C++. At the time, I wasn’t as warm to their approach, but I decided their approach is useful. Unlike what they showed in that book, I am not using a full on graph algorithm for the user interface, but I may be headed in that direction. I decided that MVC or, Model-View-Controller, while useful for highly standardized corporate style projects is not the approach for me in building my own user interfaces. Anyway, the rough form of the above user interface is defined as follows:

Iterative UI Development

The first iteration included nothing more than a orange band across the screen at the top. Next, I gradually brought in FLTK widgets.

6 Iterations

After about 6 iterations on the essential form of the code, the image at the beginning of the page was more or less established.

Iteration 1

Iteration 2

Iteration 3

Iteration 4

Iteration 5

GitHub Commit

The commit for the final iteration described can be found on GitHub.