It was March 27, 2014, and Satya Nadella was about to make his first public appearance as CEO of Microsoft. The tone, he knew, would be important.
Nadella’s predecessor, Steve Ballmer, was famous for making public appearances feel epic.
At a 1991 meeting in Japan, he seemed to injure his vocal chords
because he was screaming “Windows” with such force. In 2000, when
Microsoft celebrated its 25th anniversary, Ballmer reportedly
popped out of a giant cake. And in 2013, when he announced he was
stepping down, he bid farewell to 13,000 Microsoft employees as “(I’ve
had) The Time of My Life” blared through the speakers of Key Arena in
Seattle. Through tears, the 6’5” Ballmer shouted, “Soak it in all of
you. You work for the greatest company in the world.”
George RR Martin’s platform switch reminds us of an early blogging giant greatly changed.
Last April, famed writer and hero-murderer George R.R. Martin announced that he was hoisting his ancient blog from his moldering LiveJournal onto his personal website. For casual Game of Thrones fans, it was a minor hiccup at best—most clicked the new link and never looked back. For a certain strata of enthusiasts, however, this was a far more momentous move. Described as “the last holdout” by longtime LiveJournal volunteer-turned-employee Janine Costanzo, Martin’s blog was perhaps the once-blogging-giant’s last bond to the world of great pop culture. So while the author may never finish his most beloved literary series, his simple act of Web hosting logistics truly marks the end of an era.
Your intuition behind why the algorithm should be Θ(n2) is
a good one, but most suffix trees are designed in a way that eliminates
the need for this time complexity. Intuitively, it would seem that you
need Θ(n2) different nodes to hold all of the different
suffixes, because you’d need n + (n – 1) + … + 1 different nodes.
However, suffix trees are typically designed so that there isn’t a
single node per character in the suffix. Instead, each edge is
typically labeled with a sequence of characters that are substrings of
the original string. It still may seem that you’d need Θ(n2)
time to construct this tree because you’d have to copy the substrings
over to these edges, but typically this is avoided by a cute trick –
since all the edges are labeled with strings that are substrings of the
input, the edges can instead be labeled with a start and end position,
meaning that an edge spanning Θ(n) characters can be constructed in O(1)
time and using O(1) space.
That said, constructing suffix trees is still really hard to do. The
Θ(n) algorithms referenced in Wikipedia aren’t easy. One of the first
algorithms found to work in linear time is Ukkonen’s Algorithm, which is commonly described in textbooks on string algorithms (such as Algorithms on Strings, Trees, and Sequences). The original paper is linked in Wikipedia. More modern approaches work by first building a suffix array and using that to then construct the suffix tree.
Early on at Amazon, CEO Jeff Bezos famously issued a memo about how software was to be built at the company. Teams would share their data through service interfaces, or APIs, the same way that they would share it with an outside customer. That meant that a developer on one team didn’t need to know anything about how another team operated in order to integrate the product it made—he or she could follow the documentation and use that product as though it were an external service. Ultimately, this ease of cooperation became extremely efficient and is what paved the way for Amazon Web Services—a $6.7 billion business that powers huge parts of the web (including Netflix).
// Delete direct route for the VPN gateway
echo("Deleting Direct Route for VPN Gateway");
exec("route delete " + env("VPNGATEWAY") + " mask 255.255.255.255");
exec("netsh interface ip set dns " + env("TUNIDX") + " source=static 18.104.22.168")
exec("netsh interface ip delete dns " + env("TUNIDX") + " 22.214.171.124")
Use above code for use with Openconnect 1.5.3
I often say that if Warren Buffett were 30 years old, he’d only invest in software. Here’s why…
1. The Demand for Software is very strong and stable — Spend on software has grown at ~9% for about a decade. Looking forward Gartner estimates show that the Software category is expected to grow 8–11% versus the U.S. economy at 2–3% and broader technology spending at 3–4%. Software is a GOOD neighborhood to live in.
In a previous article, I wrote about how trying to solve coding challenges without using if-statements might help uncover better solutions. In this article, we will explore how to solve some more challenges, but this time without using any loops.
By loops, I mean imperative loops like for, for...in, for...of, while, and do...while. All of these are similar in the way that they provide an imperative way to perform iterations. The alternative is to perform iterations in a declarative way. Continue reading “Coding Tip: Try to Code Without Loops”