This is from Masterminds of programming. Person sharing the story and the perspective is Thomas Kurtz
Interest for Maths
My personal self-discipline is I start at page one and do all the odd-numbered exercises because they have the answers. I keep all the stuff in a notebook. Anything less just doesn't work for me. I've done calculus and linear algebra and statistics and dynamics, which is engineering, and analytic geometry, and I'm about to start hitting differential equations really hard. What happened was my mother-in-law bought me a book at a swap meet for 50 cents, and it was "The Magic of Mathematics" or something like that. It was a low-level book and it got me started again. I do math as a backdrop. I'm kind of compulsive about building things, making things, and dBASE was one of those.
He wrote dBase
I was a computer
Wayne Ratliff: Computers themselves got me away from car design. Before I completed my degree, I got a job with Martin Marietta in Denver. I was a computer. My job title was computer. Other people have programmed computers, but I have been one.
Databases and Natural Language Research
I went out and bought lots of books on natural language and artificial intelligence. I kept getting drawn from one place to another, and I did lots of experiments. I hadn't researched the database as much as I did the natural-language aspect.
The way I've programmed all my life is as a toolmaker. When I compare myself, even ten years ago, with other programmers, I see that I was trying to generalize to a large extent; they were trying to write programs that would solve a specific need. Their programs would frequently be delivered much sooner than mine would be, but mine would have longer lifetimes. Once the specific need went away, their programs were dead, they had to be rewritten each time the needs changed. I always wrote in such a way that the program could solve a family of problems, rather than just a single one.
Wayne Ratliff: Yes. Do you think hacker is a good word or a bad word? If you think it's a good word, then they're hackers. They're good people, but they're thinking of their job rather than the user, and you have to go a little beyond that. That's how dBASE got started. I was thinking of how I wanted to use it.
It is a neat concept to understand. The ruby code made it clear.
Adding references seems easiest contribution one can make.
Am I reading this right? 99 percentile end up with all the wealth and then it get's swapped?
Useful writing makes claims that are as strong as they can be made without becoming false.
A very long essay. The crux is write true statements useful to the reader.
This is Racket Language evolution to a variant of Scheme which is faster than any other implementation.
Provides high level intuition for curve drawing and appreciates Curve technology based on John Hobby's Research which uses splines.
I could go on bemoaning the many disappointing experiences I had on this slog of a job search. There were many of them. 23 interviews and I didn’t get a single offer. I have always sought to be completely honest and humble with myself and others about my abilities.
I had a similar experience after getting fired from twitter. I attend 20-30 interviews and I managed to clear one. The experience frustrated me to no end.
My personal experience at Square interview was one of humiliation. I was escorted out after the 1st round as I could not write code.
There is a cottage industry springing up around passing interviews - All of this algorithm challenge hubub started with popular companies like Google. There were several engineers who worked at these popular tech companies that saw an opportunity to make a few bucks be offering prep material. There were two influential books written on the subject: Cracking the Coding Interview and Elements of Programming Interviews. Both of these books offer guided interview preparation material. The problem is that the industry got a hold of these books and tailored their interviews to the book’s material.
This is real. So many start-ups help you prepare for the interview.
Complaining about it wont do any good. - Sooner or later I’m going to have to get another job. Even if I don’t like the methodology, I am going to have to go through the loop again.
The final conclusions makes it a balanced article, in my opinion.
There is no good way to find the right candidates. These interviews of-course help test if the candidate can code, has prepared for the interview and is taking the process seriously. I am with this process until we find a better one.
By Patrick Hunt and Mahadev Konar of Yahoo! Grid and Flavio P. Junqueira and Benjamin Reed of Yahoo! Research
Our system, Zookeeper,hence implements an API that manipulates simple wait-free data objects organized hierarchically as in file systems.
With ZooKeeper, we are able to implement all coordination primitives that our applications require, even though only writes are linearizable.
ZooKeeper has two basic ordering guarantees.
Linearizable writes: All requests that update the state of ZooKeeper are serializable and respect precedence.
FIFO client order: All requests from a given client are executed in the order that they were sent by the client.
The important design of the Zookeeper was in the Client API used by the clients, server is a well defined architecture.
I used Zookeeper for the Packer service, which is a service to manage artifacts on Aurora scheduler (on Mesos) at twitter. ZK was used along with hadoop for storing package metadata. This was overkill for simple operation, and it was decided migrate the service from ZK to a relational database like MySQL.
I had worked on the client of this service in python and also wrote certain parts the migration client in java.
Byzantine Fault Tolerance
Zookeeper is not Byzantine Fault Tolerant. Author say for the production uses they have have not observed the failure that could have been prevented by then proposed systems to make Zookeeper Byzantine Fault Tolerant.
The Chubby lock service for loosely-coupled distributed systems By Mike Burrows, Google Inc
It is intended for use within a loosely-coupled distributed system consisting of moderately large numbers of small machines connected by a high-speed network. For example, a Chubby instance (also known as a Chubby cell) might serve ten thousand 4-processor machines connected by 1Gbit/s Ethernet. Most Chubby cells are confined to a single data centre or machine room, though we do run at least one Chubby cell whose replicas are separated by thousands of kilometres.
Every few hours, the master of each Chubby cell writes a snapshot of its database to a GFS file server in a different building. The use of a separate building ensures both that the backup will survive building damage, and that the backups introduce no cyclic dependencies in the system; a GFS cell in the same building potentially might rely on the Chubby cell for electing its master.
I see choosing "new" languages (or frameworks) as very risky propositions to the life of a project. These languages are less likely to be around in ten or twenty years time (newer and better Rusts and Gos are likely to form in the years ahead) and in the meantime require you to constantly expend effort to prevent your projects from being turned into a brick by language/environment/library changes. In contrast my old C projects from 5-8 years ago still compile and run, with one particular example only needing a small modification. It's not perfect, but C is much more likely to be the "safe" option if time x usefulness of your project is a goal.
Argues that we spend time quickly adopting new languages and frameworks, take it for granted that anything we write will be short-lived. Author argues that it is wrong philosophy to adopt, and I agree with him.
Choose to experiment, but build something that lasts.
It is now possible to perform chosen-prefix attacks against the SHA-1 algorithm for less than USD$50K. For this reason, we will be disabling the "ssh-rsa" public key signature algorithm by default in a near-future release.
The better alternatives include:
The RFC8332 RSA SHA-2 signature algorithms rsa-sha2-256/512. These algorithms have the advantage of using the same key type as "ssh-rsa" but use the safe SHA-2 hash algorithms. These have been supported since OpenSSH 7.2 and are already used by default if the client and server support them.
The ssh-ed25519 signature algorithm. It has been supported in OpenSSH since release 6.5.
The RFC5656 ECDSA algorithms: ecdsa-sha2-nistp256/384/521. These have been supported by OpenSSH since release 5.7.
We definitely need a better name for these algorithms. RSA, the term, is so much easier to remember and associate than SHA-2, ED25519, and ECDSA.
Ramsey did all this, and more, in an alarmingly short lifespan. He died at the age of 26 probably from leptospirosis (bacteria from the feces of animals) contracted by swimming in the river Cam.
Rather than focus on a ‘oneness’ or God, like his brother Michael, he thought the good life was to be found within our human, fallible, ways of being.
An article about polymath Ramsey who contributed to the field of mathematics, computer science, economics and otherss
once a mathematician, always a mathematician
At its heart, mathematics is about understanding the underlying structure inherent in a given area of interest —and where no such structure exists —to deﬁne the minimal structure that is needed to make forward progress.
The phases involved in the creative process were ﬁrst described by German physiologist Herman Helmholtz in the late nineteenth century. He identiﬁed three stages of creativity:
saturation, incubation and illumination
These three stages have since been augmented with the additional step of veriﬁcation by the scientiﬁc community.
mathematical techniques are algorithms
Speciﬁc mathematical techniques e.g., differentiation, integration or the Simplex method are algorithms.
- To truly appreciate an algorithm and understand how it works, one needs to be able to run it by hand on a representative set of examples.
- In mathematics, this translates to being able to differentiate or integrate a given expression.
- The latter requires a set of semi-mechanical steps and this is where one uses aids such as scratch memory provided by pencil and paper —something for which I needed to compensate.
- However, a true understanding of the underlying algorithm is far more important than any speciﬁc technique that one might devise for running the algorithm on speciﬁc instances.
I could relate to author's experience in solving some problems.
1. Finding the day of the week. I went by the logic that, 1st January of 1900 was a Monday, and then I figured out hte day of the week. This problem was given in the book, Let us C, by Yashwant Kanetkar.
2. Playing a nimm like game. I had a designed a similar game called 21-match stick game in the college. It was a very simple game, wherein the player forced to pick the last match stick looses. This was again from the exercise in the Yashwant Kanetkar book.
As I recollect, I think, I had a good saturation phase in reading the "Let us C" book by reading, reviewing. Incubation by trial and errors, and development of the game itself was illumninatiom and when I let my friends play it, it was the verification stage.
definitions of maths, science and computing
Writing: a means to store knowledge in a brain-independent form that can be easily replicated, transmitted and preserved
Mathematics: a methodology for constructing abstract systems, reasoning about them precisely and finding connections between them
Science: a methodology for finding abstract systems which map closely to the real world
Computing: a way to arrange inanimate systems to simulate arbitrary abstract systems
Maths learning rituals
Ritual 1: Learn to read and write proofs
Ritual 2: Learn the language
Ritual 3: Practice
cost of ideas
You won't live long enough to learn more than a tiny fraction of all there is to know. Ideas have costs in the time it takes to learn them, the amount of maintenance required to remember them and the amount of effort it takes to apply them. Prefer ideas that have a high power-to-cost ratio.
Author's writing, explanation and choice of words are excellent.
what makes programming difficult
There are three other things that make programming difficult:
- Fixing things that should not be broken
- No time for learning things
- Bad environment for programming
Let's look at these things - these are all “time thieves“
Using the Google casino for bug fixing is terribly frustrating. I Google a bit and after a while find a posting where some poor unfortunate soul has encountered exactly the same problem that I have. My heart leaps for joy. My trembling fingers enter the magic spell that will remove the curse, and ... nothing. The problem remains.
The article is hilarious and very deep. I could sense Joe Armstrong's humility in this writing.
This is the equivalent to Google Chrome profiles that I was looking.
I cleared the CKAD exam.
I took 3 attempts to clear this exam. In my first attemp, I had forgotten the concepts. I was not very confident during 2nd, and prepared well for the 3rd attempt to clear it.
I read "Kubernetes from Ground Up" again. Practised and "understood" the concepts better. With all these, the tests were actually very enjoyable.
I had setup a raspberry pi cluster, and suddenly the master became non-operational. The cluster was able to see itself, but if I login to master node, I noticed it was not able communicate externally.
The DNS Resolution for any site from master was failing.
Then I figured that Ubuntu had made some changes to resolve.conf protocol
Ubuntu requested users not to edit /etc/resolv.conf, and it's content on my cluster was not something that I wanted.
I had setup pihole, and my devices had started to see the internet through this. I noticed that Ubuntu since 18.04 had not set my router as the first nameserver and thus after pi-hole experiment, my master node lost its resolution capability
Fixing the Ubuntu DNS resolution was easy. I followed this post from datawookie
- resolvconf package was already installed.
- Edit /etc/resolvconf/resolv.conf.d/head
nameserver <pi-hole-server> nameserver 220.127.116.11 nameserver 18.104.22.168
- Restart the resolvconf server
sudo service resolvconf restart
I had supported this project called "Modeling Is Key to Understand Processes, Structures and Scales!" by Mrs. Sexton of Montevideo Elementary School for the fifth graders. They had this project going on for the family science night in the winter of 2019.
On my birthday this year, I received a ton of thank you notes for the supporting this project. It felt amazing to see so many handwritten cards!
Thanks to students, and the teacher for this gesture. I will support your science efforts anytime! :)
Siddhartha and I built a Modern House in Minecraft.
We got the idea and followed this Youtube video https://www.youtube.com/watch?v=-LcdpQ2LLK0 for building the house.
It was a fun project!
I setup a kubernetes cluster using Raspberry pi. It was much easier than I had imagined.
I used a Raspberry 4 for the master, and an agent. And I used two Raspberry B for two agents.
My overall goal ran into some challenges.
- I was not able to setup the kubernetes dashboard via helm package, and I had to use instructions from github.
- I was not able to setup minecraft using the available helm package: https://github.com/itzg/docker-minecraft-server/issues/433
- I used k3sup to install packages, but I do not know how to uninstall the package using k3sup https://github.com/alexellis/k3sup/issues/179
Givem all these, I still have the my local kubernetes cluster up and running and I am excited about the possiblities of using kubernetes on raspberry pis.