Memory gets triggered in the most unexpected ways. I maintain a fairly large library of printed and electronic books (most of them DRMed -the light cases socially, kindle and Adobe locked the rest unfortunately) on subjects that interest me. It is fairly evident that I will not read them all, but I always have a book (and sometimes a paper) to recommend to a friend that has a problem. It seems that I am not the only one that thinks that personal libraries are supposed to be full of unread books.
Anyway, I was listening to Podcast.__init__ Episode 95 and one of the guests mentioned Parsing Techniques – A Practical Guide by Grune, I think it was when they touched Earley parsers and how most books about parsing do not really touch on how the actual parser is built. Wait a minute I’ve got that PDF! And you can go to the author’s site and download it. And you know what? There is a second edition out. For > 100 euros for a DRMed PDF I may not buy it since parsing is definitely not my thing, but somebody else out there might need the second edition. Judging from my skimming of the first edition, this is close to the encyclopaedia of parsing. I will go through some pages tonight.
Just for a refresher.
That’s the bear trap, the greatest vice. Your job. You can justify about any behavior with it. Maybe that’s why you do it, so you don’t have to deal with all those other problems.
I never expected to find the explanation of BOFHiness in The Soul of New Machine. The book lived on my wishlist for a long time and it was gifted to me, only to wait there inside the kindle for a couple more years. Tracy Kidder follows the team that built Data General’s Eagle, their first 32bit machine and a kind of Plan B for the company, since the market was being dominated by the Vaxen and they had to react. Serious computing history unfolds in front of you.
A very interesting story, and lucky Kidder got to follow a lot of the story in the making, even though this was supposed to be a secret project. While this is not a hard science book, you get to learn a lot about computer architecture, or depending your skills, computer architecture history. You get to understand the magic that happens when your keystrokes are transformed into the desired result. The moment when the software and hardware connect. I particularly enjoyed the chapters about debugging boards with an oscillator.
While I cannot claim the brilliance of Tom West, I do see elements of similar behavior and the reasons for this. I need to work on that.
Thus he supplied them one answer to the question of what happens to computer engineers who pass forty.
I reached 44 yesterday. Still not a middle manager.
I make it no secret that one of the most impactful essays on me the last 20 years has been Bob Lucky‘s essay about the last electrical engineer. And I have seen other computer scientists taking it into account too.
Ever since cloud computing caught on, it comes more and more frequently to mind, because I see that the abundance of computing power makes people think that they can get away without really thinking about the problem. After all, computing has become cheap, right? The prototype you’ve just rigged up costs $10 / month to host. Well scale on the other hand does not come cheap and it will bite you.
Now that “cloud” has become a commodity word, “serverless” is coming to dominate. Because you really do not need to buy your infrastructure since, you know, you can have a data center as a tab in your browser for half the cost. And you really now do not need old-school sysadmins, since you make people all work together and deploy stuff n-times a day (DevOps). But hey, even that is complex, because you just want to write the damn stuff and not think on where it runs, or how the hell it is supposed to run on scale. You only want profit on scale.
So let’s go serverless. And in the process, let’s make the prophecy about the world needing 5 computers true. Only they are cloud / serverless providers (just count the big players) where for some engineers, paraphrasing a bit Bob Lucky, life will be:
Projecting the current trends, future applications will be serverless. No one will have the foggiest idea what is on that cloud. Somewhere in the basement of the serverless provider or its successor will be a huge computer file with the listing of that infrastructure. The last engineer will sit beside the file, handcuffed to the disk drive like a scene out of “Ben Hur.” That engineer will be extremely well paid, and his or her every demand will be immediately satisfied. That engineer will be the last keeper of the secret of the universe: E = IR.
Bootcamps and other vocational training institutions will turn out lots of serverless programmers, so prepare at least to be able to tick the Steinmetz chalk mark.
I got You are a writer by Jeff Goins on a day it was given for free years ago. I got to read it over the weekend. I thought then, and I still do no now, that the book offers advice to people who write code too. Maybe because sometimes I believe that code is like a poem. So I will try to rehash advice I found useful here, since this seems to be one of the acceptable self-help books that have come my way.
While anyone can connect with anyone and put stuff out there, how does one gets noticed? By helping people. By relieving their pain. I’ve advocated answering one question per day on ServerFault (or StackOverflow, or whatever clicks to you), although I do not always practice this. I used to, though, years ago when mailing lists and newsgroups were the thing.
You need to build a platform. This blog is a platform. I post stuff here. Others do it with more success, for example John Sonmez who uses a variety of platforms (blog, YouTube channel, podcast, book) to publish his work (and he gives 90% of his work for free he said on Ruby Rogues). You make the platform and you establish a brand. Without a brand you are forgettable.
And you know what helps you not being forgotten? Networking does. Meaningful relationships do. Relationships that are mutual, matter to both parties and give you the opportunity to make friends and find mentors.
But nothing of the above makes any sense unless you are prepared to answer the following questions:
- Am I serious?
- Am I committed?
- Am I prepared to be challenged?
Please take the time to sincerely answer these questions. And while you are at it, understand that you probably are not the best coder in the world yet. But you can become one. There is room at the top here.
Like one of the main characters in The Phoenix Project said, mastery comes through practice. And here Goins argues that the best kind of practice is done publicly. Interestingly GiHub seems to be our public place of practice.
While you’re at it, learn to estimate. Underpromise and overdeliver. Especially when you are part of a team. Like Goins writes, you have a gift. Someone is willing to work with you.
Go on! Practice.
I cannot even remember how many disks Windows 95 was, fourteen, fifteen? Something like that. And how many hours installing it to machines around the lab.
That was the day I said goodbye to FTP software’s PC/TCP and Trumpet Winsock.
(only your weekend)
After numerous installs since the Windows 3.11 era I should have known better and not tried the upgrade from Windows 7 to 10. But I do not have a spare machine for a clean install and therefore when the popup assured me that I could upgrade the laptop, I broke my rule:
You never change (upgrade or downgrade) the operating system that came with your laptop. If you do, at least make sure you have a spare machine to do actual work.
That is because laptops come with hardware that is not necessarily recognised by anything else other than drivers supplied by the manufacturer. So if you do change the OS, or even install a “clean” version of it (without all the bloatware that manufacturers package with it) be prepared for stuff not working. Yes, that fingerprint sensor, that 3G modem, the winmodem in the old days and before the linuxant drivers for example.
So anyway I felt brave and went along and tried it. It seemed to go fine. But at 76% the process stalled. And then it failed with DRIVER_POWER_STATE_FAILURE. Following the suggestion of a friend, I tried the online downloading tool that Microsoft gives to download and / or start the upgrade. It failed to even start. I run it again and built an ISO DVD to have around just in case. But still I was facing the same problem.
I gave it some thought after browsing the Net for a bit and thought that it could be the speed setting switch which I almost always have set to “stamina” and not “speed”. Again at 76% the procedure stalled like forever. I shut down the machine and when I powered it up again the procedure continued. And finished. Yes!
So I browsed around to get a feeling of the system. And then Skype was not working. Fair I thought since my login account was not linked to a Hotmail.com account and maybe after the upgrade this is a mandatory requirement. In the mean time OneDrive installed and update. So let’s reboot and see what happens. And it never rebooted. It stuck on the Windows 10 logo with the balls doing their circles.
So I shut down the machine again. I power it on and it is OK. I backup my data, shut down the VAIO and press the magic “assist” button. Windows 7 with all the bloat that Sony has chosen gets installed on the machine again. About 1h later I start uninstalling stuff. Adobe, McAfee, Office (Trial), SQL Server, Norton go by. SP1 gets installed. 214 updates after SP1 too.
Like the upgrade procedure said: This won’t take long
[ This draft has been gathering dust for a few years, so I am posting it because what the heck, I’ve written it ]
I found out about dotplots while reading “Algorithms on Strings” (thanks to Bill Gasarch) an impressive book by the way, that easily makes it to the top-5 CS books I’ve read. It may well be one of the most complete works on the subject fulfilling simultaneously the needs of those who want to read the theory, see the proofs and/or write code (for it contains well understood pseudocode). But I digress.
Dotplots are tables that can be used to compare sequences (and therefore strings) and can reveal hidden patterns that may not be observable with other methods. They are in use for decades and known to people who work on computational biology (see for example “A high speed, high capacity homology matrix: zooming through SV40 and polyoma“)
Definition: Given two strings x and y with lengths m and n respectively we define a table Dot (the dotplot) of size m×n such that Dot[i][j] is true if x[i] equals y[j] and false otherwise.
Using the book example sequences ACGT and ATGCTACG we get the dotplot:
ATGCTACG A*....*.. C...*..*. G..*....* T.*..*...
To interpret a dotplot we observe that diagonals express similarities and antidiagonals reveal the existence of a substring in reverse order. In a similar fashion horizontal lines represent insertions and vertical lines deletions that lead from one (sub)string to the other. One can therefore think of a dotplot as a kind of visual grep.
Dotplots find usage outside computational biology. They can be used for text analysis and even translated plagiarism! However, the screen real estate is not big enough to use for comparisons that involve for example the source code of the X Window System and techniques mentioned in “Dotplot: a Program for Exploring Self-Similarity in Millions of Lines of Text and Code” and “Dotplot Patterns: A Literal Look at Pattern Languages” can be used. Both papers contain really interesting applications of dotplots and explanations of the visual patterns that occur. See for example:
As shown by the ASCII example above, it is very easy to create proof-of-concept dotplots. But character based dotplots are limited by screen space. In fact I set out to create my own version of a dotplot program using gnuplot for the graphical stuff. Building a basic dotplotter is really easy once you read the techniques presented in Helfman’s papers but the result might not be as “good looking” as the ones that Helfman has done. To build cool dotplots, it may be needed to customize your software appropriately. For example, to dotplot source code, your program might need to have parsing capabilities for the language in question (for example two for loops might be similar to another when you look at it, but whitespace might make them look different to a simplistic dotplot builder).
[ There is not going to be a part2. Originally I wanted to experiment with dotplots and spam, but I am not a postmaster anymore, so I’ll leave it to the next interested postmaster. ]