The Insightful Troll

Rants and ruminations.

Stewart's Defense of 9/11 First Responders

| Comments

If you didn’t have the opportunity yesterday to watch Jon Stewart’s scathing and powerful opening statement before a House subcommittee about providing health benefits for surviving 9/11 first responders, you really should; it’s quite something:

As I sit here today, I can’t help but think what an incredible metaphor this room is for the entire process that getting healthcare and benefits for 9/11 first responders has come to. Behind me, a filled room of 9/11 first responders and in front of me a nearly empty Congress.

Shameful. It’s an embarrassment to the country and it is a stain on this institution. You should be ashamed of yourselves, for those that aren’t here, but you won’t be. Because accountability doesn’t appear to be something that occurs in this chamber.

This is the kind of talk we need in modern politics. If Stewart runs for office, he has my vote.

GPS Distance

| Comments

I recently had to calculate the distance between a large number of co-ordinates. I could have used one of the many Ruby Gems that are available but due to business limitations had to develop the code myself. After some research I came across the haversine formula.

The haversine formula is an equation important in navigation, giving great-circle distances between two points on a sphere from their longitudes and latitudes. It is a special case of a more general formula in spherical trigonometry, the law of haversines, relating the sides and angles of spherical triangles.

You can read the full details on the maths here. For those who just want the code here is the implemenation I came up with:

module GPS
  class Distance
    RAD_PER_DEG = Math::PI / 180
    GREAT_CIRCLE_RADIUS_KILOMETERS = 6371 # some algorithms use 6367

    attr_accessor :great_circle_distance
    attr_accessor :point1
    attr_accessor :point2

    def initialize(great_circle_distance = 0)
      @great_circle_distance = great_circle_distance
      @point1 = [0,0]
      @point2 = [0,0]

    def to_miles
      @great_circle_distance * GREAT_CIRCLE_RADIUS_MILES
    alias_method :to_mi, :to_miles

    def to_kilometers
      @great_circle_distance * GREAT_CIRCLE_RADIUS_KILOMETERS
    alias_method :to_km, :to_kilometers

    def to_meters
      @great_circle_distance * GREAT_CIRCLE_RADIUS_METERS
    alias_method :to_m, :to_meters

    def to_feet
      @great_circle_distance * GREAT_CIRCLE_RADIUS_FEET
    alias_method :to_ft, :to_feet

    def to_nautical_miles
      @great_circle_distance * GREAT_CIRCLE_RADIUS_NAUTICAL_MILES
    alias_method :to_nm, :to_nautical_miles


    # Radians per degree
    def rpd(num)
      num * RAD_PER_DEG

    def calculate
      # Accept two arrays of points in addition to four coordinates
      if point1.is_a?(Array) && point2.is_a?(Array)
        lat2, lon2 = point2
        lat1, lon1 = point1
        raise ArgumentError
      dlon = lon2 - lon1
      dlat = lat2 - lat1
      a = (Math.sin(rpd(dlat)/2))**2 + Math.cos(rpd(lat1)) * Math.cos((rpd(lat2))) * (Math.sin(rpd(dlon)/2))**2
      @great_circle_distance = 2 * Math.atan2( Math.sqrt(a), Math.sqrt(1-a))

Here is a quick script on how to use it:

irb(main):001:0> d =
=> #<GPS::Distance:0x007fb93b036050 @great_circle_distance=0, @point1=[0, 0], @point2=[0, 0]>
irb(main):002:0> d.point1 = [40.7457395,-73.991623]
=> [40.7457395, -73.991623]
irb(main):003:0> d.point2 = [40.9176771,-74.2082467]
=> [40.9176771, -74.2082467]
irb(main):004:0> d.to_meters
=> 26413.70207758391
irb(main):005:0> d.to_kilometers
=> 26.413702077583906
irb(main):006:0> d.to_miles
=> 16.40128793265138
irb(main):007:0> d.to_feet
=> 86598.80028439929

Hope this helps. If you have any questions, or comments feel free to leave a message or contact me directly.

The Clap

| Comments

From an editorial from Monica Hesse in the Washington Post:

“You weren’t supposed to do that,” he said, chiding them for unexpectedly cheering at a moment he hadn’t anticipated.

No, they weren’t. The attention was to have been on him. This was to have been an uninterrupted performance.

But instead, Nancy Pelosi clapped for the president, and a group of congresswomen sat for the president, and they both displayed the art of stealing someone’s thunder without saying anything at all.

This is the look of a women who knows something that we are all going to find out very soon. This just might be the image that defines the Trump presidency.

You Have a Choice

| Comments

Control has its benefits. Facebook and Google really need to emulate Apple and protect their users.

SNL Cards

| Comments

Its kind of amazing how this is still a manual process. Sure the cards could be printed digitally, but I think the actors appreciate the “human” touch involved. Some things are just best done in the analog world.

What Global Warming?

| Comments

Millions of Americans in the midwdest woke up to temperatures an astonishing 50 degrees Fahrenheit (28 degrees Celsius) below normal this week – as low as 35 degrees below zero. Combine with a strong wind, and the winchill can be as low as -60 F. At the same time, the North Pole is facing a heat wave with temperatures approaching the freezing point – about 25 degrees Fahrenheit (14 C) above normal.

This cold is nothing to sneeze at. The National Weather Service is warning of brutal, life-threatening conditions. Frostbite will strike fast on any exposed skin. Of course the climate change deniers are all out in force smugly asking “What ever happend to Global Warming?”

Jennifer Francis, senior scientist at the Woods Hole Research Center, writes that the polar vortex bringing cold air into the Midwest is connected to the rapidly warming Arctic.

Because of rapid Arctic warming, the north/south temperature difference has diminished. This reduces pressure differences between the Arctic and mid-latitudes, weakening jet stream winds. And just as slow-moving rivers typically take a winding route, a slower-flowing jet stream tends to meander.

Large north/south undulations in the jet stream generate wave energy in the atmosphere. If they are wavy and persistent enough, the energy can travel upward and disrupt the stratospheric polar vortex. Sometimes this upper vortex becomes so distorted that it splits into two or more swirling eddies.

These “daughter” vortices tend to wander southward, bringing their very cold air with them and leaving behind a warmer-than-normal Arctic.


| Comments

XML and JSON are the two most common formats for data interchange in the Web today. XML was created by the W3C in 1996, and JSON was publicly specified by Douglas Crockford in 2002. Although their purposes are not identical, they are frequently used to accomplish the same task, which is data interchange. Both have well-documented open standards on the Web (RFC 7159, RFC 4825), and both are human and machine-readable. Neither one is absolutely superior to the other, as each is better suited for different use cases.

XML Advantages

There are several advantages that XML has over JSON. One of the biggest differences between the two is that in XML you can put metadata into the tags in the form of attributes. With JSON, the programmer could accomplish the same goal that metadata achieves by making the entity an object and adding the attributes as members of the object. However, the way XML does it may often be preferable, given the slightly misleading nature of turning something into an object that is not one in the client program. For example, if your C++ program sends an int via JSON and needs metadata to be sent along with it, you would have to make it an object, with one name/value pair for the actual value of the int, and more name/value pairs for each attribute. The program that receives the JSON would read it as an object, when in fact it is not one. While this is a viable solution, it defies one of JSON’s key advantages: “JSON’s structures look like conventional programming language structures. No restructuring is necessary.”[2]

Although I will argue later that this can also be a drawback of XML, its mechanism to resolve name conflicts, prefixes, gives it power that JSON does not have. With prefixes, the programmer has the ability to name two different kinds of entities the same thing.[1] This would be advantageous in situations where the different entities should have the same name in the client program, perhaps if they are used in entirely different scopes.

Another advantage of XML is that most browsers render it in a highly readable and organized way. The tree structure of XML lends itself well to this formatting, and allows for browsers to let users to naturally collapse individual tree elements. This feature would be particularly useful in debugging.

One of the most significant advantages that XML has over JSON is its ability to communicate mixed content, i.e. strings that contain structured markup. In order to handle this with XML, the programmer need only put the marked-up text within a child tag of the parent in which it belongs. Similar to the metadata situation, since JSON only contains data, there is no such simple way to indicate markup. It would again require storing metadata as data, which could be considered an abuse of the format.

JSON Advantages

JSON has several advantages as well. One of the most obvious of these is that JSON is significantly less verbose than XML, because XML necessitates opening and closing tags (or in some cases less verbose self-closing tags), and JSON uses name/value pairs, concisely delineated by “{“ and “}” for objects, “[“ and “]” for arrays, “,” to separate pairs, and “:” to separate name from value. Even when zipped (using gzip), JSON is still smaller and it takes less time to zip it.[6] As determined by Sumaray and Makki as well as Nurseitov, Paulson, Reynolds, and Izurieta in their experimental findings, JSON outperforms XML in a number of ways. First, naturally following from its conciseness, JSON files that contain the same information as their XML counterparts are almost always significantly smaller, which leads to faster transmission and processing. Second, difference in size aside, both groups found that JSON was serialized and deserialized drastically faster than XML.[3][4] Third, the latter study determined that JSON processing outdoes XML in CPU resource utilization. They found that JSON used less total resources, more user CPU, and less system CPU. The experiment used RedHat machines, and RedHat claims that higher user CPU usage is preferable.[3] Unsurprisingly, the Sumaray and Makki study determined that JSON performance is superior to XML on mobile devices too.[4] This makes sense, given that JSON uses less resources, and mobile devices are less powerful than desktop machines.

Yet another advantage that JSON has over XML is that its representation of objects and arrays allows for direct mapping onto the corresponding data structures in the host language, such as objects, records, structs, dictionaries, hash tables, keyed lists, and associative arrays for objects, and arrays, vectors, lists, and sequences for arrays.[2] Although it is perfectly possible to represent these structures in XML, it is only as a function of the parsing, and it takes more code to serialize and deserialize properly. It also would not always be obvious to the reader of arbitrary XML what tags represent an object and what tags represent an array, especially because nested tags can just as easily be structured markup instead. The curly braces and brackets of JSON definitively show the structure of the data. However, this advantage does come with the caveat explained above, that the JSON can inaccurately represent the data if the need arises to send metadata.

Although XML supports namespaces and prefixes, JSON’s handling of name collisions is less verbose than prefixes, and arguably feels more natural with the program using it; in JSON, each object is its own namespace, so names may be repeated as long as they are in different scopes. This may be preferable, as in most programming languages members of different objects can have the same name, because they are distinguished by the names of the objects to which they belong.

Perhaps the most significant advantage that JSON has over XML is that JSON is a subset of JavaScript, so code to parse and package it fits very naturally into JavaScript code. This seems highly beneficial for JavaScript programs, but does not directly benefit any programs that use languages other than JavaScript. However, this drawback has been largely overcome, as currently the JSON website lists over 175 tools for 64 different programming languages that exist to integrate JSON processing. While I cannot speak to the quality of most of these tools, it is clear that the developer community has embraced JSON and has made it simple to use in many different platforms.


Simply put, XML’s purpose is document markup. This is decidedly not a purpose of JSON, so XML should be used whenever this is what needs to be done. It accomplishes this purpose by giving semantic meaning to text through its tree-like structure and ability to represent mixed content. Data structures can be represented in XML, but that is not its purpose.

JSON’s purpose is structured data interchange. It serves this purpose by directly representing objects, arrays, numbers, strings, and booleans. Its purpose is distinctly not document markup. As described above, JSON does not have a natural way to represent mixed content.

Impeaching Donald Trump

| Comments

Yoni Appelbaum clearly and methodically lays out the case that Congress should begin the impeachment process against Donald Trump in The Atlantic.

The oath of office is a president’s promise to subordinate his private desires to the public interest, to serve the nation as a whole rather than any faction within it. Trump displays no evidence that he understands these obligations. To the contrary, he has routinely privileged his self-interest above the responsibilities of the presidency. He has failed to disclose or divest himself from his extensive financial interests, instead using the platform of the presidency to promote them. This has encouraged a wide array of actors, domestic and foreign, to seek to influence his decisions by funneling cash to properties such as Mar-a-Lago (the “Winter White House,” as Trump has branded it) and his hotel on Pennsylvania Avenue. Courts are now considering whether some of those payments violate the Constitution.

More troubling still, Trump has demanded that public officials put their loyalty to him ahead of their duty to the public. On his first full day in office, he ordered his press secretary to lie about the size of his inaugural crowd. He never forgave his first attorney general for failing to shut down investigations into possible collusion between the Trump campaign and Russia, and ultimately forced his resignation. “I need loyalty. I expect loyalty,” Trump told his first FBI director, and then fired him when he refused to pledge it.

Trump has evinced little respect for the rule of law, attempting to have the Department of Justice launch criminal probes into his critics and political adversaries. He has repeatedly attacked both Deputy Attorney General Rod Rosenstein and Special Counsel Robert Mueller. His efforts to mislead, impede, and shut down Mueller’s investigation have now led the special counsel to consider whether the president obstructed justice.

America has urgent challenges to address on behalf of all of its citizens and they’re just not getting much consideration. Instead, we’ve given the attention of the country over to a clown and a charlatan who wants nothing more than for everyone to adore and enrich him.

Gradually, Then Suddenly

| Comments

Tim O’Reilly writes about some technology-related changes happening in the world where incremental advances in recent years are set to soon become pervasive.

2) The rest of the world is leapfrogging the US
The volume of mobile payments in China is $13 trillion versus the US’s $50 billion, while credit cards never took hold. Already Zipline’s on-demand drones are delivering 20% of all blood supplies in Rwanda and will be coming soon to other countries (including the US). In each case, the lack of existing infrastructure turned out to be an advantage in adopting a radically new model. Expect to see this pattern recur, as incumbents and old thinking hold back the adoption of new models.

Rogue One - a Review

| Comments

Following the release of J.J. Abrams' The Force Awakens, the Star Wars franchise arguably is as popular as it’s ever been. But it also finds itself standing at a crossroads. In response to George Lucas' polarizing prequel trilogy, the sci-fi saga has worked to resurrect its original image and feel - and while that has meant a wonderful return to practical filmmaking and concise storytelling, it also led Abrams' movie to feel like an echo of A New Hope, the 1977 blockbuster that started it all. This has raised an important uncertainty amongst fans: can new Star Wars titles remain beholden to what made the classic films great, while simultaneously developing unique and special narratives? Gareth Edwards' Rogue One: A Star Wars Story proves that the answer to this question is an unequivocal “Yes.”

Finding the balance between the old and new within Rogue One starts with its conceit and approach, magnifying a story audiences think they already know with an aesthetic that’s fresh within this franchise. Expanding a single line from the opening crawl of A New Hope, Rogue One tells the tale of the rebel spies who stole the original plans for the Death Star, all while putting a much heavier emphasis on the “Wars” aspect of Star Wars and exploring a gritty, more realistic feel. The combination not only lends itself to a thrilling, fun and dark narrative that is full of legitimate surprises, but even allows the introduction of elements and details that actually make its predecessors stronger. It’s a film that introduces exciting original characters, worlds and ideas while also managing to give us some of the best Darth Vader material that we’ve ever seen.

Instrumental in this is Rogue One’s new ensemble of protagonists – none of whom have any direct connections to previously established heroes (which is incredibly important within trying to open up the universe beyond the Skywalker clan). While Star Wars has notoriously always operated in black and white morality – the Rebels purely representing good, and the Empire evil –the Rogue One script by Chris Weitz and Tony Gilroy introduces important grey areas that emerge naturally from the reality of the subject matter, and effectively add depth to the characters and the stakes of their mission.

At the head of this is Jyn Erso (Felicity Jones), a young woman who has spent her life on the run from the Empire doing anything required in order to survive – but it fully extends to her compatriots as well, from Cassian Andor (Diego Luna), a Rebel spy whose commitment to the cause has taken him down some extremely dark roads; to Bodhi Rook (Riz Ahmed), an Imperial cargo pilot who defects in hopes of repentance. It can’t be said that these characters wind up undergoing extreme arcs that make them different people by the time the movie is over, but each of them enhances the story being told, and they all have vital roles to play within it – deepening themes of hope and sacrifice that have always been inherent to Star Wars.

All of this may seem to point to Rogue One: A Star Wars Story being an entirely bleak affair, but working to measure tone is actually yet another one of the movie’s strengths. Audiences definitely won’t be laughing whenever the Empire is flexing its muscles (or really during any scene featuring Ben Mendelsohn’s intimidating Lt. Commander Orson Krennic), but it certainly does have a sense of humor that derives organically. While never being anything as reductive as “comic relief,” the greatest assets the film has in this respect are unquestionably Donnie Yen’s Chirrut Îmwe (a blind warrior monk with a deep faith in The Force), and Alan Tudyk’s K-2SO (a reprogrammed Imperial droid that has a tendency to say exactly what’s on its mind). Much more than just delivering quippy lines, their best moments really just come from their natural attitudes and interactions – whether it’s their individual contempt for authority, or fun relationships with the other members of their team (particularly Wen Jiang’s heavy gun-toting Baze Malbus and Jyn Erso, respectively). This levity that not only prevents the blockbuster from feeling overly harsh and dreary, but endears you to the heroes and makes you root for their victory and survival that much more.

It’s a similar balance that plays into Rogue One’s style and action as well, somehow managing to be both unlike anything we’ve seen before from the franchise, while also being undeniably Star Wars. Gareth Edwards' on-the-ground approach during the movie’s many bombastic and exciting action sequences makes you feel the dirt spray on your face, and actually experience the danger and consequences of the battles – an element that hasn’t been featured in these movies before. There is an incredible variety established within the set pieces as well, not only in setting, fighting style and weaponry, but also just from a creative aesthetic perspective – with many new kinds of Stormtroopers featured and even a few new spaceships thrown into the mix. Most importantly, every bit of action is important and furthers the plot in a significant way, all leading to a third act and final climatic Rebels vs. Empire showdown that can be described with no other term than “perfect.”

There are elements of Rogue One that do somewhat hold the film back – such as a few underdeveloped plot elements, and a desire to see more of the relationship between Orson Krennic and Mads Mikkelson’s Galen Erso (Jyn’s father and the creator of the Death Star) – but these are minor issues in the grand scheme. Much more significant is the specific vision of Gareth Edwards, the fantastic plot execution, and it’s deep connection to what makes these movies great in the first place - all of which spell incredible things for the future of Star Wars. If the franchise can continually pull off blockbusters with the same level of creative energy and the proper amount of reverence as Rogue One does, there’s every reason to expect greatness for years to come.