tag:blogger.com,1999:blog-24977927628637058262024-03-06T02:24:54.218-07:00Tohono Consulting"Tohono" is the word for desert in the O'odham language.Tom Hickshttp://www.blogger.com/profile/15248245864656702354noreply@blogger.comBlogger24125tag:blogger.com,1999:blog-2497792762863705826.post-36656402785795766552023-09-28T09:18:00.002-07:002023-09-28T10:38:59.579-07:00Apple's Foundation Inspires Hamlet 2.0<p style="text-align: left;"><span style="font-family: verdana;"> I'm unequivocally ambivalent about Apple's "Foundation" series.</span></p><p style="text-align: left;"><span style="font-family: verdana;">On the one hand I am enjoying the show's good production values, weird (albeit overly politically correct) characters, and bizarre, unpredictable story lines.</span></p><p style="text-align: left;"><span style="font-family: verdana;">On the other hand, as a fan of Isaac Asimov, I'm constantly stunned and horrified by what </span><span style="font-family: verdana;">they've done to his work. This series bears as much resemblance to its namesake as 'X-Men' </span><span style="font-family: verdana;">does to 'Waiting For Godot'. Apparently, it wasn't enough for the creators to steal the </span><span style="font-family: verdana;">names, places, and fundamental idea of Foundation but they then proceeded to subvert or </span><span style="font-family: verdana;">pervert every one of its foundational concepts. In doing so, they have turned Asimov's </span><span style="font-family: verdana;">classic, cerebral, sweeping future history into a comic book, superhero, action-adventure, </span><span style="font-family: verdana;">Star Wars clone.</span></p><p style="text-align: left;"><span style="font-family: verdana;">So, given that streaming services are currently spending big money to redo classic tales, </span><span style="font-family: verdana;">and inspired by Apple's fantastical rewrite of Foundation, I think the time is ripe to </span><span style="font-family: verdana;">proffer my updated treatment of Shakespeare's Hamlet which, let's face it, is too slow and </span><span style="font-family: verdana;">plodding to ever be realized by today's Hollywood.</span></p><p style="text-align: left;"><span style="font-family: verdana;">In my updated, more exciting, revised version...</span></p><p style="text-align: left;"><span style="font-family: verdana;">Hamlet is an Egyptian princess and daughter of the pharaoh Casper. Her mother, Gertrude, </span><span style="font-family: verdana;">is an ex-slave from Denmark who became a concubine and, ultimately, the pharaoh's </span><span style="font-family: verdana;">queen. Hamlet is also the cousin of Tutankhamun, whose father is Hamlet's uncle </span><span style="font-family: verdana;">Claudius. [<i>production note: we should find an Egyptian actress to play Hamlet. If none are </i></span><span style="font-family: verdana;"><i>available in Hollywood, a Maori actress will do, as the audience won't know the </i></span><span style="font-family: verdana;"><i>difference anyway</i>].</span></p><p style="text-align: left;"><span style="font-family: verdana;">In the first episode we illustrate that Hamlet is a strong woman of action: we see her </span><span style="font-family: verdana;">being trained in sword fighting and chariot racing by the Greek general Yorick. Yorick has </span><span style="font-family: verdana;">been assigned to train her by Alexander the Great, who is an ally of her father Casper.</span></p><p style="text-align: left;"><span style="font-family: verdana;">Despite being tougher than most of the pharaoh's men, Hamlet has many potential </span><span style="font-family: verdana;">suitors. Chief among them is Laertes, the son of the pharaoh's chief pyramid builder; </span><span style="font-family: verdana;">Polonius. [<i>production note: need a scene of virile, scantily clad slaves being whipped </i></span><span style="font-family: verdana;"><i>while hauling giant blocks of stone, to attract the S & M crowd</i>]. Laertes is also friends </span><span style="font-family: verdana;">with the young Tutankhamun, a sneaky brat who is jealous of his sister's popularity with </span><span style="font-family: verdana;">their father and the public and who is secretly plotting with two courtiers (Rosencrantz </span><span style="font-family: verdana;">and Guildenstern) to kill Hamlet.</span></p><p style="text-align: left;"><span style="font-family: verdana;">Hamlet soon learns of a major chariot race being held in Rome by Julius Ceasar and which </span><span style="font-family: verdana;">features a large prize of gold. Unfortunately, pharaoh Casper dislikes his rival Ceasar </span><span style="font-family: verdana;">and forbids his daughter from going to Rome. With the aide of her best friend Horatio, </span><span style="font-family: verdana;">Hamlet sneaks out of the palace and steals a sailboat. [<i>production note: this should </i></span><span style="font-family: verdana;"><i>probably be a Dhow or Felucca, for historical accuracy</i>]. During the voyage, Hamlet's </span><span style="font-family: verdana;">relationship with Horatio is revealed to be platonic as he confesses to being gay and in </span><span style="font-family: verdana;">(unrequited) love with Laertes.</span></p><p style="text-align: left;"><span style="font-family: verdana;">Soon, a great storm arises and the boat's captain is washed overboard. Hamlet springs into </span><span style="font-family: verdana;">action, grabs the tiller, and almost saves the boat. Unfortunately, the captain's drowned </span><span style="font-family: verdana;">body has jammed the rudder and, unable to steer, the ship is dashed to pieces on the </span><span style="font-family: verdana;">rocks. [<i>plot note: this section could be expanded into an entire episode in which the </i></span><i><span style="font-family: verdana;">voyagers are washed ashore at different places on the Italian coast and the various </span><span style="font-family: verdana;">parties do not know the fates of the others. To avoid being mistaken for invaders, the </span></i><span style="font-family: verdana;"><i>males must dress as women and Horiatio discovers that he likes cross dressing</i>].</span></p><p style="text-align: left;"><span style="font-family: verdana;">After wandering the countryside in confusion, the shipwrecked parties are joyfully </span><span style="font-family: verdana;">reunited and make their way to Rome. In Rome, Hamlet is welcomed at the palace by Julius </span><span style="font-family: verdana;">Ceasar, who immediately becomes infatuated with her. Ceasar provides Hamlet with lodging </span><span style="font-family: verdana;">and a beautiful Nubian slave girl named Ophelia. Hamlet is immediately smitten with </span><span style="font-family: verdana;">Ophelia and they spend the night together. [<i>production notes: (1) Hamlet must, of course, </i></span><span style="font-family: verdana;"><i>ask for Ophelia's consent before making love to her, (2) create a passionate but tasteful </i></span><span style="font-family: verdana;"><i>lesbian sex scene, to attract L-Word fans</i>].</span></p><p style="text-align: left;"><span style="font-family: verdana;">The next day, in the royal stables, Hamlet is introduced to her chariot team: four white </span><span style="font-family: verdana;">horses led by a magnificent black stallion. The stallion is at first skittish but is soon </span><span style="font-family: verdana;">tamed by Hamlet's horse whispering skills. [<i>production note: tender taming scene with </i></span><span style="font-family: verdana;"><i>closeups and stroking of horse's face, to please the horsey crowd</i>]. Later that day, in a </span><span style="font-family: verdana;">practice race, Hamlet meets and competes with her greatest rival, the renown Roman </span><span style="font-family: verdana;">charioteer Fortinbras. [<i>production note: Can we get Russell Crowe to play this part?</i>] </span><span style="font-family: verdana;">[<i>plot note: Fortinbras' back-story can easily be expanded into an entire episode: a </i></span><i><span style="font-family: verdana;">Christian who was once condemmed by Ceasar to fight as a gladiator but, with God's help, </span><span style="font-family: verdana;">earned his freedom and became Ceasar's favorite charioteer. Attracts both the christian </span></i><span style="font-family: verdana;"><i>and Gladiator movie crowds</i>].</span></p><p style="text-align: left;"><span style="font-family: verdana;">The morning of the chariot competition arrives and Hamlet reveals her spiritual side; with </span><span style="font-family: verdana;">Ophelia still asleep in her bed, Hamlet leaves to go and pray to the female deity Gaia. In </span><span style="font-family: verdana;">a contrasting parallel scene, Fortinbras is shown secretly praying to the partiarchal god </span><span style="font-family: verdana;">Zeus.</span></p><p style="text-align: left;"><span style="font-family: verdana;">In the chariot race, Hamlet faces off against strong, handsome male charioteers from all </span><span style="font-family: verdana;">over the world, including China, India, Iran, Russia, and North Korea [<i>production note: </i></span><span style="font-family: verdana;"><i>use CGI to create epic settings reminiscent of the Olympics, to attract the both the </i></span><span style="font-family: verdana;"><i>sporting and Ben Hur crowds</i>]. After a hard-fought race, in which Fortinbras nearly wins, </span><span style="font-family: verdana;">Hamlet and her black-stallion-led team triumph. At the award ceremony, Ceasar offers to </span><span style="font-family: verdana;">make Hamlet his empress but, as an autonomous woman who does not need a man, she politely </span><span style="font-family: verdana;">declines. Disappointed, he tries to award her the prize gold but she asks instead to be </span><span style="font-family: verdana;">given only Ophelia and the black stallion. Ceasar agrees and provides passage back to </span><span style="font-family: verdana;">Egypt for all of them.</span></p><p style="text-align: left;"><span style="font-family: verdana;">Back in Egypt, Hamlet frees Ophelia from slavery and takes her to the royal court to </span><span style="font-family: verdana;">introduce her to Casper. Her father is outraged and reveals that he had planned to marry </span><span style="font-family: verdana;">Hamlet off to his friend Alexander the Great. Showing once again that she is willing to </span><span style="font-family: verdana;">stand up to the patriarchy, Hamlet begins a ferocious argument with her father, accusing </span><span style="font-family: verdana;">him of assisting Alexander with predatory dating, since she is only 22 and Alexander is a </span><span style="font-family: verdana;">full eight years older. She also accuses her father of racism, since Ophelia has darker </span><span style="font-family: verdana;">skin than they do.</span></p><p style="text-align: left;"><span style="font-family: verdana;">Their fierce argument is interrupted, however by urgent news that several ships full of </span><span style="font-family: verdana;">Vikings are invading the country near the Nile delta. [<i>plot note: I had originally </i></span><span style="font-family: verdana;"><i>intended to use Assyrian invaders but decided that Vikings might be more consistent with </i></span><span style="font-family: verdana;"><i>the original play</i>]. [<i>production note: also, it attacts fans from the Vikings show</i>]. As </span><span style="font-family: verdana;">Casper is too old and indecisive and Tutankhamun is too young, fearful, and treacherous, </span><span style="font-family: verdana;">Hamlet mounts her black stallion and leads two regiments of the Egyptian army northwards.</span></p><p style="text-align: left;"><span style="font-family: verdana;">Hamlet's forces encounter the Vikings encamped on the floodplains of the Nile delta and </span><span style="font-family: verdana;">Hamlet agrees to meet with the Viking leader, Barnardo. [<i>production note: a reviewer </i></span><i><span style="font-family: verdana;">suggested that it would be impossible for these groups to communicate but I think we </span><span style="font-family: verdana;">should just avoid that controversy by assuming that everyone involved speaks </span></i><span style="font-family: verdana;"><i>English</i>]. Hamlet rides the black stallion to meet Barnardo, who initially is disdainful of </span><span style="font-family: verdana;">her and refuses to believe that she leads the army. Angrily accusing Barnardo of </span><span style="font-family: verdana;">chauvinism, she challenges him to a personal duel. After many minutes of intense sword </span><span style="font-family: verdana;">play, she manages to nick Barnardo's sword arm. He is so impressed that he halts the fight </span><span style="font-family: verdana;">and they sit down to talk and drink mead. Bernardo offers to withdraw from Egypt in </span><span style="font-family: verdana;">exchange for treasure, an offer which Hamlet refuses. Bernardo, now much more drunk than </span><span style="font-family: verdana;">Hamlet, offers to make Hamlet his queen. As an autonomous woman who does not need a man, </span><span style="font-family: verdana;">Hamlet politely declines. Barnardo suggests that perhaps she will change her mind after he </span><span style="font-family: verdana;">defeats her in battle the next day. She replies firmly that she will not change her mind </span><span style="font-family: verdana;">and rides back to her encampment.</span></p><p style="text-align: left;"><span style="font-family: verdana;">Early the next morning, as the two armies are preparing for battle, Yorick comes galloping </span><span style="font-family: verdana;">up. Breathlessly, he describes how Hamlet's mother, queen Gertrude, has gone berserk from </span><span style="font-family: verdana;">her lifelong mistreatment by the patriarchy and has murdered both pharaoh Casper and his </span><span style="font-family: verdana;">brother Claudius. [<i>plot note: Gertrude's back-story can easily be expanded into an entire </i></span><i><span style="font-family: verdana;">episode: captured in Denmark she was sex-trafficked all over the Roman empire and finally </span><span style="font-family: verdana;">sold to Claudius as a concubine, but "cheated" on him with Casper and, thus, became </span></i><span style="font-family: verdana;"><i>Casper's queen</i>]. Gertrude has declared herself a deity, and with Tutankhamun and the </span><span style="font-family: verdana;">remainder of the Egyptian army, has sealed herself into the impregnable royal palace. Not </span><span style="font-family: verdana;">one to sit around brooding, Hamlet realizes that she needs help to avenge her father and </span><span style="font-family: verdana;">uncles's deaths. She meets once again with Bernardo and offers to hire the Vikings as </span><span style="font-family: verdana;">mercenaries to depose the queen. Bernardo agrees, but only if Hamlet will marry him when </span><span style="font-family: verdana;">the job is done. Reluctantly, but thinking of her country and her people, Hamlet agrees to </span><span style="font-family: verdana;">the sacrifice and the Viking/Egyptian army sets off for the palace.</span></p><p style="text-align: left;"><span style="font-family: verdana;">In the next episode, a month has passed during which the Viking/Egyptian army has tried, </span><span style="font-family: verdana;">in vain, to storm the impregnable royal palace. While the thick walls are impenetrable, </span><span style="font-family: verdana;">the entrance doors would be vulnerable to repeated battering, except that they are too </span><span style="font-family: verdana;">well protected for such repetitive attacks.</span></p><p style="text-align: left;"><span style="font-family: verdana;">As they sit in siege, the Vikings grow restless and Barnardo begins to regret his drunken </span><span style="font-family: verdana;">mercenary agreement. Eventually, a big fight breaks out between the Viking faction loyal </span><span style="font-family: verdana;">to Barnardo and those who want to go plunder somewhere else. [<i>production note: this could </i></span><span style="font-family: verdana;"><i>be a dramatic nighttime battle, in camp, lit by the torches of the tents (although it </i></span><span style="font-family: verdana;"><i>might be difficult to see the blood in the dark)</i>]. After the Viking dispute, Barnardo </span><span style="font-family: verdana;">declares that he will be the next pharaoh and demands that Hamlet become his queen </span><span style="font-family: verdana;">immediately. Hamlet, of course, refuses and they fight each other mano a mano. Hamlet is </span><span style="font-family: verdana;">wounded but manages to kill Barnardo. After Barnardo's death, the Vikings all pack up and </span><span style="font-family: verdana;">leave.</span></p><p style="text-align: left;"><span style="font-family: verdana;">After the Vikings leave, Hamlet reconnects with Horatio, who now deems themself a woman, </span><span style="font-family: verdana;">wishes to be called "Hora", and insists that Hamlet use the correct pronouns when </span><span style="font-family: verdana;">referring to them. Hora tells Hamlet about a recent shopping experience in which they </span><span style="font-family: verdana;">bought dress silks from an Italian merchant by the name of Marco Polo, who also sells a </span><span style="font-family: verdana;">novel black powder which might be able to end the siege.</span></p><p style="text-align: left;"><span style="font-family: verdana;">Hamlet quickly boards a boat and sails to Venice to find Marco Polo. Upon meeting the </span><span style="font-family: verdana;">handsome, young Marco Polo, Hamlet is aroused by his unisex look, his puppy-dog eyes, </span><span style="font-family: verdana;">and his demure demeanor [<i>production note: be sure to mention that MP is 18</i>]. Overcoming </span><span style="font-family: verdana;">his initial reluctance, she forcefully seduces him and enjoys it immensely. This act </span><span style="font-family: verdana;">affirms her growing dislike of labels; she is not just a lesbian but a more open-minded </span><span style="font-family: verdana;">bisexual. In gratitude for losing his virginity, Marco Polo gives her his formula for </span><span style="font-family: verdana;">making gunpowder.</span></p><p style="text-align: left;"><span style="font-family: verdana;">Returning home, Hamlet succeeds in manufacturing gunpowder but soon ascertains that, </span><span style="font-family: verdana;">because of the architecture of the entrance doors, they can only be blown off from the </span><span style="font-family: verdana;">inside. [<i>production note: find some technical gobbledygook to explain why this is true</i>]. </span><span style="font-family: verdana;">Remembering that Laertes frequently used to raid the palace's wine cellar, Hamlet invites </span><span style="font-family: verdana;">him to her tent to ask him about possible underground entrances into the palace. Hora is </span><span style="font-family: verdana;">present when Laertes arrives and Laertes is smitten with their new look. Wishing to </span><span style="font-family: verdana;">impress Hora, Laertes is very helpful and provides information about a small sewer tunnel, </span><span style="font-family: verdana;">which Hamlet and Ophelia decide to use.</span></p><p style="text-align: left;"><span style="font-family: verdana;">Later that night, Hamlet and Ophelia traverse the sewer tunnel carrying a barrel of </span><span style="font-family: verdana;">gunpowder and some torches. Once inside the palace they separate, with Ophelia taking the </span><span style="font-family: verdana;">gunpowder to the entrance doors and Hamlet going to look for the queen. Meanwhile, Polonius </span><span style="font-family: verdana;">has been ordered by the mad queen to destroy his beloved creation; the Great Pyramid, </span><span style="font-family: verdana;">which is the pharaoh's resting place. Instead, he has decided to kill her and is bringing a jug of </span><span style="font-family: verdana;">water laced with poison to Gertrude's bed chamber. He puts the jug quietly down beside the </span><span style="font-family: verdana;">sleeping queen but, before he can escape, he hears Hamlet approaching. He slips behind a </span><span style="font-family: verdana;">nearby curtain. As Hamlet enters the room, she is incensed to see how many lit candles </span><span style="font-family: verdana;">Gertrude is burning at once. Does Gertrude have no regard for fire safety? In a fit of pique, </span><span style="font-family: verdana;">Hamlet grabs one of the candles and pours hot wax into the queen's ear. The queen awakens </span><span style="font-family: verdana;">screaming and Polonius lets out a startled cry. Fearing discovery and without thinking, </span><span style="font-family: verdana;">Hamlet pulls out her sword and stabs Polonius repeatedly through the </span><span style="font-family: verdana;">curtain. Simultaneously, the queen grabs the nearby water jug and pours its contents over </span><span style="font-family: verdana;">her ear but the poisoned water runs down her face, entering her eyes, nose, and </span><span style="font-family: verdana;">mouth. [<i>production note: depending on what sponsors we find, this death scene could be made </i></span><span style="font-family: verdana;"><i>more gross and graphic</i>]. Polonius and the queen are both soon dead.</span></p><p style="text-align: left;"><span style="font-family: verdana;">While Hamlet is getting her revenge for her father's death, Ophelia positions the </span><span style="font-family: verdana;">gunpowder barrel at the entrance doors and lights the fuse. She rushes back toward the </span><span style="font-family: verdana;">sewer tunnel. [<i>production note: Ophelia should count down the remaining time, out </i></span><span style="font-family: verdana;"><i>loud, in order to build the tension</i>]. Meeting Hamlet at the sewer tunnel they enter it and </span><span style="font-family: verdana;">begin to crawl back through it as Ophelia counts down the remaining seconds. Just as they </span><span style="font-family: verdana;">near the outside entrance, the gunpowder explodes and a wall of flame travels down the </span><span style="font-family: verdana;">sewer tunnel, knocking them both outside the palace walls. Singed, but unhurt, they </span><span style="font-family: verdana;">celebrate as Hamlet's army storms into the palace.</span></p><p style="text-align: left;"><span style="font-family: verdana;">A little while later, the servant Reynaldo is sent to tell Laertes that his father has </span><span style="font-family: verdana;">been murdered in the queen's bed chamber. Reynaldo finds Laertes in bed with Hora, who </span><span style="font-family: verdana;">tries their best to comfort Laertes after he learns the news. Laertes and Hora both know, </span><span style="font-family: verdana;">however, that Hamlet's revenge plan took her to the queen's bed chamber and Hora is not </span><span style="font-family: verdana;">surprised when Laertes vows revenge against Hamlet.</span></p><p style="text-align: left;"><span style="font-family: verdana;">The season finale opens with peace and quiet having, seemingly, returned to the </span><span style="font-family: verdana;">kingdom. As the pharaoh Casper, his brother Claudius, the mad queen Gertrude, the Viking </span><span style="font-family: verdana;">leader Barnardo, and the chief architect Polonius are all dead, and as Tutankhamun is </span><span style="font-family: verdana;">still too young for the throne, Hamlet appoints herself the pharaonic regent. This angers </span><span style="font-family: verdana;">Tutankhamun, who was expecting to be made pharaoh, and he continues to plot with two </span><span style="font-family: verdana;">courtiers (Rosencrantz and Guildenstern) to kill Hamlet. [<i>production note: much silly, </i></span><span style="font-family: verdana;"><i>incompetent planning as a source of comic relief</i>]</span></p><p style="text-align: left;"><span style="font-family: verdana;">With the death of his father Polonius, Laertes has become the chief architect of the </span><span style="font-family: verdana;">kingdom and is tasked with completing the Great Pyramid. While it is assumed that Polonius </span><span style="font-family: verdana;">and mad queen Gertrude killed each other, Laertes and his transgendered lover Hora know </span><span style="font-family: verdana;">the truth: that Polonius died at Hamlet's hands. Seeking revenge, Laertes explores </span><span style="font-family: verdana;">Tutankhamun as a possible ally. The pair quickly discover their mutual hatred for Hamlet </span><span style="font-family: verdana;">and plot how best to kill her. Hora finds out about their plotting and is greatly </span><span style="font-family: verdana;">troubled, as they were once Hamlet's best friend.</span></p><p style="text-align: left;"><span style="font-family: verdana;">One morning Francisco, a security guard at the pyramid construction site, comes to Laertes </span><span style="font-family: verdana;">and reports that the angry mummy of Casper has been seen wandering the unfinished pyramid </span><span style="font-family: verdana;">at night and has killed several of the slaves. [<i>plot notes: (1) The mummy story could </i></span><i><span style="font-family: verdana;">easily be expanded into an entire episode in which jewish slaves are being targeted by the </span><span style="font-family: verdana;">anti-semitic mummy and a great shaman, Moses, weaves a protection spell for the slaves </span><span style="font-family: verdana;">during an ayahuasca ceremony. (2) A Moses episode in Hamlet could be the perfect prequel </span><span style="font-family: verdana;">for a secular spin-off which revamps the book of Exodus (unlike that preachy Charlton </span></i><span style="font-family: verdana;"><i>Heston movie)</i>].</span></p><p style="text-align: left;"><span style="font-family: verdana;">Laertes, seeing the opportunity to eliminate Hamlet, tells Hamlet that her father's mummy </span><span style="font-family: verdana;">has appeared and requests that Hamlet and Ophelia visit him that night in the king's </span><span style="font-family: verdana;">burial chamber, within the pyramid. Laertes then instructs Rosencrantz and Guildenstern to </span><span style="font-family: verdana;">hide within the pyramid and kill Hamlet when she visits.</span></p><p style="text-align: left;"><span style="font-family: verdana;">Later that night, honoring her father's wishes, Hamlet and Ophelia enter the </span><span style="font-family: verdana;">pyramid. Hora, hoping to somehow protect Hamlet, is lurking in the shadows outside the </span><span style="font-family: verdana;">pyramid when they observe Laertes approach. Inside, Hamlet and Ophelia enter the burial </span><span style="font-family: verdana;">chamber and are confronted with both her father's and her uncle's mummies, each wearing a </span><span style="font-family: verdana;">large, golden amulet. [<i>production note: mummies should look clean and likeable at this </i></span><span style="font-family: verdana;"><i>point</i>]. Castor mummy praises Hamlet for revenging his death, for restoring the kingdom, </span><span style="font-family: verdana;">and for being such a strong woman. He apologizes for trying to control her life and for </span><span style="font-family: verdana;">not letting her make her own decisions. Claudius mummy warns Hamlet that Tutankhamun </span><span style="font-family: verdana;">cannot be trusted.</span></p><p style="text-align: left;"><span style="font-family: verdana;">Meanwhile, Laertes, still pacing outside, grows impatient and enters the pyramid. Hora </span><span style="font-family: verdana;">then approaches the entrance but does not enter.</span></p><p style="text-align: left;"><span style="font-family: verdana;">Having reconciled with her father and settled her daddy issues, Hamlet is feeling </span><span style="font-family: verdana;">good. But, as she and Ophelia start to leave the pyramid, they are attacked from a side </span><span style="font-family: verdana;">corridor by Rosencrantz and Guildenstern. Hamlet draws her sword and fights both attackers </span><span style="font-family: verdana;">at once. Suddenly, both mummies appear [<i>production note: looking decayed and hideous at </i></span><span style="font-family: verdana;"><i>this point</i>]. R & G drop their swords in fright and run towards the exit, chased by the </span><span style="font-family: verdana;">mummies. Laertes suddenly sees R & G running towards him, chased by two mummies, so he </span><span style="font-family: verdana;">also turns and runs for the exit. Hora, looking down a long corridor into the pyramid, </span><span style="font-family: verdana;">sees their beloved Laertes, followed by R & G, being chased by the murderous mummies. Hora </span><span style="font-family: verdana;">triggers the pyramid's security seal and a giant block of stone crashes down, narrowly </span><span style="font-family: verdana;">missing Laertes, crushing R & G, and sealing the mummies, Ophelia, and Hamlet inside.</span></p><p style="text-align: left;"><span style="font-family: verdana;">Hamlet and Ophelia, realizing that they are sealed inside the pyramid, are aghast. Her </span><span style="font-family: verdana;">father and uncle mummies reappear [<i>production note: now looking clean and likeable </i></span><span style="font-family: verdana;"><i>again</i>]. In an emotional scene, the four of them sit around in the burial chamber. Casper </span><span style="font-family: verdana;">mummy apologizes to Hamlet for the restrictions and the oppression that his patriarchal </span><span style="font-family: verdana;">regime has forced upon her life. He tells Hamlet that he can save her and Ophelia but it </span><span style="font-family: verdana;">will cost him and Claudius mummy their afterlife. Caspar mummy reveals that their golden </span><span style="font-family: verdana;">amulets will put the living into a state of hibernation. Hamlet objects to his proposed </span><span style="font-family: verdana;">sacrifice but Caspar mummy says he will do it to atone for his sins. Caspar mummy lies </span><span style="font-family: verdana;">Hamlet and Ophelia down, side by side, on a large stone block. The mummies remove their </span><span style="font-family: verdana;">amulets and place them on Hamlet and Ophelia. As the torches sputter out, Hamlet and </span><span style="font-family: verdana;">Ophelia fall asleep and the Caspar and Claudius mummies slowly turn to dust.</span></p><p style="text-align: left;"><span style="font-family: verdana;">In the penultimate scenes, Tutankhamun is anointed pharaoh before a huge crowd outside the </span><span style="font-family: verdana;">Great Pyramid. [<i>production notes: (1) A wide drone shot over a huge, mixed racial </i></span><i><span style="font-family: verdana;">crowd, (2) Several, closer, crowd shots of Egyptian commoners sprinkled with a few Roman, </span><span style="font-family: verdana;">Greek, and Viking spectators, (3) a closeup of Marco Polo observing the coronation from </span></i><span style="font-family: verdana;"><i>the edge of the crowd, foreshadowing a possible return in the second season</i>].</span></p><p style="text-align: left;"><span style="font-family: verdana;">In the final scene, Hamlet and Ophelia, wearing the golden amulets, lie quietly asleep </span><span style="font-family: verdana;">atop the giant stone block as the camera pans slowly out. And fade to black.</span></p><p style="text-align: left;"><span style="font-family: verdana;">[<i>author's note: Assuming we don't get funded by Netflix, and so are able to get a second </i></span><i><span style="font-family: verdana;">season, I have a lot of great potential ideas. To start, Hamlet and Ophelia can awake 42 </span><span style="font-family: verdana;">years into the future to find that an alien ship has returned to its parking place atop the Great </span><span style="font-family: verdana;">Pyramid [to attract Stargate fans]. They must then escape the pyramid through the ship, </span><span style="font-family: verdana;">which is led by a matriarchal society of benevolent aliens whose existance on Earth is </span><span style="font-family: verdana;">being threatened by a virus created by a neighboring hostile, male-dominated Arabic </span></i><span style="font-family: verdana;"><i>kingdom. Lots more ideas where that came from. Call me...we'll do lunch</i>].</span></p>Tom Hickshttp://www.blogger.com/profile/15248245864656702354noreply@blogger.com0tag:blogger.com,1999:blog-2497792762863705826.post-43441001055858461982023-05-08T16:31:00.001-07:002023-05-08T17:01:18.644-07:00The Risks of LLMs Are More Immediate Than AGI<p><span style="font-family: verdana;">Recently, a friend shared a CNN interview concerning the dangers that out-of-control Artificial Intelligence could pose:</span></p><p><span style="font-family: verdana;"><a href="https://www.facebook.com/camanpour/videos/573499221277846">https://www.facebook.com/camanpour/videos/573499221277846</a></span></p><p><span style="font-family: verdana;">The interview is easily accessible without a technical background, and </span><span style="font-family: verdana;">well worth watching, but you may find it a bit scary.</span></p><p><span style="font-family: verdana;">After watching it, I had too many responses for a Facebook comment so I thought I'd jot a few of them down here.</span></p><p><span style="font-family: verdana;">Foremost, I think it's crucial to distinguish between Artificial Intelligence (AI) and Artificial General Intelligence (AGI). AGI researchers aspire to develop a subset of AI techniques that will allow computers to learn and perform any cognitive task that humans can do as well as, or even better, than a human. (This is the "god-like intelligence" referred to in the interview).</span></p><p><span style="font-family: verdana;">The quest for AGI is considered a subfield of AI research, although the two terms have been thoroughly mixed and muddled in the media frenzy of the last six months. Sadly, some of this confusion also comes directly from the executives of big-tech companies who seem to be using the terms interchangeably while also making grandiose claims about the level of intelligence their systems really possess.</span></p><p><span style="font-family: verdana;">In the first major wave of AI, in the 70s, it was a common joke that "AI" referred to all the smart stuff that humans could do that we didn't yet know how to make computers do. Once you could program something smart, it became just another algorithmic technique. </span><span style="font-family: verdana;">While this process-oriented approach to intelligence was the prevalent viewpoint among early AI researchers many of them took their ideas and inspiration from studies of human cognition (e.g., linguistics, psychology, philosophy, and even economics and political science).</span></p><p><span style="font-family: verdana;">In the current wave of AI, it seems most researchers are focused on mathematical and statistical techniques and few have any background in human cognition. Large Language Models (LLMs), such as ChatGPT, are built via a data-driven approach: massive statistical computation over massive amounts of human-created text (which includes human errors, biases, mistakes, lies, propaganda, and prejudices). </span><span style="font-family: verdana;">As Dr. Leahy points out in the CNN interview,</span><span style="font-family: verdana;"> </span><span style="font-family: verdana;">the results which LLMs derive are rather opaque to us humans. The current AI "joke" might be "look at all the smart stuff we can get computers to mimic but we don't know what they're doing or why they can do it".</span></p><p><span style="font-family: verdana;">The CNN interview is scary because it expounds on the dangers of AGI; as posed by the development of an intelligent agent whose capabilities exceed those of humans but which is not limited by human morals, ethics, or physical existence. From my background in computer and cognitive science, I believe these dangers are still years away and are not likely to be realized via the current massive statistical processing approach alone, anyway. </span></p><p><span style="font-family: verdana;">Nevertheless, I believe and fear that current LLMs do pose very real dangers to society, politics, and human well-being. I agree strongly with Gary Marcus who has penned <a href="https://garymarcus.substack.com/p/ai-risk-agi-risk" target="_blank">a great article on the dangers of AGI risk vs current AI risk</a>:</span></p><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;"><span style="font-family: georgia;">"...although a lot of the literature equates artificial intelligence risk with the risk of superintelligence or artificial general intelligence, you don’t have to be superintelligent to create serious problems."</span></blockquote><span style="font-family: verdana;"><div><span style="font-family: verdana;"><br /></span></div>I think AI apologists do a great disservice to us all when they conflate fears of AGI with concerns about the consequences of malicious use of LLMs and then dismiss all concerns as silly. Many concerns are real and immediate and <a href="https://garymarcus.substack.com/p/scientists-governments-and-corporations" target="_blank">something must be done</a> or our society is in for a lot of pain.</span><div><span style="font-family: verdana;"><br /></span></div><div><span style="font-family: verdana;"><i><span style="font-size: x-small;">I apologize to my friend who sent me the video as I probably haven't relieved her fears but I hope that I was able to clarify what I feel are the more imminent and important issues.</span></i></span></div>Tom Hickshttp://www.blogger.com/profile/15248245864656702354noreply@blogger.com0tag:blogger.com,1999:blog-2497792762863705826.post-88656117880009578662023-05-08T13:55:00.000-07:002023-05-08T13:55:50.969-07:00Is Writing Computationally Easy?<p><span style="font-family: verdana;">Recently, a colleague asked if we agreed or disagreed with this quote from an article by Stephen Wolfram entitled</span><span style="font-family: verdana;"> </span><a href="https://writings.stephenwolfram.com/2023/02/what-is-chatgpt-doing-and-why-does-it-work/" style="font-family: verdana;" target="_blank">What Is ChatGPT Doing...and Why Does It Work</a>:</p><blockquote><span style="font-family: georgia;">"And instead what we should conclude is that tasks—like writing essays—that we humans could do, but we didn’t think computers could do, are actually in some sense computationally easier than we thought."</span></blockquote><p> <span style="font-family: verdana;">I would have to disagree because this pronouncement is vague and the terms and premises are ill-defined.</span></p><span style="font-family: verdana;">For one example, what is "computationally easier"?:</span><br /><br /><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;"><span style="font-family: georgia;">"Lambda labs estimated a hypothetical cost of around $4.6 million US dollars and 355 years to train GPT-3 on a single GPU in 2020, with lower actual training time by using more GPUs in parallel."</span></blockquote><br /><span style="font-family: verdana;">This extensive training was done by reading almost 500 BILLION words. Doesn't sound easy to me.</span><br /><br /><span style="font-family: verdana;">Also, the statement seems to imply the premise that if humans can do it, then it must be "easy". I doubt anyone who studies human cognition (e.g., psychologist, linguists, cognitive scientists) would agree with this. It took me at least 14 years of varied cognitive training to learn to write an essay, and my mother was an English teacher.</span><br /><br /><span style="font-family: verdana;">Also, are LLMs really "writing essays"? Perhaps...if you define "writing an essay", narrowly, as regurgitating words and phrases that humans have written and stringing them together using correct syntax and grammar. But when humans write an essay they are engaging in an act of linguistic </span><span style="font-family: verdana;">communication with other humans. A good writer first thinks critically about a topic and then writes with a communicative goal; such as providing a unique perspective or convincing a reader of some particular point. LLMs are decidedly NOT doing that and therein lies the danger.</span><br /><br /><span style="font-family: verdana;">Because what LLMs <i>generate</i> looks like what humans produce, it is extremely easy for people to be misled into believing that they must be engaged in intelligent activities such as thinking, imagining, judging, arguing, and believing. Cognitive psychologists call this "over-attribution" and it has been a problem for psychology for a very long time.</span><div><span style="font-family: verdana;">See this blog by Gary Marcus about the (growing) </span><a href="https://garymarcus.substack.com/p/stop-treating-ai-models-like-people" style="font-family: verdana;" target="_blank">over-attribution problem in AI</a><span style="font-family: verdana;">.</span><br /><div><br /></div></div>Tom Hickshttp://www.blogger.com/profile/15248245864656702354noreply@blogger.com0tag:blogger.com,1999:blog-2497792762863705826.post-67521718991177134992017-02-18T16:49:00.001-07:002017-02-22T12:34:10.264-07:00Using a Java Agent with Scala/SBT<span style="font-family: "arial" , "helvetica" , sans-serif;">Just some notes to myself:</span><br />
<h4>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Adding unmanaged dependencies to a build:</span><span style="font-family: "arial" , "helvetica" , sans-serif;"> </span></h4>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Unmanaged dependencies work like this: add jars to <code>lib</code> and they will be
placed on the project classpath. <span style="font-size: x-small;"><span style="font-family: "courier new" , "courier" , monospace;">lib</span></span> is a sister directory to <span style="font-size: x-small;"><span style="font-family: "courier new" , "courier" , monospace;">src</span></span> </span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">Dependencies in <code>lib</code> go on all the classpaths (for <code>compile</code>, <code>test</code>, <code>run</code>,
and <code>console</code>).</span><br />
<br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">from: <a href="http://www.scala-sbt.org/0.13/docs/Library-Dependencies.html">http://www.scala-sbt.org/0.13/docs/Library-Dependencies.html</a> </span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"></span><br />
<h4>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Start SBT with Java Agent JAR file:</span></h4>
<span style="font-family: "arial" , "helvetica" , sans-serif;">An example. <span style="font-size: x-small;"><span style="font-family: "courier new" , "courier" , monospace;">SizeOf</span></span> is a program which uses <span style="font-size: x-small;"><span style="font-family: "courier new" , "courier" , monospace;">java.lang.instrument</span></span> and must be launched as a Java Agent:</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-size: small;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">java -jar -javaagent:<path-to>/lib/SizeOf.jar /opt/local/share/sbt/sbt-launch.jar 'run-main org.clulab.reach.ShowSizes'</path-to></span></span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<h4>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Ended up using JAMM (<a href="https://github.com/jbellis/jamm">https://github.com/jbellis/jamm</a>):</span></h4>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">java -jar -javaagent:/Users/hickst/workspaceCLU/clulab/reach/main/lib/jamm-0.3.1.jar /opt/local/share/sbt/sbt-launch.jar 'run-main org.clulab.reach.ShowMemReachable'</span></span>Tom Hickshttp://www.blogger.com/profile/15248245864656702354noreply@blogger.com0tag:blogger.com,1999:blog-2497792762863705826.post-10970879835310854462014-03-26T13:24:00.000-07:002014-03-26T13:24:07.336-07:00Leiningen upgrade problemAfter working flawlessly for a long time, my local Leiningen script suddenly failed to upgrade Leiningen to the latest version. Instead, it spit out the following error message:<br />
<br />
<pre>The script at /usr/local/bin/lein will be upgraded to the latest stable version.
Do you want to continue [Y/n]? y
Upgrading...
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 137 100 137 0 0 121 0 0:00:01 0:00:01 --:--:-- 182
curl: (35) error:14077458:SSL routines:SSL23_GET_SERVER_HELLO:reason(1112)
Failed to download https://github.com/technomancy/leiningen/raw/stable/bin/lein
It's possible your HTTP client's certificate store does not have the
correct certificate authority needed. This is often caused by an
out-of-date version of libssl. Either upgrade it or set HTTP_CLIENT
to turn off certificate checks:
export HTTP_CLIENT="wget --no-check-certificate -O" # or
export HTTP_CLIENT="curl --insecure -f -L -o"
It's also possible that you're behind a firewall haven't yet
set HTTP_PROXY and HTTPS_PROXY.
</pre>
<br />
The Leiningen script seems to be (incorrectly) guessing at the problem, which had me spinning my wheels for a short time. The solution I found online was to add a '<span style="font-family: Arial,Helvetica,sans-serif;">-3</span>' or '<span style="font-family: Arial,Helvetica,sans-serif;">--sslv3</span>' flag to the 'curl' command within the lein script. The final modified line (as of the date of this post) is:<br />
<br />
<b><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;"> HTTP_CLIENT="curl $CURL_PROXY --sslv3 -f -L -o"</span></span></b>Tom Hickshttp://www.blogger.com/profile/15248245864656702354noreply@blogger.com0tag:blogger.com,1999:blog-2497792762863705826.post-45368425047866279752012-11-13T14:08:00.001-07:002012-11-13T14:08:08.867-07:00Just in Time for the End of the World: a Mayan Calendar Generation Program<span style="font-family: "Trebuchet MS",sans-serif;">OK, just kidding...my wife and I don't really believe that the world</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">is coming to an end at the end of the current Mayan Great Cycle.</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">And to demonstrate our optimism that we'll still be here after</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">December 21st of this year, we are finally releasing the first</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">version of our Mayan calendar generation program (written in</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">Clojure, of course). Version 1.0.0 is available on GitHub at</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;"><a href="https://github.com/hickst/mayancal">https://github.com/hickst/mayancal</a>.</span><br style="font-family: "Trebuchet MS",sans-serif;" /><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">The Mayancal program generates a PDF file containing an illustrated</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">Mayan calendar for the specified year (the default is 2012...just in</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">case). The earliest year available is 1900, but this should allow</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">most users to generate a calendar for their birth year.</span><br style="font-family: "Trebuchet MS",sans-serif;" /><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">The Maya developed a sophisticated calendar based on the</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">intersection of various cycles, especially the 260 day Tzolkin</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">(ritual calendar) and the 365 day Haab (a rough solar calendar). The</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">Tzolkin named each day; like our days of the week. There were 20 day</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">names, each represented by a unique symbol. The days were also</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">numbered from 1 to 13 (Trecena cycle). Since there were 20 day</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">names, after the count of thirteen was reached the next day was</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">numbered 1 again. Since 13 and 20 have no common divisors, this</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">system uniquely represents all 260 (13*20) days of the sacred year</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">with a unique number and day-name combination.</span><br style="font-family: "Trebuchet MS",sans-serif;" /><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">The Haab was a rough solar year of 365 days. The Haab year contained</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">named months called Uinals. These were 18 regular months of 20 days</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">each and one special five-day month called Uayeb. Days of the Haab</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">months were numbered 0 to 19. Each day had a number and day name</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">from the 260-day Tzolkin as well as a number for each day of the</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">Haab month (Veintena cycle). Using the intersections of these</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">cycles, each day can be identified by a four-tuple:</span><br />
<span style="font-family: "Trebuchet MS",sans-serif;">[Tzolkin number,</span> <span style="font-family: "Trebuchet MS",sans-serif;">Tzolkin day, Haab number, Haab month].</span><br style="font-family: "Trebuchet MS",sans-serif;" /><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">Using Clojure's infinite lazy sequences these interacting cycles can</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">easily be generated and combined together with an infinite Gregorian</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">date sequence (see the mcal.clj file in the source code). To</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">simplify the program, all sequences are synchronized to start at the</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">Gregorian date of 1/1/1900. Any given point is then found by</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">dropping the appropriate number of elements from the heads of the</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">synchronized sequences.</span><br style="font-family: "Trebuchet MS",sans-serif;" /><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">Some miscellaneous notes: Because of the many great public domain</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">images and icons used to illustrate the calendar, the output PDF</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">file tends to be rather large so you probably don't want to email</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">calendars to all your relatives for Christmas. Also, we've tried</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">viewing the calendar in Preview 5.5.3, Adobe Reader 10.0.1, Skim</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">1.3.22, and GoodReader for iPad 3.18.6 and we've seen a few</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">differences between these viewers. Only Adobe and GoodReader, for</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">example, were able to follow the embedded links and GoodReader had</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">trouble displaying the links on the last page.</span><br style="font-family: "Trebuchet MS",sans-serif;" /><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">As I said, this is version 1, so if you encounter any issues please</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">let us know. We hope that this toy provides you with some fun and</span><br style="font-family: "Trebuchet MS",sans-serif;" /><span style="font-family: "Trebuchet MS",sans-serif;">diversion from the more serious, real-world uses of Clojure.</span><br style="font-family: "Trebuchet MS",sans-serif;" />Tom Hickshttp://www.blogger.com/profile/15248245864656702354noreply@blogger.com0tag:blogger.com,1999:blog-2497792762863705826.post-38935557927192839282012-09-06T12:17:00.003-07:002012-09-06T12:17:37.207-07:00EIPs in ROC<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
Randy Kahle has recently written a blog entry which artfully expresses the thinking behind the yearnings for <a href="http://resourcefulcomputing.wordpress.com/2012/09/01/what-language-should-we-use-to-talk-about-roc/">a new ROC (Resource Oriented Computing) language</a>. I suspect that most ROC users would be happy just to see a better syntax for module creation but, as Randy points out, a ROC language should provide a better way to conceptualize the information flow through the system.</div>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<br /></div>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
I've thought for some time now that what's missing in <a href="http://www.1060research.com/netkernel/">NetKernel</a> is an abstraction of the higher level patterns of information flow through <a href="http://docs.netkernel.org/book/view/book:glossary/doc:glossary:space">spaces</a>; an implementation of EIPs (<a href="http://www.eaipatterns.com/">Enterprise Integration Patterns</a>) for ROC. EIPs in ROC could be made manifest in a couple of ways, the simplest being to express the pattern as a particular composition of existing <a href="http://docs.netkernel.org/book/view/book:guide:logicalreference/doc:logicalreference:module:standard:logical:space-element">space elements</a>. This approach, however, strikes me as analogous to expressing a pattern in an assembly language without macros: too detailed and hard to repeat correctly. A more powerful solution would be to express some of the simpler EIPs in ROC by encoding them directly as new types of <a href="http://docs.netkernel.org/book/view/book:guide:logicalreference/doc:logicalreference:module:standard:logical:overlay">overlays</a>. The most recent overlays, such as the <a href="http://docs.netkernel.org/book/view/book:guide:logicalreference/doc:logicalreference:module:standard:logical:pluggable-overlay">Pluggable overlay</a> and the <a href="http://docs.netkernel.org/book/view/book:guide:logicalreference/doc:logicalreference:module:standard:logical:branch-merge">Branch-Merge overlay</a>, seem to be attempts to encapsulate such patterns of usage. Sadly, these fall far short of the simplicity and beauty that they could have if they were not mired in <a href="http://tohono.blogspot.com/2012/03/why-natural-languages-have-grammars.html">the grammar-less verbosity of XML</a>. (1) </div>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<br /></div>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
Please note that, by saying "patterns" (inherent in EIP above) I mean something more abstract and more encompassing than the existing <a href="http://docs.netkernel.org/book/view/book:patterns/">recipes for the connection and interaction of spaces</a>, which are labeled as "Module / Space Patterns" in the NetKernel documentation. While these recipes are a step in the right direction, their level of granularity seems too small to express anything but the simplest EIP. In addition, their descriptions focus on the mechanics of space interconnection and it's very hard to elicit how they can be composed into EIPs.</div>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<br /></div>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
A new ROC language built around Enterprise Integration Patterns would allow ROC programmers to concentrate on solving their application problems by focusing on the high-level, logical flow of information through the system. Such a language would include, at a minimum, the ability to compose, connect, and visualize some base set of EIPs. An
additional ability to implement arbitrary EIPs would be extremely
powerful but might require that the existing facilities to build modules
and factories be enhanced, simplified, and canonized into a clean API
(re: this <a href="http://www.1060.org/nk4um/topic/866/index#post3330">forum discussion fragment</a>). If the new ROC language were to eschew XML and to rely on a simple syntax, I feel this would be a huge win. Finally, I believe that a new language built around EIPs would greatly contribute to the usability and adoption of NetKernel and ROC.</div>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<br /></div>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<br /></div>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<span style="font-size: x-small;">1. It's interesting to speculate on the reasons why there are not more higher-level patterns and why they are not easy to spot in NetKernel's standard module. I think the principle of <a href="http://en.wikipedia.org/wiki/Linguistic_relativity">Linguistic Relativity</a> is at work here; the idea that the structure of a language affects the ways in which its users conceptualize their world.</span></div>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<br /></div>
<div style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">
<br /></div>
Tom Hickshttp://www.blogger.com/profile/15248245864656702354noreply@blogger.com0tag:blogger.com,1999:blog-2497792762863705826.post-29180159352871152212012-03-09T19:50:00.011-07:002012-03-09T20:12:21.880-07:00Why natural languages have grammarsThis occurred to me after reading several NetKernel forum entries crying out for help with NK's "declarative syntax". I think there are some great ideas in NetKernel but the idea of burying your programming language within XML is not one of them.<br /><pre><sentence><br /> <np><br /> <verb type="gerund" subject="true">Programming</verb><br /> <pp><br /> <preposition>in</preposition><br /> <noun type="proper" acronym="true">XML</noun><br /> </pp><br /> </np><br /> <vp><br /> <verb tense="present">is</verb><br /> </vp><br /> <np><br /> <determiner singular="true" indefinite="true">a</determiner><br /> <noun>pain</noun><br /> <pp><br /> <preposition>in</preposition><br /> <determiner definite="true">the</determiner><br /> <noun>ass</noun><br /> </pp><br /> </np><br /></sentence><br /></pre>Tom Hickshttp://www.blogger.com/profile/15248245864656702354noreply@blogger.com0tag:blogger.com,1999:blog-2497792762863705826.post-32301833200640437432011-05-27T10:39:00.004-07:002011-05-27T10:44:37.689-07:00Keep an SSH connection alive<p>I'm reposting this post from Cosmin Stejerean (offbytwo.com) as a reminder to myself about how to solve this problem that's plagued me for years when connecting to the U via SSH.</p><p>'If you are having problems with your <span class="caps">SSH</span> connection getting dropped after a certain amount of time (usually caused by <span class="caps">NAT</span> firewalls and home routers), you can use the following setting to keep your connection alive</p> <pre><code><br />Host *<br /> ServerAliveInterval 180<br /></code></pre> <p>You can place this either in <code>~/.ssh/config</code> for user level settings or in <code>/etc/ssh/ssh_config</code> for machine level settings. You may also replace * with a specific hostname or something like *.example.com to use on all machines within a domain. This is the cleanest way of making sure your connections stay up and doesn’t require changes to the destination servers (over which you may not have control)."<br /></p>Tom Hickshttp://www.blogger.com/profile/15248245864656702354noreply@blogger.com0tag:blogger.com,1999:blog-2497792762863705826.post-59568665776022809492011-05-16T18:35:00.003-07:002011-05-16T18:40:54.289-07:00Out of the blueI got this (probably unintentionally) hilarious spam from O'Reilly, which I first took for a very late April Fool's joke:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9MBnYnoHKhgUWOGxFvGoBfFrwStqqVllZ8HsWNoQzbdhR-9kxJcrpcagVOoD8oEdl19BOrYJrWcW8MkwqdZaYP29qgjvdaqIb4tg7Zu_oPMTu-FGum3fwaCNGMJwg4XhoMTPSTN0chEM/s1600/stoner.tiff"><img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 320px; height: 58px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9MBnYnoHKhgUWOGxFvGoBfFrwStqqVllZ8HsWNoQzbdhR-9kxJcrpcagVOoD8oEdl19BOrYJrWcW8MkwqdZaYP29qgjvdaqIb4tg7Zu_oPMTu-FGum3fwaCNGMJwg4XhoMTPSTN0chEM/s320/stoner.tiff" alt="" id="BLOGGER_PHOTO_ID_5607493361727408626" border="0" /></a><br /><br />Given this photo, I'd say that "small pharmaceutical company" must be one of those medical marijuana boutiques in California.Tom Hickshttp://www.blogger.com/profile/15248245864656702354noreply@blogger.com0tag:blogger.com,1999:blog-2497792762863705826.post-50476309386488364962010-06-16T20:33:00.003-07:002010-06-16T20:47:23.818-07:00Manning makes good on cancelled bookAn update to <a href="http://tohono.blogspot.com/2010/04/manning-going-downhill-fast.html">my previous post about Manning</a>: they've now officially cancelled the <span style="font-style:italic;">CouchDB in Action</span> book. To their credit, they are taking good care of customers (like me) who had already ordered the MEAP edition. We have been offered the choice of (1) getting our money back or (2) a replacement book or eBook (depending on our original order) AND another eBook free. I am very happy with this arrangement and have already taken the replacement offer for other eBooks. I did, however, check the eBooks' starting and (projected) publication dates. I picked books which had at least 4 or 5 chapters already available and I made sure that the book was being actively worked upon. Manning seems to have several books that have drifted off into the figurative weeds (for example see <a href="http://manning.com/ingersoll/">Taming Text</a>, started in June 2008!)Tom Hickshttp://www.blogger.com/profile/15248245864656702354noreply@blogger.com0tag:blogger.com,1999:blog-2497792762863705826.post-30666650851055959202010-05-22T14:29:00.005-07:002010-05-22T14:34:03.054-07:00Obama and the Oil SpillGreat op-ed piece in the NY Times about how Obama is blowing the opportunity to use the Gulf oil disaster to lead the country to real, long-range solutions (which would help prevent disasters like this in the future):<br /><br /><a href="http://www.nytimes.com/2010/05/19/opinion/19friedman.html">Obama and the Oil Spill</a>Tom Hickshttp://www.blogger.com/profile/15248245864656702354noreply@blogger.com0tag:blogger.com,1999:blog-2497792762863705826.post-2035092480486401962010-04-22T10:28:00.008-07:002010-05-01T15:27:10.639-07:00Manning going downhill fastI'm becoming more and more disappointed with <a href="http://www.manning.com">Manning Publications</a>. They used to be a great source of eBooks on cutting edge technologies by leaders in the field. They are the publisher for some of the leading tech reference. Books such as <span style="font-style:italic;">Spring In Action</span>, <span style="font-style:italic;">Groovy In Action</span> and <span style="font-style:italic;">Ant In Action</span> are tech "classics".<br /><br />Lately, however, I've noticed that their book times are greatly increasing, author quality is decreasing, authors are unknown in the community, books are being threatened with cancellation, there is more and more advertising of "vaporware" (books with only 1 or 2 small chapters), and eBook releases are poorly screened for even minimal formatting quality.<br /><br />For examples:<br /><br />Just days ago I received an email from Manning describing how the authors of <span style="font-style: italic;">Couch DB in Action</span> have fallen so far behind in their progress that the content is already out-of-date. Manning is debating whether to proceed with the existing content, entirely rewrite it or cancel it. There is no mention of what happens to customers who purchased the early access (MEAP) version (as I did) if the book is cancelled.<br /><br />Then this morning, I received an update to <span style="font-style: italic;">Spring Integration in Action</span>, usually a good and welcome thing. Unfortunately, the formatting of this version has some serious problems that were not present in the previous version. The text size varies wildly from chapter to chapter and, in those chapters were it is greatly increased, many of the figures are obscuring adjacent text and several of the figures are just not visible at all.<br /><br />Now, of course, it must be acknowledged that this is an Early Access version of the eBook and various formatting, font, and figure problems must be expected for these drafts. However, to be useful at all, there must be some minimal standard of readability; which there was in the first MEAP version of the eBook that I received. The loss of this basic readability in the update gives the impression that no one is even reviewing the product before releasing it.<br /><br />And, finally, to add insult to injury, Manning sent me a link to an online survey asking frequent customers for feedback. I patiently and completely filled out the form but when I tried to submit it, it claimed that I had not answered a couple of questions and refused to take my submission. Rechecking the form showed that all questions had been completely answered! Manning remains completely oblivious to my disappointments with them.<br /><br />Manning used to be great but, in my opinion, they are going downhill fast!Tom Hickshttp://www.blogger.com/profile/15248245864656702354noreply@blogger.com0tag:blogger.com,1999:blog-2497792762863705826.post-27982248180008210762010-02-07T22:25:00.005-07:002010-02-07T22:55:41.668-07:0099 Problems In Clojure - part 1: problems 1-17+Recently, I ran across <a href="http://m.3wa.com/">an interesting blog</a> by someone with the username 'wmacgyver' (real name Mac Liaw?) who was translating and adapting a set of <a href="https://prof.ti.bfh.ch/hew1/informatik3/prolog/p-99/">99 Prolog exercises</a> into Clojure.<br /><br />Like wmacgyver, I played with the first 17 (or so) exercises and have posted <a href="http://gist.github.com/297912">a gist of my answers here</a>. I intend (hope) to continue working on the rest whenever I can get some time.<br /><br />wmacgyer's blog with the exercise post can be found <a href="http://m.3wa.com/?p=426">here</a>.Tom Hickshttp://www.blogger.com/profile/15248245864656702354noreply@blogger.com2tag:blogger.com,1999:blog-2497792762863705826.post-79412272417242099742010-01-24T12:40:00.003-07:002010-02-07T22:55:41.669-07:00Recent Clojure talk at the Tucson JUGA couple weeks ago I gave the monthly presentation at the Tucson JUG on the programming language <a href="http://clojure.org">Clojure</a>. Only six JUG members showed up but they were very interested in the language and kept me talking for over an hour beyond my initially allotted hour.<br /><br />There are many reasons why Clojure has really caught on in the last year or so. For me, it's a well-designed and pragmatic amalgam of Lisp, concurrent techniques, and functional programming built on the JVM. It also helps that there's a great book, a friendly and helpful community, and dozens of enthusiastic side projects.<br /><br />My <a href="http://tinyurl.com/yjrnh55">slides (as a PDF file)</a> are available in the Tucson JUG's Google group area:<br /><b>http://tinyurl.com/yjrnh55</b><br /><br />Note that my presentation relied on material from the Clojure community, including the website, forums, and the terrific book <a href="http://pragprog.com/titles/shcloj/programming-clojure">"Programming Clojure" by Stuart Halloway</a>.Tom Hickshttp://www.blogger.com/profile/15248245864656702354noreply@blogger.com0tag:blogger.com,1999:blog-2497792762863705826.post-29088731882591800432008-12-31T16:26:00.003-07:002008-12-31T17:09:50.677-07:00Matte Matters: I couldn't have said it better.A recent MacWorld editorial by Rob Griffiths on Apple's glassy displays captures my feelings on this giant step backwards in display technology:<br /><br /><a href="http://www.macworld.com/article/136061/2008/10/matte_laptops.html">Matte Matters</a><br /><br />Just look around you when you're at your office, favorite coffee shop, in an airplane seat, a classroom, or even a library. There are almost always glaring light sources above and behind you. What were Apple's designers thinking? Don't they use their own products?Tom Hickshttp://www.blogger.com/profile/15248245864656702354noreply@blogger.com0tag:blogger.com,1999:blog-2497792762863705826.post-55386250105216383032008-10-20T13:17:00.003-07:002010-02-07T22:57:50.842-07:00Final article in series finally publishedI forgot to mention that the final article in the 4-part series written by Randy Kahle and me was published a few weeks ago on TheServerSide.com:<br /><br /><a href="http://www.theserverside.com/tt/articles/article.tss?l=ARESTfulCorePart4">A RESTful Core for Web-like Application Flexibility - Part 4</a><br /><br />The final article contains links back to the previous articles in the series. Just scroll down the the References section at the very bottom of the article.Tom Hickshttp://www.blogger.com/profile/15248245864656702354noreply@blogger.com0tag:blogger.com,1999:blog-2497792762863705826.post-43834590409668232772008-10-20T12:45:00.003-07:002008-10-20T13:07:39.097-07:00Abbreviations and Code ReadabilityJames Leigh, in a recent <a href="http://jamesrdf.blogspot.com/2008/10/easy-to-read-code.html">blog post</a>, makes a couple of good comments on the importance of code readability and the presence of redundancy.<br /><br />The accompanying poll question, however, (which asks if easily readable code is important) begs the deeper question...of course easily readable code is extremely important but the real question is how to achieve it.<br /><br />For example, using abbreviations in identifier names is a poor way to make the names shorter and more concise.<br /><br />Abbreviated names suffer several problems including:<br /><br />1) ambiguity: is 'getReq' short for getRequest, getRequirement, or getRequisition?<br /><br />2) cognitive burden: abbreviations requires much more mental effort to remember which fragment of a word is being employed. This "ideolexical" design makes the API seem much more complex and daunting than it should.<br /><br />As an example, is the abbreviation for 'declareDescription' going to be:<br /><br />declareDescript,<br />declareDescrip,<br />declareDescr,<br />declareDesc,<br />declDescrip,<br />declDescr,<br />OR<br />declDesc?<br /><br />3) lack of consistency: even with only one programmer creating the abbreviated identifier names, it seems highly probably that inconsistencies will creep into the naming scheme, making it harder to use.<br /><br />4) loss of readability and documentation: longer names are often clearer and document the code better than abbreviations (or shorter names).<br /><br />In these days of IDEs there is little reason not to use longer, clearer, self-documenting names: it is trivial to start a name and then hit the appropriate completion key. Even if you program in a non-IDE (as I do....I use Emacs a lot of the time) the importance of good names as documentation cannot be over-emphasized and is well worth a tiny bit of extra typing.Tom Hickshttp://www.blogger.com/profile/15248245864656702354noreply@blogger.com2tag:blogger.com,1999:blog-2497792762863705826.post-60497707066953538932008-10-09T19:11:00.002-07:002008-10-09T19:16:08.342-07:00Lisp turns 50 this month"In October 1958, John McCarthy published one in a series of reports about his then ongoing effort for designing a new programming language that would be especially suited for achieving artificial intelligence. That report was the first one to use the name LISP for this new programming language. 50 years later, Lisp is still in use. This year we are celebrating Lisp's 50th birthday."<br /><center>-from the Lisp50@OOPSLA web page</center>Tom Hickshttp://www.blogger.com/profile/15248245864656702354noreply@blogger.com0tag:blogger.com,1999:blog-2497792762863705826.post-61707697500907856872008-09-11T10:36:00.002-07:002008-09-11T10:41:08.330-07:00How the Terrorists Won on 9/11 and Since ThenOn this 7th anniversary of 9/11 it is time to finally admit<br />what most Americans already know in their hearts: that the<br />terrorists fully achieved their objectives, even beyond<br />their own wildest dreams. And, since then, unscrupulous men,<br />corporations, and our own government have helped the<br />terrorists to continue their success.<br /><br />Seven years after 9/11, our country has turned against its<br />own ideals and principles in the name of security, while<br />ironically justifying its actions as preserving "freedom".<br /><br />Seven years after 9/11, We are saddled with a costly and<br />pointless war against a country which had nothing to do with<br />the attacks. We have a massive new homeland security<br />bureaucracy which is hard at work trying to impose a<br />mandatory national ID system. The privacy of millions of<br />American phone conversations and emails have been secretly<br />and illegally violated by the government and submissive<br />corporations. Citizens of other countries have been<br />arbitrarily labeled as terrorists and jailed for years<br />without formal charges or a trial. Freedom of travel has<br />been restricted by secret and erroneous government "watch<br />lists", to which there is no judicial appeal. And through it<br />all, government agencies, such as the INS and DHS, have<br />simply declared themselves to have sweeping new powers.<br /><br />Joseph Stalin is reputed to have said "When we hang the<br />capitalists they will sell us the rope" but the terrorists<br />of 9/11 have turned us against ourselves in a much more<br />insidious manner; they played upon our fear of death. And<br />the possibility of death by terrorism is being exaggerated<br />by those within our country who seek to maintain or expand<br />their power. The truth is that you are thousands of times<br />more likely to be killed by a traffic accident than by a<br />swarthy foreigner with a bomb. Over a quarter of a million<br />people have died in traffic accidents in the U.S. since 9/11<br />and yet there is no massive new Department of Automotive<br />Security.<br /><br />The terrorists of 9/11 won by instilling fear in the<br />populace, causing us to give up some of our fundamental<br />freedoms and rights. It is time to awake from our long<br />national nightmare and to put our fears into perspective.<br />It is time to stop being overly afraid and to reject the<br />erosion of our hard-won liberties. It is time to stop<br />letting the terrorists win.Tom Hickshttp://www.blogger.com/profile/15248245864656702354noreply@blogger.com0tag:blogger.com,1999:blog-2497792762863705826.post-73410786976000383642008-08-16T09:49:00.012-07:002008-08-17T14:56:55.513-07:00Data Duck TypingSome friends of mine at <a href="http://www.1060research.com/">1060 Research</a> recently sent me a new version of some software they are working on. After reading one of the XML configuration files, I asked if they had an XML Schema for it (which would define the grammar for legal configurations). The answer was that they did not, as they were moving away from formal grammars and more towards a rule-based approach like <a href="http://en.wikipedia.org/wiki/Schematron">Schematron</a>: which uses a set of pattern assertions (rules) for XML validation.<br /><br />When I thought about this approach, I realized that it is <a href="http://en.wikipedia.org/wiki/Duck_typing">duck typing</a> for data. In object-oriented programming, the use of duck typing means that an object's behavior, rather than its class or inheritance structure, determines its interpretation and usage. The application of rule-based systems to categorize a data file or message is a data-oriented form of duck typing. Using "data duck typing", data is categorized (in this case validated) by having the right elements in the right locations.<br /><br />Data duck typing means that a data file does not have to fully conform to a specific, rigid grammar as long as some of its parts meet the requirements of the particular rule set used for categorization. Thus, data messages for an application can come in all shapes and sizes as long as they contain the essential required elements with the right structural relationships. Applications which use this approach embody the design principle which says "be lenient in the messages that you accept" and will be much more flexible than applications based on rigid adherence to formal grammars.Tom Hickshttp://www.blogger.com/profile/15248245864656702354noreply@blogger.com0tag:blogger.com,1999:blog-2497792762863705826.post-6830077213377142152008-08-16T09:39:00.004-07:002008-08-16T09:48:25.551-07:00crosslink: 5 reasons you don’t really want a jack-of-all-trades developerRebecca Murphey has posted an excellent blog entry in which she looks critically at the current employer trend of "asking for the moon":<br /><br />"<a href="http://blog.rebeccamurphey.com/2008/08/02/web-developer-hiring-tips/">5 reasons you don’t really want a jack-of-all-trades developer</a>".Tom Hickshttp://www.blogger.com/profile/15248245864656702354noreply@blogger.com0tag:blogger.com,1999:blog-2497792762863705826.post-71187954474594454332008-07-26T13:59:00.008-07:002008-08-16T11:40:39.022-07:00First article in a series posted at TheServerSide.comRandy Kahle and I are writing a series of articles on Resource Oriented Computing (ROC), which you can think of as REST principles applied to application software development. The first article of the series posted a couple of days ago on TheServerSide.com under the title<br /><br /><a href="http://www.theserverside.com/tt/articles/article.tss?l=ARESTfulCorePart1">"A RESTful Core for Web-like Application Flexibility - Part 1"</a><br /><br />Perhaps this title was somehow misleading since the article immediately engendered a passionate (and not always civil nor complementary) debate on various aspects of REST. Most of these were off-topic from the article. As a long time reader of TSS, I expected that something like this could happen. My attitude toward this is to encourage rational discussion, clarify misunderstood points, and ignore misbehavior. This is, BTW, an approach used successfully to deal with patients at mental hospitals.Tom Hickshttp://www.blogger.com/profile/15248245864656702354noreply@blogger.com0tag:blogger.com,1999:blog-2497792762863705826.post-40978404913883923572008-07-18T15:55:00.013-07:002008-07-21T20:46:27.988-07:00Google's Protocol Buffers announcementNick L., at Google, recently sent the Tucson JUG a link to a blog posting about Google's newly open-sourced Protocol Buffers:<br /><br /><a href="http://google-opensource.blogspot.com/2008/07/protocol-buffers-googles-data.html">http://google-opensource.blogspot.com/2008/07/protocol-buffers-googles-data.html</a><br /><br />"Interesting", I thought, "but why didn't you guys just use CORBA and get it over with?"<br /><br />A snippet in the blog post seems to have anticipated that question:<br /><blockquote>"OK, I know what you're thinking: "Yet another IDL?" Yes, you could call it that. But, IDLs in general have earned a reputation for being hopelessly complicated."</blockquote>Complexity sounds like a strawman here.....the major problem with IDLs is that they are built upon a shared definition, which requires all parties to update and recompile when the definition changes. And once you recompile, you've lost the ability of the system to handle the old message format (so versioning is a serious problem unless you plan for it from the beginning).<br /><br />Of course, these problems are ameliorated when:<br />1) the IDL is for internal use only and,<br />2) you control both ends of the conversation,<br />as Google does...er...did up until now.<br /><br />I also wonder why Google didn't just use an existing protocol like Hessian:<br /><br /><a href="http://caucho.com/products/hessian.xtp">http://caucho.com/products/hessian.xtp</a><br /><br />Perhaps a case of NIH syndrome? (<a href="http://en.wikipedia.org/wiki/NIH_syndrome">http://en.wikipedia.org/wiki/NIH_syndrome</a>)<br /><br /><span style="font-style: italic;font-size:130%;" >Update - 7/20/2008: </span><br /><br />Nick responded with these comments:<br /><blockquote>Google does tend to favor technology we invent ourselves ...[snip]... OTOH, some of the systems we've built ourselves have been blockbuster hits that enable much of what you know as "Google" today.<br /><br />In response to your comment about backward compatibility, Protocol Buffers are actually explicitly designed so that you can add fields and whatnot and still be able to read in records stored in the old format.</blockquote><br />I have to admit, the "WOW" factor on some of Google's software has inspired competition and innovation. So, the next time I'm looking for a binary wire protocol, I'll take a harder look at Protocol Buffers.Tom Hickshttp://www.blogger.com/profile/15248245864656702354noreply@blogger.com0