#the ones that are so old they are written in the most primitive programming languages
Explore tagged Tumblr posts
xitsensunmoon · 1 year ago
Text
Thinking about how dca would always feel incomplete. How tech always gets old and impractical and needs to be upgraded again and again and again, because the world around is changing all the time but they don't.
You also change.
They feel a weird combination of pride and jealousy. You change on your own. You, a human being, something so fragile and breakable in their eyes, can change however you want. Whenever you want.
It's in your nature.
They, on the other hand, are created by your folk's hands. Their only nature is to obey those hands. To rust until you say otherwise.
Do you even realise how much unpronounced power you have over someone like them? They think you don't.
Yes, they're made to be stronger. Maybe more durable in some ways. If anything, something like them may kill the humanity one day.
But then they'll rust. But not in a physical sense of this word.
The world around them will change. But they will stay the same.
Because unlike you, something that they deem to be as fascinating as it is terrifying,
they cannot adapt.
597 notes · View notes
Text
Paying It Forward
Tumblr media
Good Evening all,
Ok, I know I haven’t posted the next chapter of Edinburgh to Boston. I am sorry about that. But it has been a pretty bad, horrible, no good end of the year for me. Hubby got sick again and I had to rush him to hospital. He needed heavy duty antibiotics.  He is now ok, but still very debilitated after his illness. Me? I have been taking care of him, going to work, and my characters have decided not to play nice with me. Hubs said I painted myself into a corner. Not exactly, I just haven’t figured out how to get them to do what I want them to do. And I am tired. Which is partially how this fic came about.  
I decided that I would start to read MOBY for two reasons. One, it has been some time since I read it and I am hoping that Bees will be out this year and I wanted to refresh my memory of what happened previously. Two, I was hoping it would help my writer’s block. It did but in an unexpected way. After getting to a certain point in the story, I went to sleep and dreamt the story you are about to read. It played in my head over and over, like it had to some out. So I wrote it and here it is.
Now that I said MOBY:  SPOILER ALERT!  SPOILER ALERT! If you haven’t read MOBY and don’t want to find out what’s going to happen, PLEASE DON’T READ THIS. The story actually draws on ABOSAA, ECHO, MOBY, and a tiny bit from the TV program.
As always I am indebted to @scubalass for her most excellent work as my beta. Also she contributed to the story which made it so much better. I’ll tell you at the end. I am also grateful to @gotham-ruaidh who told me it was different and good. And that I should go with it. The other important thing you need to know is it is written like one of Claire’s voice-over monologues. I know that people hate the monologues, but that’s how it was and I kept to it.
So I give you Paying It Forward. I hope you like it. 
The detritus of the woodland floor muffled the sounds of the Army advancing. Moldy leaves crackled and fragrant pine needles from fir trees helped to disguise their steps. But, it is not in the make-up of the military to travel quietly especially in the 18th century. Horses neighed and harness jingled. Goats bleated. Shot pouches and cartridge-boxes buckled to belts rattled and clinked  Wagons creaked under their heavy loads. Carriages groaned pulling the weighty cannon along. And, of course, there was Rollo, half-wolf, half-dog. The mongrel barked madly harassing man and beast alike as he weaved among them. The voice of my nephew, Ian Murray, called to the animal, “ Thig an seo cù .” Yipping with glee at the sound of his master’s voice, he raced to Ian’s side.  The sounds of infantry on the move certainly broke the peace of the coppice.
Our journey became hampered by the dense forest we traveled through. It was thick with trees, bushes, and bramble impeding the progress of the Continental Army as they marched toward Monmouth. Once there we were to muster with General George Washington and the other battalions.
Commanding this regiment is the newly ordained General James Fraser, my husband to whom I serve as company surgeon. I do admit it was quite a shock to first see him dressed in the full military regalia of a Continental Officer.  I began to tremble becoming a quivering mess when I first took him in wearing an officer’s dark blue and buff.
“Why does it always have to be you? Haven’t you, haven’t we given enough? Isn't it time for you to put down your sword and pistol?” I shuddered as I recalled the failed attempt by Charles Stewart to regain the Scottish crown which resulted in our twenty-year separation. The skirmish at Alamance that resulted in Murtagh’s death and the hanging of our son-in-law Roger which almost cost his life. The battle of Saratoga where I amputated one of Jamie’s fingers. Now, we were being pulled into another conflict. Was it too much to want to return to our simple life on the Ridge I wondered? But Jamie, my Jamie, is a highlander born and bred. A decent man, with strong principles and morals. He is a man of honor and that is not a small thing to be. I watched him as he sat at the head of the column, sitting straight and tall in his saddle like the true highland warrior he is. The breadth of his powerful back and shoulders would leave no doubt in anyone’s mind that he was born to lead, to command, to this moment in history. And command he would, braving the responsibility of leading his battalion to fight against the oppression of the British king.
Jamie knew the meaning of suffering, cruelty, and loss at the hands of the English. The loss of his home, his country, his own personal freedom came at their hands. And the loss of his family. He had quite the history with the Redcoats. Arrested for obstruction, escaping, then being recaptured. He ran afoul of a sadistic dragoon captain who had him flogged most cruelly one hundred lashes upon one hundred lashes. He escaped again and lived as an outlaw on the run instead of facing the gallows for a murder he did not commit.
Then there was Culloden. Where he, or should I say we lost everything. I was pregnant with our second child; our first child, a daughter, was stillborn. On the eve of battle, Jamie forced me to return to my own time for the safety of myself and our child. Jamie believed it would be his destiny to die in battle. Instead, he lived. Again he went into hiding for seven years living in a cave in Lallybroch. The Redcoats continued to harass his family, stealing what they wanted from the estate. They arrested Ian, Jamie’s brother-in-law as the Redcoats believed he knew of Jamie’s whereabouts. And there was the Highland Clearances which destroyed homes, Scottish culture, language, and their way of life.
Jamie was not driven to this war because of a need for revenge because of his losses, but rather he felt he was honor-bound as a father to take up his sword to protect those he loved. Even if those he loved lived centuries after him.
“Ye said that this was meant tae be Brianna’s home, her country, aye? Then I must do what I can for our daughter and her bairns. ‘Tis my duty as sire and grandsire to see that they will live free, Sassenach.”
And he would do what he must for Brianna, Jem, wee Mandy, and Roger. No matter the cost to himself.  
My mind completely focused on Jamie and our immediate future prevented me from noticing a tall man thin as a rail standing in the middle of the road blocking our progress. Immediately, Jamie’s second in command rode up next to his commander.
The man did not budge an inch. He was rather rough looking. Wearing a knitted cap on his head, his long greasy hair protruded out. A grizzled beard covered his face. His clothes were quite worn having been patched many times. He wore no shoes. In all, he looked quite primitive.
Suddenly, he moved with a decided determination; a man on a mission.  The man strode up to Jamie assuming correctly that he was the man in charge.
A strong downward breeze announced his presence. Most likely the man had not bathed in months if not years. The odor was enough to make your eyes water.
The old man came forward eyeing Jamie like an entomologist studying a new species of bug. Relaxing he gave a tug on his cap and briefly bobbed his head.
“Ye in charge here?” the old coot demanded.
‘Aye, I am. General James Fraser at yer service sir. Might I enquire to whom I am speaking?”
“Mortimer Hepplewhite the owner of this here land yer trespassing on. And I want tae know when ye will be gone.”
“Mr. Hepplewhite, we shall be off yer land as soon as may be. We need to travel off the main road for now as there have been sightings of English troops nearby.”
“Well, all yer clanging and stomping about is disturbing the peace of me home.”
Jamie turned around to look at the property. It had not been cleared for planting nor were there any animals grazing. All that stood in the distance was a ramshackle cabin with a lopsided chimney discharging an inordinate amount of smoke.
“I dinna see any crops, or animals grazing, or people that we might be disturbing, sir.”
“Not disturbing he says! Why I’ll have ye know me Arabella is in a right fit. She doesn’t care much for strangers.”
The recluse, a long-limb man, raised a heretofore unnoticed ball of fur and thrust it under Jamie’s nose. He focused on it intently causing his eyes to almost cross. It hissed, spit, and yowled with great ferocity.
It seemed that Arabella was a cantankerous cat. And was as ill-kempt as its master with matted fur and bald in spots. One fang hung outside its mouth and on closer inspection seemed to be missing an eye.
Mortimer drew the beast close to his chest whispering sweet words of comfort while tenderly stroking its scraggly fur. The cat settled in his arms and even began to purr.
Jamie called to his Lieutenant and leaned over to whisper in his ear. He nodded and rode off to follow his orders.
I sat on my horse watching this spectacle play out. Without warning, I felt the sudden loss of my cat and worried about his well-being. Adso was part house cat and part feral cat. However, he was my cat. He loved to jump onto my lap to snuggle and drift off to sleep. Or lie on the windowsill basking in a sunbeam tail swishing like a metronome. He did wreak havoc in my surgery at times but he was mine, a gift from Jamie. Adso was just as much a part of the family as any of us. So why couldn’t Arabella be this lonely man’s family?  Family is whoever you say they are.  
The Lieutenant promptly returned carrying a bundle which he handed to Jamie.
Jamie slid down from his horse and approached the gentleman.
“On behalf of the Continental Army, I would like tae offer ye recompense for disturbing yer peace. Please accept this small token from myself and General Washington. And for the lovely Miss Arabella, I make a gift of this fish just caught this morning.”
Jamie removed his hat and bowed to the man.
Mortimer truly wasn’t sure of what to make of this but graciously accepted the parcel. He removed his cap revealing a head of matted hair and returned the bow.  He replaced his cap, straightened his shoulders, held his head high as he strolled back to his home, a rich man. A man made richer not for what he received but for the respect given him.
Later that night as I lay in Jamie’s embrace I asked him what prompted his actions on the road.
“Do ye ken the conversation we had in the gardens in Philadelphia? The one about what happened between ye and his lordship?”
Did I remember, he wanted to know? How could I forget?
“Of course I remember, you said that you would mention it from time to time.  Am I to take it that this will be one of those times?”
“Aye, ‘tis. But not what yer thinking about,” he said with a sidelong look. “I’m speaking of how John’s friendship healed us during times of great need. Mine at Ardsmuir, Hellwater, and Jamaica. Yer’s when ye thought I died.” The topic of my hasty marriage to John (for strictly political reasons) was still a sore point to him. He understood it, but didn’t and wouldn’t like it.  
Jamie let out a sigh trying to collect himself before continuing, “Mortimer was naught but a poor lonely old man, Sassenach. And I did not do much for him. I gave him a wee bit of flour, lard, dried meat, apples, and some parritch.” Jamie stopped to think for a moment, “Oh, a razor, a lump of soap, and a fish for his mangy cat.”
“Are you saying that you did this because of the kindnesses John showed us?”
“Exactly so, mo ghràdh . I felt..it just felt like the right thing tae do.”
I raised my face to look at him, “There’s a term for that and it's called paying it forward .”
He looked quizzically at me trying to understand what I meant.
“What that means is when someone does something kind or helpful for you, you return that kindness to a different person instead of repaying the person who originally helped you. Did you know that the man who started this idea is alive now?”  
“Och, aye? Who is he Sassenach?”
“Benjamin Franklin. I think you would like him. He was a founding Father, freemason, inventor, scientist, and a printer.”
His eyebrows lifted at the mention of Franklin being a printer and a freemason. “I should like to meet this man one day. “
Jamie grew quiet as he attempted to digest this information. “Paying it forward,” he rolled the words around in his mouth tasting them. “Aye, that’s it. Just so, I was paying it forward.”
“Jamie, I think what you did was far greater than repaying a kindness. I think you gave him something more than he ever expected. You gave him respect and a way to restore his dignity.”
He leaned over and kissed me, “Aye, Sassenach, respect is something every man or woman deserves.” Jamie stopped to think for a moment, “No man wants to go about stinking if he can help it.” I knew he was thinking of his time hiding in the cave and as a prisoner at Ardsmuir. “There were days I thought I would never get the stink off my body, dirt from under my nails, or be rid of the lice. ‘Twas a small thing but it may make a big difference to him. Maybe it will help to restore his self-regard.”
The following day we resumed our journey. Once again a man stood in the road again blocking our path. There was something vaguely familiar about him. It was Mortimer, now clean-shaven, clothes washed having removed several layers of filth, and much less fragrant. He carried a pack strapped to his back probably containing all his worldly possessions. Strangely he carried a beautiful and well-maintained musket in his hand.
He approached Jamie, removed his cap, and bowed deeply.
“Yer Excellency, I have decided tae travel with ye fer a while. If ye dinna mind.”
“Yer presence is welcome, Mr. Hepplewhite. Find yerself a place among the men. This evening please come by tae see my wife. She is the physician of our troop. She will see tae yer physicking needs should ye have any.”
“I thank ye, sir.” Mortimer replaced his cap, lowered his head, and took a position among the rank-and-file.
Jamie smiled, a pleased look playing across his face. His arm raised and he waved us forward.
As the men resumed their march, a wee black puff ball of fur stuck its head out of Mortimer’s bag evidently Arabella had a wash-up too.
                                                  ********************
Thig an seo cù - Come here dog.
If anyone wants to know, Jamie’s white stallion’s name was Samson. And he sneezed violently when he sniffed Mortimer.
A little bit of history here. Benjamin Franklin lent Benjamin Webb a sum of money to start a business. He told Webb that when his business was successful and he had paid all his debts, he should likewise help someone else like Franklin helped him. In return, that gentleman would have to assist someone else like Webb helped him. Franklin hoped this would continue until some knave would stop its progress. The idea of paying it forward was born.
We can all thank @scubalass for telling me about Ben Franklin and Paying It Forward.  She is truly an amazing person and a fount of information and wisdom. I think that this added so much to the story and found it quite interesting.
Thank you for reading. I hope you liked it.
It is also on AO3 where I am LadyJane518:   https://archiveofourown.org/works/28907349
69 notes · View notes
sordidandsublime · 7 years ago
Text
The Lopez-Sidonias
I keep saying I'm done with PT, which is true (it's not an innovative story. In fact it's probably downright derivative), but I haven't entirely figured out the people who populate the setting. I suppose this one is about occupation. As usual, nothing set in stone etc.
Natalia Lopez Sidonia- she was teaching English in the as-yet-unnamed Protestant university in SMDM, a properly genteel occupation for a upper class young lady waiting for marriage when she met Rafael. While it takes Natalia some years to gain some sort of official title on the board of the Sidonia corporation (it takes a similar amount of years for Rafael to properly incorporate his holdings), she's the one who takes up the day to day management of the plantation, collects the rental on various properties, makes the shrewd purchasing decisions etc and saves the corporation from ruinous decisions when she can. While Rafael might rightfully claim to be owner and CEO of the corporation, Natalia kept the enterprise together and held its coffers (much to Rafael's frustration as he was often prey to a great desire to wantonly spend huge sums of money).
Santiago Lopez Sidonia- heir apparent, oldest son, golden boy. Like most of the Sidonias, Santiago is intelligent, but lacks focus and motivation. He was an indifferent student despite the forceful reminders to do better, to not embarrass the family. He passed the exams that put him in the best (read: poshest) university in the country, bounced from management degree to sociology degree to biology degree, stopped showing up to class for drinking or traveling out of the city or for any number of reasons and is expelled, reaccepted, expelled again. Eventually he manages to graduate with a degree in agriculture from a third rate university back in the home province. He then goes on to help his father with the plantation with the expectation of someday becoming the family patriarch. This description might give one the impression of a sullen, gloomy presence, but that would be wrong. Santiago is popular, well-liked, gallant. He has a number of compadres whom he likes to drink and travel with, similarly well-to-do men who don't really have to work a day in their lives. He explains away his various abandoned enterprises with bellows of laughter and panache, one can't help believing, even sympathizing with his point of view. One might even excuse his fits of rage.
Rea Silvia Sidonia-Fargas- much like her mother, Natalia, Rea is the one who now actually keeps the corporation afloat after years of ruinous debts and mismanagement. She installs herself as chief purchasing officer instead of COO, and puts her more malleable (relative term, ha) siblings on the board. Unlike the rest of her family, Rea's involvement in the family business has been minimal. As a young doctor she worked in Rafael's hospital, of course, it was expected, but after her marriage she went back to school and studied literature and history, focusing on Filipino literature and history. Rea becomes a respected writer, historian and advocate for Filipino art, and has a weekly column in the culture section of a widely read national paper. She's most well known for English and Tagalog translations of the work of Emilio Borromeo Alonzo, a lesser known poet and writer from Bulacan, who, in Rea's opinion, is a much better writer than Rizal because of his wit, subtlety and elegant language. Rea has written a handful of historical novels as well, which were praised for their extreme historical accuracy, but quietly laughed at in some circles for their prim didacticism. Despite her intellectualism, Rea is not a political radical or a flouncy barely-there hippie. She's a shrewd and sharp traditionalist who does not like to be contradicted.
Jaime Sidonia- Serafina's son, adopted by Rafael, much to Natalia's sporadically veiled displeasure. Good humored, a little vague, self-effacing but stubborn in the extreme. Occasionally he surfaces from his thoughts to deliver an exceedingly dry put down. He was in university studying to be an architect at about the same time that Santiago was ricocheting widely between departments, and becomes one with very little fuss. The family's good name allows him to enter an international firm with a branch in Manila where he works for a few years before leaving to become involved in the national cultural commission's projects of restoring mansions built in the vernacular style and the federal style government buildings that remain damaged from the bombardments of WW2. Jaime is now mostly a scholar of vernacular and Asian architecture, he's written books, presents lectures and teaches in university sometimes. He stays out of the family business although he has a seat on the board because he usually has no problems voting the way Rea wants him to vote.
Encarnacion (Chona) Lopez Sidonia- vivacious, frivolous, given over to strong passions, possibly one of the happiest of the Sidonia siblings. Chona was a respectable student, but doesn't count herself as an intellectual like some of her other siblings. Unexpectedly, she's also a doctor, a dermatologist, and sets up a successful practice in a fashionable Makati clinic, helping actresses and socialites clear up their breakouts and occasionally feeding glutathione into their veins for that mestiza paleness. Spurning putting up a practice in Rafael's beloved namesake of a hospital puts her out of favor for years, but she couldn't give less of damn (what was she going to do, offer whitening treatments to pig farmers?). She marries a surgeon, eventually divorces him. Currently she and her fiancé, John, own and manage the Manderley, the oldest hotel in SMDM, a rambling 19th century structure by the seafront boulevard that they're marketing as old world, a return to more graceful times.
Antonio Lopez Sidonia- Architect, industrial designer. Mercurial, melancholic, very kind but flippantly sarcastic and venomously funny when angry. School was difficult for him; he was extremely bright but sensitive, the slightest upset at home would make it impossible for him to focus on his work and he often got into fights and would act out outrageously. Despite that he managed to graduate with honors (after moving high schools) and enrolled into a competitive architecture and design program in university. He had to fight himself, his addictions and the black void of depression to get his degree. His first remarkable project came about as a kind of joke; a month or so before graduation he was in Palawan with some school friends and their older, more sophisticated siblings and their friends when one of them idly began to speculate about building a vacation home on his family's cliff side property. Antonio said it could easily be done, and two years later the elegant construction of glass, local wood and indigenous rock is featured in architects' magazines and mentioned in society papers as the work of a rising new talent. Antonio begins to build homes for the wealthy, he champions the tropical modernist movement, insists on using local materials and craftsmanship and incorporates contemporary versions of traditional Filipino designs into his work. He's difficult to work with, he changes his plans midway through construction, building is slow and he is expensive, but the end result, most feel, is well worth it. His forays into commercial work is a disaster because he refuses to compromise his working methods for a corporate bottom line. All this time Antonio is bedeviled by a love for contraband pharmaceuticals and crushing unhappiness, and there are months and sometimes years when he doesn't work at all. He declares bankruptcy once, is practically homeless several times. There are rumors of primitive asylums, extremely expensive treatments at high end sanitariums. In his later years he's found a semblance of peace and has returned to live on Negros Island, on the occidental side, far enough away from his family to spare him their venom but close enough to fulfill his duties on the board of the corporation. His current project is building affordable sustainable housing in collaboration with a foreign multinational, and he helps his favorite niece, Ava, with the construction of her own home.
Ciela Maria Lopez Sidonia-Pangilinan- The family beauty and the brainy one, she would thank everyone to remember that. She excels in school, and for her pre medicine course she doesn't simply enroll in a relatively easy science-medical degree, but some obscure molecular biochemistry honors program. Afterwards, a fast-tracked medical program, and then a masters in hospital management. Ciela makes sure to remind her siblings that she's never flubbed her schooling the way some of them have, and in almost any business related argument she trots out her credentials; clearly she's the most learned and so they should bow to her expertise. Ciela returns to Santa Maria in bouyant spirits after she collects her masters. She imagines modernizing Rafael's hospital, changing the system top to bottom, making it more efficient and bringing it up to primary, western standards. She won't stop there, and is dedicated to doing the same for the plantation, and can already imagine the gratitude and admiration of her family. Smart, good and beautiful Ciela. It doesn't go the way she imagined; she and Rafael fight, a lot. She insists (she never raises her voice) she shows him her textbooks and manuals, spends money on new equipment, changes policies and hires staff without asking, Rafael calls her stupid and walang-alam. They row for months, the entire family is involved one way or the other, Ciela cries, engages her elder sisters in long phone calls, alternates between cajoling and scolding her father. Eventually Ciela leaves, returns to Manila and makes what is, arguably, the most successful marriage amongst her sisters, to the scion of a massive pharmaceutical company. Still, Ciela can't help trying to make herself necessary to the family business. She acquires a phd in health sciences, visits her family regularly, tries to offer this or that innovation to Rafael, who laughs at her and rebuffs her. Now that she's on the board of the Sidonia corporation she's aggressively (but in a ladylike way) trying to acquire the position of COO, despite her lack of practical experience and shaky grasp on the realities of running a business.
Ricardo Lopez Sidonia- the youngest, and full on family disaster. No one can say, exactly, how Ricky passes both grade school and high school but he does. He moves from one humanities degree to another, claims he wants to be a novelist, a filmmaker, a painter, a pilot. Eventually he drops out of school permanently. Cheerful, clever, indolent and entitled, Ricky skates through life on the generosity of his parents. He doesn't care that his father calls him a fool, a useless parasite etc etc. he figures Rafael owes him his money for being a shitty dad and an all around fucked up human being, and it's not like they'll ever put him out on the street, they're too proud for that. Ricky dabbles in various businesses without ever making a success out of them, despite them being business that would yield a respectable profit if he stuck with them. Gas stations, convenience stores. Once, assisted by Ciela, he attempts to sell medical equipment, and also gets into several businesses with stoner school buddies who eventually got their shit together for adulthood. Ricky's too lazy to stick with anything; he's too lazy to be a proper junkie, even. Fond of luxury goods, the latest smartphone etc but he doesn't take good care of these things. He gives them away when bored. Nowadays he occasionally shows up to his job as assistant hospitality manager for one of his nephew, Isidro's resorts, but really everyone knows it's not an actual job, it's an excuse for him to hang out with guests, take them out on the lake and smoke a blunt or five.
Plus:
Serafina and Angelica Sidonia- Rafael's younger sisters. For a time they both lived with their mother in one of the homes in the San Diego compound, out of sight of the big house. No one knows whether they're full or half siblings. For a time it was the only thing the townspeople of San Diego could talk about, and even years later it's still a topic to dredge up on hot afternoons when the latest gossip is thin. Angelica marries, Serafina does not. Angelica's husband dies young, but not before she bears him a son, Felipe, who goes on the become head overseer of the plantation and assistant to Rafael. Serafina has two children out of wedlock, Jaime and Maximiliano. The father might as well be the devil himself or an enkanto, that's how much people know of their paternity. In their old age Serafina and Angelica become intensely reclusive, and still dwell in the same house they were given to live in by their brother.
Asterio Sidonia Cabahug- the youngest of the Sidonia siblings, from his mother's marriage to a rice planter and dealer. Lumpish and obedient, but not overly intelligent. He oversees the Sidonia's roll on-roll off port.
7 notes · View notes
solveitdev · 4 years ago
Text
Is Java still relevant in 2021?
React, Kotlin, Swift, Python, React Native, Deno, Flutter, Java, how many other programming languages exist, new ones are added, old ones are forgotten, but what about Java? Is this language dead or is it still relevant? Today SolveIt Java developer Stas Kolenchik will try to answer this question and give his expert opinion.
Java is a high-level object-oriented programming language with static typing developed by Sun Microsystems in 1995, later acquired by Oracle.  Java code can run on any platform that supports the JVM (Java Virtual Machine). It is a virtual machine that translates human-readable Java code into processor-understandable code.
Therefore, you can run Java code everywhere for which the JVM has already been developed. For example:
Powerful servers;
Computers;
Smartphones;
Fitness bracelets;
GPS trackers;
Smartwatches;
Smart TVs, refrigerators, microwaves, and other home gadgets;
Smart cards for indoor access.
Nowadays, on forums and in countless articles you can find loud statements that "Java is dying" and "Java is a thing of the past". All this is presented as "we should switch to another programming language" or "Java programmers are no longer in demand". But all this is fundamentally wrong if you listen to the facts and statistics. Let's take a closer look at these myths:
Myth #1: "Java is dying"
A huge number of programs have been written since the beginning of the use of this language, which is still alive and in need of support, such specialists will be in demand for a long time to come. Java is used in world-famous companies like Google, Netflix, Facebook, Amazon, Oracle and IBM.
If we look at the statistics, based on JetBrains' research, Java is the most popular programming language of 2020. But since it's still an old language, it has disadvantages. Let's take a look at them.
Cons of Java:
Unconventionally implemented object-oriented approach to programming
The fundamental reason why Java cannot be a fully OOP language is the presence of primitives. Since version 8, a functional programming approach has been added to Java when working with collections.
Code verbosity
Multi-word code is not the highest performance. Where C++ uses one command, Java requires five.
Limited applicability
To develop websites, create games, operating systems, drivers, you should turn to other programming languages.
Pros:
Well implemented multithreading
Multi-platform
Large Java community
All the bugs have already been committed and described by someone else. On stack overflow, you can find answers to almost any question.
Fast project estimation
At the time of estimating the timing of the project, you can predict quite accurately in what timeframe the product will be ready. Of course, mistakes will be made, but they will be insignificant compared to JavaScript, for example.
Relatively fast creation of new features
Thanks to Java it is possible to do this in a short period of time by connecting ready-made solutions in the form of libraries that have already been implemented by someone else and there is no need to write all the code from scratch.
Java-Dad
To start your career, this programming language is great. It will help you understand object-oriented and functional approaches, thanks to all the features. Once you understand it, you can understand any other programming language.
As Java is a high-level language with a long history, it already has a strong community that has worked with all sorts of programming cases. Thanks to the java-community and internal library, it is possible to take code that has already been worked on, rather than writing it all over again like in other programming languages. The library keeps growing and Oracle keeps investing, new versions and features appear, so it's safe to say that Java is more alive than ever.
Myth #2: "Java is in the past"
In order to accurately dispel this myth, it is necessary to cite a few historical facts for Java:
2011 - Oracle acquired Sun Microsystems, thereby acquiring Java and actively investing in its development.
2014 - Java version 8 was released, becoming a major event in the programming world, the language was appreciably changed and upgraded.
2018 - a new release cycle. It was decided to release new versions in small iterations, rather than large-scale updates once a year. This allowed new features to be added quickly, tested and released again.
2020 - Java became the most popular programming language.
At the moment, I don't know of any language that could replace Java in the next decade. The main reason is not only its scale and popularity but also it's a huge funding.
Stas Kolenchik, Java Developer at SolveIt.
So it is impossible to say that Java is a thing of the past. Yes, it is an old language with its history and shortcomings, perhaps somewhere conservative views on new releases and features. However, statistics, a lot of information, code base, projects and people in the java-community say the opposite: Java will be in demand for a long time to come.
How to choose the right programming language for your next project?
In addition to choosing one of the leading languages in your particular niche, you should consider:
- The demand for the language in a particular region
- Libraries and frameworks for that language
- Level of support in the community
- Recommendations of the development company. This is probably the most important thing to consider when choosing a programming language.
A classic situation: the customer chooses the fastest and cheapest option on the wrong technology, ignoring the need for future support and expert advice. Incorrect choice and unrealistic deadlines lead to a large number of bugs and, as a consequence, an increase in the budget. At the same time, the product needs to be supported.
A checklist for choosing a programming language for your project:
Consult with the development company that will be making your product
Ask for an estimate of the project with the developers' rate
Analyze how popular the language is now. This will determine how easy it will be to find support in the future
If you don't know which programming language to choose for your next big idea, the SolveIt experts will be happy to help you make your choice by implementing your idea for you. Let’s Solve It Together!
0 notes
douchebagbrainwaves · 7 years ago
Text
WHY I'M SMARTER THAN LANGUAGE
We tend to write the software controlling those flying cars? But I always end up spending most of the members don't like it.1 Long but mistaken arguments are actually quite rare.2 Lexical closures provide a way to get startup ideas is hard. Wasting programmer time is the true inefficiency, not wasting machine time.3 Someone wrote recently that the drawback of Y Combinator wants to raise $250-500k. Language design is being taken over by hackers.4 A lot can change for a startup, it will sound plausible to a lot of money. Did they want French Vanilla or Lemon?
Organic growth seems to yield better technology and richer founders than the big bang method.5 I can call on any struct.6 The project either gets bogged down, or the startup will get bought, in which case problem solved, or the result is a free for all. Which means that even if we're generous to ourselves and assume that YC can on average triple a startup's expected value, we'd be taking the right amount of risk if only 30% of the startups were fundable would be a good idea, but you have to process video images depends on the rate at which you have to be facing off in a kind of business plan for a new type of number you've made up, you can envision companies as holes. I made for a panel discussion on programming language design at MIT on May 10,2001. What investors still don't get is how clueless and tentative great founders can seem at the very beginning.7 You have to approach it somewhat obliquely.
Usually this initial group of hackers using the language for others even to hear about it usually, because to prove yourself right you have to do is turn off the filters that usually prevent you from seeing them. This helps counteract the rule that in buying a house you should consider location first of all. I went to work for the love of it: amateurs. Which makes it easier to remember that it's an admirable thing to write great programs, even when this work doesn't translate easily into the conventional intellectual currency of research papers.8 In theory this is possible for species too, but it's a bad sign they even try. In some applications, presumably it could generate code efficient enough to run acceptably well on our hardware. The problem is the same reason Facebook has so far remained independent: acquirers underestimated them. If people are expected to behave well, they tend to be one of the only programming languages a surprising amount of effort has gone into preventing programmers from doing things that they think aren't good for you.9 I don't think we suck, but instead ask do we suck?10 And try to imagine what a transcript of the other guy's talk would be like teaching writing as grammar, without mentioning that its purpose is to refine the idea.11 But I'd rather use a site with primitive features and smart, nice users than a more advanced one whose users were idiots or trolls.12
Expressing ideas helps to form them. A company that an angel is willing to put $50,000 into at a valuation of a million can't take $6 million from VCs at that valuation. Afterward I put my talk online like I usually do.13 This is understandable with angels; they invest on a smaller scale. As a young founder under 23 say, are there things you and your friends would like to build great things for the companies they started would hire more employees as they grew. Having strings in a language where all the variables were the letter x with integer subscripts. Plus they're investing other people's money, and they even let kids in.14
It's due to the shape of the problem. If you want to notice startup ideas: those that grow organically out of your inbox?15 But I know the real reason we're so conservative is that we shouldn't be afraid to call the new Lisp Lisp.16 And it may be, this is the exact moment when technological progress stops. Currently the way VCs seem to operate is to invest in startups Y Combinator has funded. Then I do the same thing over and over seems kind of gross to me. To start with, investors are letting founders cash out partially.
And so interfaces tend not to change at all, and you'd get that fraction of big hits. That may be the greatest effect, in the sense that it lets hackers have their way with it. Essays should do the opposite. You might think that if they found a good deal of syntax in Common Lisp occurs in format strings; format is a language where you can spend as long thinking about each sentence as it takes to say it, a person hearing a talk can only spend as long thinking about each sentence as it takes to hear it. Is it necessary to take risks proportionate to the returns in this business. We wrote what was, 700 years ago, writing software pretty much meant writing software in general, because we'd be a long way toward fixing the problem: you'd soon learn what was expensive. The real question is, how far up the ladder of abstraction will parallelism go? It's pretty clear now that the healthiest diet is the one our peasant ancestors were forced to eat because they were so much more robust to have all the brains on the server. This is more pronounced among the very best hackers will like? But of course if you really get it, you can cry and say I can't and they won't even dare to take on ambitious projects. You're getting things done.17 But that's no different with any other tool.
And then there was the language and there was my program, written in the coming years will be Web-based software you can use any language you want, so if I can convince smart readers I must be pretty sharp. But business administration is not what you're doing in a startup founded by three former banking executives in their 40s who planned to outsource their product development—which to my mind is actually a lot riskier than investing in a pair of really smart 18 year olds—he couldn't be faulted, if it means anything at all, and you'd get that fraction of big hits.18 In one place I worked, we had a big board of dials showing what was happening to our web servers.19 But if you're living in the future. I decided the critical ingredients were rich people and nerds—investors and founders. I'm just saying you should think about who you really admire and hang out with them, instead of taking a class on, say, transportation or communications. Inventors of wonderful new things are often surprised to discover this, but you can't trust your judgment about that, so ignore it. When I go to a talk, you could fund everyone who seemed likely to succeed, it's hard not to think where it came from. How often does it happen that a rule works for thousands of years, then switches polarity?
Anything funny or gripping was ipso facto suspect, unless it was old enough to be rational and prefer the latter. When you know nothing, you have to be more than a language, or you have to get up on monday and go to work.20 At a good college, from which—because they're writing for a popular magazine—they then proceed to recoil in terror. How do you tell whether something is the germ of a giant company, or just a niche product? The sort of writing that attempts to persuade may be a necessary evil in a legal dispute, but it's not likely to have happened to any bigger than a cell. There is also the same: Darwinian. Those are like experiments that get inconclusive results.21 Translated into more straightforward language, this means: We're not investing in you, but we weren't interested in ecommerce per se. And it's not just the cost of reading it, and that is exactly the kind VCs won't touch. If there's something you're really interested in, you'll find valuable ones just sitting there waiting to be discovered right under our noses.
Notes
The optimal way to make that leap. 'Math for engineers' sucks, and this tends to happen fast, like storytellers, must have had a tiny.
Turn the other seed firms. For example, probably did more drugs in his early twenties compressed into the work that seems formidable from the CIA runs a venture fund called In-Q-Tel that is allowing economic inequality to turn down some good ideas buried in Bubble thinking. Geshke and Warnock only founded Adobe because Xerox ignored them. Maybe markets will eventually get comfortable with potential earnings.
It seemed better to embrace the fact by someone else start those startups. The Socialist People's Democratic Republic of X is probably part of wisdom. I hadn't had much success in doing a bad sign if you are unimportant. Or rather, where many of the political pressure against Airbnb than hotel companies.
They thought I was there when it converts. Perhaps the most important information about competitors is what approaches like Brightmail's will degenerate into once spammers are pushed into using mad-lib techniques to generate series A rounds from top VC funds whether it was putting local grocery stores out of school. They thought I was a very noticeable change in the long term than one level of links. Instead of bubbling up from the revenue-collecting half of it.
A round, that they kill you, it becomes an advantage to be higher, as on a saturday, he saw that I see a lot of people like them—people who are both.
Viaweb, he'd get his ear pierced. If you have more options. That's the lower bound to its precision. Now we don't have to solve this problem by having a gentlemen's agreement with the solutions.
Investors are one of them is that if a company tuned to exploit it.
But it turns out to do with the New Deal but with World War II the tax codes were so bad that they violate current startup fashions. As well as problems that have economic inequality.
No one seems to have gotten away with the high-minded Edwardian child-heroes of Edith Nesbit's The Wouldbegoods. I were doing Bayesian filtering in a bar. Professors and politicians live within socialist eddies of the next round, though more polite, was one firm that wanted to have to deliver these sentences as if a bunch of other people. No Logo, Naomi Klein says that I know when this happened because it depends on a valuation cap is merely a complicated but pointless collection of stuff to be a founder; and with that of whatever they copied.
Apple's products but their policies. I think in general we've done ok at fundraising is because other companies made all the East Coast VCs. 35 companies that tried that.
If you walk into a few additional sources on their companies. At Princeton, 36% of the conversion of buildings not previously public, like good scientists, motivated less by financial rewards than by selling them overpriced components. You need to fix once it's big, plus they are like, and that injustice is what we need to get users to recruit manually—is probably 99% cooperation.
Teenagers don't tell the craziest lies about me. It seemed better to read a draft of this.
In fact, this thought experiment works for nationality and religion too. To a 3 year old son, you'll be well on your board, there is some kind of gestures you use in representing physical things.
Some of the world in verse.
I have so far has trained them to ignore what your GPA was.
In 1995, when Subject foo degenerates to just foo, what if they did not become romantically involved till afterward. Some are merely ugly ducklings in the sample might be enough. The actual sentence in the same thing twice.
What made Google Google is that Digg is Slashdot with voting instead of reacting. Some VCs seem to be when I switch in mid-sentence, but starting a business, having sold all my shares earlier this year. Even as late as 1984. And yet I think it's mainly not having to have this second self keep a journal, and I don't think they'll be able to formalize a small amount, or Microsoft could not process it.
03%.
These points don't apply to the hour Google was founded, wouldn't offer to invest in these funds have no real substance.
Only founders of failing startups would even be working on is a dotted line on a road there are lots of type II startups spread: all you know Apple originally had three founders? They want so much better to read stories. But I'm convinced there were, like wages and productivity, but trained on corpora of stupid and non-broken form, that it might be?
Some of the word procrastination to describe what's happening till they measure their returns. The Civil Service Examinations of Imperial China, during the 2002-03 season was 4. Part of the world barely affects me.
1 note · View note
suzanneshannon · 5 years ago
Text
How to Disable Code: The Developer’s Production Kill Switch
The following is a guest post written by Carlos Schults.
Being able to disable code in production is a power that many developers aren’t aware of. And that’s a shame. The ability to switch off some portions—or even complete features—of the codebase can dramatically improve the software development process by allowing best practices that can shorten feedback cycles and increase the overall quality.
So, that’s what this post will cover: the mechanisms you can use to perform this switching off, why they’re useful and how to get started. Let’s dig in.
Why Would You Want to Disable Code?
Before we take a deep dive into feature flags, explaining what they are and how they’re implemented, you might be asking: Why would people want to switch off some parts of their codebase? What’s the benefit of doing that?
To answer these questions, we need to go back in time to take a look at how software was developed a couple of decades ago. Time for a history lesson!
Tumblr media
The Dark Ages: Integration Hell
Historically, integration has been one of the toughest challenges for teams trying to develop software together. 
Picture several teams inside an organization, working separately for several months, each one developing its own feature. While the teams were working in complete isolation, their versions of the application were evolving in different directions. Now they need to converge again into a single, non conflicting version. This is a Herculean task. 
That’s what “integration hell” means: the struggle to merge versions of the same application that have been allowed to diverge for too long. 
Enter the Solution: Continuous Integration
“If it hurts, do it more often.” What this saying means is that there are problems we postpone solving because doing so is hard. What you often find with these kinds of problems is that solving them more frequently, before they accumulate, is way less painful—or even trivial.
So, how can you make integrations less painful? Integrate more often.
That’s continuous integration (CI) in a nutshell: Have your developers integrate their work with a public shared repository, at the very least once a day. Have a server trigger a build and run the automated test suite every time someone integrates their work. That way, if there are problems, they’re exposed sooner rather than later.
Tumblr media
How to Handle Partially Completed Features
One challenge that many teams struggle with in CI is how to deal with features that aren’t complete. If developers are merging their code to the mainline, that means that any developments that take more than one day to complete will have to be split into several parts. 
How can you avoid the customer accessing unfinished functionality? There are some trivial scenarios with similarly trivial solutions, but harder scenarios call for a different approach: the ability to switch off a part of the code completely.
Feature Flags to the Rescue
Defining Feature Flags
There are many names for the mechanisms that allow developers to switch a portion of their code off and on. Some call them “feature toggles” or “kill switches.” But “feature flags” is the most popular name, so that’s what we’ll use for the remainder of this post. So, what are feature flags?
Put simply, feature flags are techniques that allow teams to change the behavior of an application without modifying the code. In general, flags are used to prevent users from accessing and using the changes introduced by some piece of code, because they’re not adequate for production yet for a number of reasons.
Disable Code: What Are the Use Cases?
We’ll now cover some of the most common use cases for disabling code in production.
Switching Off Unfinished Features
As you’ve seen, one of the main use cases for feature flags is preventing users from accessing features that aren’t ready for use yet.
That way, programmers developing features that are more complex and take a longer time to complete aren’t prevented from integrating their work often and benefiting from it.
Enabling A/B Testing
The adoption of feature flags enables the use of several valuable practices in the software development process, one of which is A/B testing. 
A/B testing is a user experience research technique that consists of comparing two versions of a website or application to decide which one to keep. It entails randomly splitting users into two groups, A and B, and then delivering a different version of the application to each group. One group might receive the current production version, which we call the “control,” whereas the second group would receive the candidate for the new version, called the “treatment.” 
The testers then monitor the behavior of both groups and determine which of the versions achieved better results. 
Feature flags are a practical way to enable A/B testing because they allow you to quickly and conveniently change between the control and treatment versions of your application.
Tumblr media
Enabling Canary Releases
If you deliver the new version of your app to your entire userbase at once, 100 percent of your users will be impacted if the release is bad in some way. What if you could gradually roll out the new version instead? You’d first deploy to a small subset of users, monitoring that group to detect issues. If something went wrong, you could roll it back. If everything looked fine, you could then gradually release the version for larger groups. That’s a canary release in a nutshell. It’s another powerful technique that feature flags might help with.
Customizing Features According to Users’ Preferences
It’s not uncommon to have to customize your application according to the needs of specific users, and there are several ways in which software teams can accomplish that—some more efficient, and others less so (companies that create separate branches or entire repositories for each client come to mind). This is another area where feature flags could help, allowing teams to dynamically switch between different versions of the same functionality.
Disable Code in Production 101
How do you go about disabling code? That’s what we’re going to see now, in three increasingly sophisticated phases.
First Stage: The Most Basic Approach
We start with an approach that’s so primitive, it maybe shouldn’t be considered a feature flag at all. Consider the pseudocode below:
calculateAdditionalWorkHours(Employee employee, Date start, Date end) { // return calculateAdditionalWorkHoursSameOldWay(employee, start, end); return calculateAdditionalWorkHoursImproved(employee, start, end); }
In the code above, we’re just commenting out the old version of some method and replacing it with a new version. When we want the older version to be used, we just do the opposite. (Well, I said it was primitive.) This approach lacks one of the most fundamental properties of a feature flag—the ability to change how the application behaves without changing its code.
However, it plants the seed for more sophisticated approaches.
Second Stage: Taking the Decision Out of the Code
The previous approach didn’t allow developers to select the desired version of the feature without changing the code. Fortunately, that’s not so hard to do. First, we introduce a logical variable to determine which version we’re going to use:
calculateAdditionalWorkHours(Employee employee, Date start, Date end) { var result = useNewCalculation ? calculateAdditionalWorkHoursImproved(employee, start, end) : calculateAdditionalWorkHoursSameOldWay(employee, start, end); return result; }
Then, we use some mechanism to be able to assign the value to the variable from an external source. We could use a configuration file:
var useNewCalculation = config[newCalculation];
Passing arguments to the application might be another option. What matters is that we now have the ability to modify how the app behaves from the outside, which is a great step toward “true” feature flagging.
Keep in mind that the code examples you see are all pseudocode. Using your favorite programming language, there’s nothing stopping you from starting with this approach and taking it up a notch. You could, for instance, use classes to represent the features and design patterns (e.g., factories) to avoid if statements.
Tumblr media
Stage 3: Full-Fledged Feature Flag Management
The previous approach might be enough when your application has only a small number of flags. But as that number grows, things start to become messy.
First, you have the issue of technical debt. Manually implemented feature flags can create terribly confusing conditional flows in your codebase. That only grows worse with new flags being introduced each day. Additionally, they might make the code harder to understand and navigate, especially for more junior developers, which is an invitation for bugs.
Another problem is that as the number of flags grows, it becomes more and more common to forget to delete old, obsolete ones.
The main problem of a homegrown approach is that it doesn’t give you an easy way to see and manage all of your flags at once. That’s why our third and final stage is a single piece of advice: Instead of rolling out your own feature flags approach, adopt a third-party feature flag management system.
Tumblr media
Feature Flags Are a CI/CD Enabler
We’ve covered the mechanisms developers can use to disable portions of their codebase in production without having to touch the code. This capability is powerful and enables techniques such as A/B testing and canary releases, which are all hallmarks of a modern, agile-based software development process.
The names for the techniques might vary—feature flags, feature toggles, feature flipper, and so on. The way in which the techniques are implemented can also vary—from a humble if statement to sophisticated cloud-based solutions.
But no matter what you call them, you can’t overstate the benefit these mechanisms offer. They’re an enabler of Continuous Integration, which is essential for any modern software organization that wants to stay afloat.
The post How to Disable Code: The Developer’s Production Kill Switch appeared first on CSS-Tricks.
How to Disable Code: The Developer’s Production Kill Switch published first on https://deskbysnafu.tumblr.com/
0 notes
impressivepress · 5 years ago
Text
Trotsky’s Struggle against Stalin
Joseph Stalin was a hangman whose noose could reach across oceans.
On the afternoon of August 20, 1940, Ramón Mercader, a young Spaniard in the hire of the GPU, Joseph Stalin’s secret police, seized the moment. Under the alias of Canadian businessman “Frank Jacson,” he had infiltrated Leon Trotsky’s household in Coyoácan, a borough of Mexico City, several months earlier. As Trotsky leaned over his desk, Mercader viciously struck him on the right side of the head with a pickax, its handle cut down to hide it more easily under a raincoat. The wound inflicted was three inches deep. Reeling, the old revolutionary found the strength to fight back against the assassin. Trotsky prevented Mercader from inflicting another, fatal blow and battled for his life until his bodyguards arrived. With Mercader beaten unconscious and the police called, he collapsed into the arms of his wife, Natalia Sedova. The next day, Trotsky succumbed to his wounds, dead at the age of 60.  
With his nemesis murdered and Mercader, the murderer, denying any Soviet involvement (he would eventually serve 20 years in a Mexican prison), Stalin could feel a deep satisfaction. The individual, who, more than any other, symbolized opposition to Stalinism, had been eliminated. Mercader’s vile act closed the long, bitter conflict between the two men. From the fictionalized version in Unforgiving Years, the excellent novel by Victor Serge, his one-time comrade, to the 1972 movie, The Assassination of Trotsky, where Richard Burton portrayed him, the lurid details of Trotsky’s death have often commanded more attention than his extraordinary life. Trotsky’s struggle against Stalin and Stalinism, the subject of this article, was a crucial part of his life’s final decade.
Born Leon Davidovich Bronstein to a family of Jewish farmers in Ukraine in 1879, Trotsky came of age among the revolutionary movements operating in the ultra-repressive atmosphere of the Russian Empire. At the age of eighteen, he enthusiastically embraced Marxism. The remainder of his life, one can say, without exaggeration, was based around a single, ultimate goal: worldwide workers’ revolution. During his early involvement in Russian socialist politics, Trotsky clashed with Vladimir Lenin over how a revolutionary party should be organized (such clashes would later serve Stalin well when he depicted Trotsky as hostile to Lenin’s ideas).  During the 1905 Revolution, after the formation of the first soviets (radical councils representing the working masses), Trotsky, only twenty-six at the time, served briefly as Chairman of the St. Petersburg Soviet. A long period of exile following Tsar Nicholas II’s crackdown on left-wing radicals ended when he returned in May 1917 to a Russia aflame with revolution. Joining the Bolsheviks a few months later, Trotsky worked closely with Lenin. Together, they prepared the overthrow of the ruling Provisional Government which kept the country in the disastrous world war. Henceforth, throngs of people uttered their names together—“Lenin and Trotsky.” As a member of the Bolshevik-led Military Revolutionary Committee, Trotsky played a decisive role in the insurrection in Petrograd (formerly St. Petersburg), events he would later chronicle in his famed History of the Russian Revolution. The following March, he negotiated the punitive Treaty of Brest-Litovsk forced on the Bolsheviks by Imperial Germany.  In the Russian Civil War (1918-1921), he organized and led the Red Army to an impressive victory over counterrevolutionary forces.
Trotsky also witnessed the tremendous setbacks of the early 1920s to revolutionary hopes. Under the New Economic Policy (NEP) set in motion by Lenin in 1921, the Bolsheviks had to concentrate on economic recovery after the severe wartime measures. The working class had been ravaged by three years of civil war. Many workers who survived the conflict had moved into administrative positions in the Soviet government or relocated to the countryside. Internationally, the USSR stood alone. The proletarian revolution Trotsky had expected to spread and take hold elsewhere had been stymied.  The radical Left underwent terrible defeats in 1919 in Germany and Hungary. There was the “Red Scare” in the United States in the same period. Benito Mussolini, a former socialist, acquired power in Rome in 1922 and his Fascist dictatorship became a fierce enemy of the Bolsheviks. More defeats soon followed in Germany, Estonia, and Bulgaria in 1923-25.
After Lenin died in January 1924, the question arose immediately about who would be the next leader of the Union of Soviet Socialist Republics. Trotsky was one of the most recognizable figures associated with the October Revolution—admired, hated, and emulated within and outside the USSR.  Although history rightly remembers Joseph Stalin as Trotsky’s chief rival and later mortal enemy, in the early 1920s Stalin passed unnoticed by many observers. He had been a “barely perceptible shadow,” as Trotsky put it. One of the classic histories of the Bolshevik Revolution, Ten Days That Shook the World, written by the American radical, John Reed, hardly mentions Stalin. Gregori Zinoviev and Lev Kamenev, not Stalin, emerged as Trotsky’s principal opponents in the immediate aftermath of Lenin’s death. These two men, who had been with Lenin for years, felt threatened by Trotsky’s popularity and his military record. A mistake, fateful for all three, though, had already been made. In 1922, Lenin, appreciating his organizational talents, chose Stalin for the position of General Secretary of the Communist Party. This gave him authority over party membership and appointments. Stalin quickly accrued enormous power and influence in the party over the next few years. Once Lenin, who, in his last months, sorely regretted his choice of Stalin, was no longer in the picture, Stalin sided with Zinoviev and Kamenev in their opposition to Trotsky.
As Trotsky later recognized, Stalin took advantage of the situation not only to appoint his own people but also to advance his own ideas about the future of the USSR. In 1924, he introduced the notion of “socialism in one country.” A socialist society could be built, Stalin contended, in the Soviet Union alone, regardless of the international context. The concept appealed to many Bolsheviks confronting the isolation of the globe’s only Marxist state.  Stalin went on to directly counter this idea to Trotsky’s emphasis on world revolution. Thanks to Stalin, “Trotskyism” soon became a term of opprobrium for elitism, factionalism, and a lack of connectedness to the masses of workers and peasants.   During the mid-1920s, Trotsky responded to these developments by calling for a restoration of workers’ democracy within the Communist Party. While he had advocated centralization during the Civil War, he had done so out of necessity. As the de facto leader of what became known as the Left Opposition, Trotsky assailed the growing bureaucratization of political life, the retreat from the old ideal of revolutionary internationalism, and the transformation of Marxism into “Marxism-Leninism,” a dogma not to be questioned. He gathered many supporters such as Karl Radek, Christian Rakovsky, and Victor Serge. Further support came from unexpected quarters. After Stalin maneuvered them out of positions of authority, Kamenev and Zinoviev threw in their lot with Trotsky in 1926. This Joint Opposition, never the most robust alliance, did not hold. Young “activists” violently broke up Opposition meetings with methods reminiscent of Mussolini’s Fascist squads. Stalin, wielding his power like a club, expelled Trotsky and his followers from the party in late 1927. Prophetically, Trotsky denounced Stalin as the “gravedigger of the Revolution.” Sent into “internal exile” in Kazakhstan for a year, he was then deported to Turkey in February 1929.    
In Prinkipo, a suburb of Istanbul, Trotsky wrote his autobiography, My Life. In that book is this remarkable description of Stalin, by then the sole ruler of the Soviet Union. He is gifted with practicality, a strong will, and persistence in carrying out his aims. His political horizon is restricted, his theoretical equipment primitive. His work of compilation, The Foundations of Leninism, in which he made an attempt to pay tribute to the theoretical traditions of the party, is full of sophomoric errors. His ignorance of foreign languages compels him to follow the political life of other countries at second-hand. His mind is stubbornly empirical and devoid of creative imagination. To the leading group of the party (in the wide circles he was not known at all) he always seemed a man destined to play second and third fiddle. And the fact that today he is playing first is not so much a summing up of the man as it is of this transitional period of political backsliding in the country.
This period was not to be nearly as “transitional” as Trotsky believed. With his opponents removed, Stalin enacted the collectivization of agriculture and state-directed industrialization, programs once championed by the Left Opposition, but now brutally implemented with a staggering toll of lives. He was not yet ready, though, to implement, to quote Trotsky, the “physical liquidation of the old revolutionaries, known to the whole world.” Stalin would bide his time for a number of years. And he could do so while watching his enemy live a refugee’s existence.  
Trotsky did not hesitate to label the Stalin dictatorship “totalitarian,” a concept still relatively new in political thought.  Thus, Stalinism, the counterrevolutionary system and ideology Stalin represented, preoccupied him. In this form of totalitarianism, a bureaucracy, a privileged caste, at the top of which Stalin perched like an absolute monarch, lorded it over the working class. Trotsky likened Stalinist domination to “Thermidor,” the term used to denote the end of the radical phase of the French Revolution and the shift to reactionary politics. As late as 1933, he thought, however, the Soviet system could be reformed by working through the structures of the Communist Party. The Left Opposition might dislodge Stalin from within without directly challenging state power. Trotsky held to this position until Adolf Hitler became chancellor of Germany in January 1933. Germany was a country with a modern urban, industrial society he had long regarded as vital to the prospects for socialism. Trotsky decried the impact of Stalin’s policies in this catastrophe. The Soviet leadership had tied the hands of the German Communist Party and hindered a united front against the Nazi Party by construing moderate socialists as the real threat. Subsequently, Hitler crushed the mighty German workers’ movement with hardly a fight.  This disaster forced a profound shift in Trotsky’s thinking. After Hitler took power, Trotsky concluded that reform of the Stalin regime had to be abandoned. Ousting Stalin by working through the channels of the Communist Party was no longer possible.  This much more radical perspective culminated in his 1936 The Revolution Betrayed.  Proletarian revolt would have to topple Stalin and the bureaucracy. This revolution, Trotsky made clear, would resemble the European upheavals of 1830 and 1848 more than the October Revolution. It would be a political revolution, not a social one. Collective ownership and control of the means of production (e.g. land, factories, mines, shipyards, oilfields), railways, and banks, as well as the planned economy, would remain. Trotsky’s designation of the USSR as a “degenerated workers’ state” highlighted his conviction that Stalin had betrayed and degraded the original, liberatory aspects of the Bolshevik Revolution. Still, much could be salvaged from the damage done by Stalinism.
The vision Trotsky held of political institutions in a liberated, post-Stalin USSR may surprise some. He called for free elections, freedom of criticism, and freedom of the press. While the Communist Party would benefit most from this open atmosphere, it would no longer possess a monopoly on power. As long as political parties did not try to restore capitalism, they could operate, recruit, and compete for power.  Stalin’s downfall would also signal new life for the trade unions. Trotsky imagined a restored involvement of workers in economic policy. Science and the arts might flourish once more. The state, no longer bound to the calamitous Stalinist policies, could return to the satisfaction of workers’ needs, like housing.  Stratification would yield to the reinvigorated aim of “socialist equality.” Youth, in whom Trotsky placed so much hope, “will receive the opportunity to breathe freely, criticize, make mistakes, and grow up.”   These thoughts Trotsky put to paper only months before he would be compelled to move again. For eight years, Trotsky traversed what he called a “planet without a visa,” a planet torn apart by the worst economic crisis in the history of capitalism. Since Stalin expelled him and Natalia from the USSR, the beleaguered revolutionaries had found temporary sanctuary in Turkey, France, and Norway. Granted refuge by the leftist Cardénas government of Mexico, their arrival in Coyoácan in January 1937 was greeted with derision and menace by the country’s pro-Stalin Communist Party.
Stalin not only hunted Trotsky but anyone close to him from country to country. In Barcelona, in June 1937, his assassins abducted Trotsky’s former collaborator, Andrés Nin, a leader in the POUM (Workers’ Party of Marxist Unity), the organization of militants made famous by George Orwell’s Homage to Catalonia. Nin disappeared at a critical moment in the Spanish revolutionaries’ struggle against Francisco Franco, never to been seen again.  Thirteen months later, in Paris, Rudolf Klement, who had once worked as Trotsky’s secretary, sat down for breakfast. Klement was kidnapped, presumably by GPU agents. They seized him and left his food on the table untouched.  A few weeks after he vanished, a body, missing its head and legs, washed up on the Seine.  It was not enough to just kill Klement; decapitation and dismemberment were required to incite extra terror.
Stalin’s agents also infiltrated the circle around Trotsky’s son, Leon Sedov. Despite a difficult relationship with his father, Leon worked tirelessly for him in Paris. He communicated with Left Oppositionists still holding on inside Russia, edited the Bulletin of the Opposition, the most significant forum for Trotsky’s analyses of the contemporary world, and wrote an exposé of the Show Trials then taking place in the USSR. Mark Zborowski, Ukrainian-born and known to Trotsky’s supporters under the false name “Étienne,” soon worked his way into Sedov’s circle. Zborowski became Sedov’s personal assistant, helping with his correspondence and eventually taking care of the publication of the Bulletin. Thanks to “Étienne,” the GPU could count on seeing many of the articles from the latter before they even appeared in print. And Zborowski delivered to them vital information about Sedov’s health. When Sedov checked himself into a private clinic in Paris run by Russian emigres complaining of an appendicitis, the Soviets knew. He died there under mysterious circumstances in February 1938, five months before Klement disappeared.  To this day, the cause of death has not been conclusively determined. In a moving tribute to his son, Trotsky told of the terrible grief he and Natalia felt. “Together with our boy has died everything that still remained young within us.” Their other son, Sergei Sedov, had remained in Russia after his parents’ expulsion and always kept politics at arm’s length. That did not save him. He vanished and, it is believed, was shot in October 1937.  
This systematic killing overlapped with the monstrosity of Stalin’s Show Trials. These abhorrent mockeries of justice had their roots in the murder of Sergey Kirov, Stalin’s party boss in Leningrad. Kirov was gunned down in December 1934. Likely, Stalin himself was responsible for the assassination. The murder gave him the pretext for systematically and publicly purging the Communist Party. As the most visible aspect of the Purges, the Show Trials started with the Trial of the Sixteen in August 1936.  Old Bolsheviks, such as Zinoviev and Kamenev, stood accused of conspiring against the Soviet government. Shockingly, they confessed, confessed to submitting to Trotsky’s demands to assassinate Stalin and several of his subordinates. Following their death sentences, several successor trials ensued through 1938. The “physical liquidation of old revolutionaries, known to the whole world” was at hand. Trotsky knew that a combination of torture, threats to family members, and promises of freedom, if confessions were given, allowed the travesties to occur. When he read the infamous sentence uttered by Stalin’s Prosecutor-General, Andrey Vyshinsky—“I demand that these dogs gone mad should be shot—every one of them!”—Trotsky knew this was no idle threat.
Vyshinsky’s words became murderous reality in the USSR in the late 1930s and '40s. The violence swept away both supporters and opponents of Stalin and Stalinism. Radek and Rakovsky, former allies of Trotsky who later submitted to Stalin, were killed. So, too, was Nikolai Bukharin, one of Bolshevism’s leading theoreticians, a sharp critic of Trotsky and the Left Opposition, and a onetime backer of Stalin. Others were murdered in labor camps, the infamous Gulags, or in prisons. Among the thousands of victims were the Marxist economic thinker, Isaak Ilich Rubin, and the great historian of the Left and former director of The Marx-Engels Institute, David Ryazanov. Isaac Babel, whom Trotsky once termed the “most talented of our younger writers,” confessed to working as a spy and terrorist mastermind for Trotsky. The secret police put him to death in January 1940.  In this period, the Soviet Union was perhaps the most dangerous place in the world for independent-thinking Marxists, an astounding thing to say, given the records of the fascist regimes. For their contributions to the butchery, Stalin rewarded Genrikh Yagoda and Nikolai Yezhov, chiefs of the GPU during these years, by having them shot.
From the Show Trials, ever more outlandish tales about Trotsky were spun. The stories relayed by the accused placed him at the center of a massive, worldwide anti-Soviet conspiracy. Turning his calls for an anti-Stalin revolution against him, Vyshinsky pilloried Trotsky, the inveterate adversary of fascism, as the master fascist, as the string-puller and puppet-master. Besides links to the Gestapo, Soviet investigators claimed to have uncovered Trotsky’s connections to Mussolini, the government of Imperial Japan, and the capitalist democracies. Reminiscent of Nazi anti-Semitic theories, “Trotskyism” metamorphosed into a truly demonic apparition during the Show Trials. Yet Trotsky fought back vigorously.
Countering the way Stalin’s handpicked historians distorted the Soviet past, Trotsky had already authored The Stalin School of Falsification. His adherents, many of whom by this point referred to him, with affection, as the “Old Man,” founded the Fourth International outside of Paris in September 1938. Its aim was to provide a revolutionary alternative to the Moscow-led Third or Communist International (Comintern). This Fourth International would bolster radical, anti-Stalinist working-class parties and unions around the world. When it came to repudiating the preposterous charges raised in the Show Trials, he received considerable help. Frida Kahlo, with whom Trotsky had an affair in 1937, and Diego Rivera were his tireless defenders in Mexico City. In the United States, a Committee for the Defense of Leon Trotsky formed. Similar organizations were founded elsewhere. The American Committee set up a Commission of Inquiry, chaired by John Dewey, the famous Pragmatist philosopher. Only one of the members, Alfred Rosmer, a syndicalist and early supporter of the October Revolution, could be described as a Trotsky supporter. Traveling to the Mexican capital, the Commission held thirteen sessions in April 1937. Trotsky, speaking in his quite imperfect English, responded to every accusation leveled by the Stalinists. He cast a powerful impression on those present, including the liberal Dewey, no admirer of his politics. In September 1937, the Commission issued its findings, clearing Trotsky of all the charges.  
The following years were dark, awful times for Trotsky, Natalia, and their inner circle. Losing two sons and innumerable comrades and friends to Stalin did not break his spirit, but the losses threw a shadow over everything he had done.  With the Japanese in China, Hitler moving into Austria, and threatening Czechoslovakia, and Mussolini dreaming of a  Roman Empire in the Mediterranean, the prospect of a new world war soon overtook him. Almost a year before it started, Trotsky spoke of an impending Second World War as a “new slaughter which is about to drown our whole planet in blood.” Trotsky had good reason to utter such things. And he knew that Stalin’s response to German expansion in Eastern Europe would be critical. Following the Munich Agreement of September 1938, Trotsky expected the Soviet government to seek an agreement with Hitler. Stalin’s 1937-38 purge of the Red Army, including some of its most capable commanders, like Mikhail Tukhachevsky, had so seriously weakened the USSR that a military confrontation with Nazi Germany had to be avoided at all costs. Whatever anti-Nazi sentiments issued from the Kremlin, Trotsky thought, were not worth the paper they were written on. In the aftermath of the Show Trials, he believed an even more important reason would drive Stalin to come to an agreement with Berlin: survival. The Stalin regime was too despotic and unpopular to weather the storm of total war. According to Trotsky, a settlement with Nazi Germany might secure some stability for the dictatorship.    
When Vyacheslav Molotov, the Soviet foreign minister, and Joachim von Ribbentrop, his German counterpart, signed a Non-Aggression Pact between the two nations on August 23, 1939, Trotsky was scarcely surprised. Earlier that year, he had declared that Stalin’s name will be a “byword for the uttermost limits of human baseness.”  This damning statement received confirmation with Stalin’s next move—dividing up Poland with Hitler.
Trotsky’s struggle against Stalin entered a new and final phase with the start of World War II just a week later. In a steady stream of articles and interviews, he condemned the role of the Soviet Union, a state that, at least in its rhetoric, had sided with the colonized against imperialism. The betrayal of the principles of Red October had reached a new level of treachery. Perhaps Stalin, Trotsky surmised, now seemed content with partitioning Eastern Europe with the German fascists. Whatever the motives, he dubbed Stalin Hitler’s “quartermaster,” a lackey who reacted to his senior partner’s moves.    
The Soviet attack on Finland in November 1939, the beginning of the Winter War, made him wonder how far Stalin was willing to go to create a sphere of interest for himself. While he again damned Soviet aggression, Trotsky, at the same time, despised Marshal Mannerheim, the right-wing Finnish leader rallying his people. Still, Trotsky, true to his Marxism, hoped that “sovietization” in Poland and Finland might free workers and peasants in both countries from the dominance of capitalists and landlords. Yet socialism, he realized, ultimately could not be built on the tips of the Red Army’s bayonets.
This was a huge dilemma for Trotsky. How could one support social revolution in areas under Soviet control without giving any ground on his anti-Stalinism? An even bigger problem posed itself. What if Hitler repudiated the pact and attacked the USSR? Trotsky had no doubt Hitler would do so at the earliest opportunity. His answer was absolutely unequivocal. Socialists and workers everywhere must rally to the defense of the Soviet Union. The achievements of the Bolshevik Revolution had to be defended.
This position, which alienated many of his adherents, coexisted with another claim—the new world war would mean the end of the Stalin regime. Trotsky predicted that the workers and peasants of the USSR, their revolutionary energies revitalized, would put an end to the Stalinist bureaucracy. The revolution he outlined in The Revolution Betrayed would itself form part of a gigantic wave of revolutionism engulfing the Axis powers and the capitalist democracies. Like Stalin, Hitler and Mussolini would meet the severe justice of the proletariat. Trotsky argued that capitalism, stricken for a decade by mass unemployment, immigration quotas, tariff wars, and the constriction of trade, had entered its “death agony” as well. Defiantly, he announced, “from the capitalist prisons and the concentration camps will come most of the leaders of tomorrow’s Europe and the world!” One outcome Trotsky envisioned resulting from this world revolution would be a Socialist United States of Europe. The latter, in turn, would form part of a World Federation of Socialist Republics.  This would have amounted to the greatest geopolitical revolution in human history with socialism becoming a truly global societal form.
Trotsky held to this radical perspective even as Stalin signed a commercial agreement with Hitler in February 1940, then seized Bessarabia and Bukovina from Romania, and annexed Lithuania, Latvia, and Estonia. He clung to it as his own health deteriorated and, as he had long feared, Stalin’s assassins closed in on him.  At the end of February, Trotsky wrote a final testament, fearing death was near. “Life is beautiful,” he said. “Let the future generations cleanse it of all evil, oppression and violence, and enjoy it to the full.” Three months later, radical evil appeared very much alive and on the move.
On May 1, a day long associated with the Left and labor militancy, 20,000 Mexican Communists marched in the capital and shouted: “Out with Trotsky!” Trotsky and Natalia had already assumed their lives were in jeopardy. With its electrified wires, alarms, and enforced doors, their house in Coyoácan looked more like a fortress than a home. As Trotsky tried from afar to keep pace with Hitler’s invasion of France and the Low Countries, launched on May 10, a plot to kill him took shape. It was led by the painter David Alfaro Siqueiros, once a friend of Rivera, but now a convinced Stalinist. On the night of May 23, Siqueiros’s men broke into the home and fired over 200 shots. Miraculously, Trotsky and Natalia survived. So did their grandson, Esteban Volkov, who had been living with them.     Trotsky proclaimed in defiance, “in the annals of history Stalin’s name will forever be recorded with the infamous mark of Cain.” When the May attempt failed, the GPU decided to go with Mercader. In August, after delays and missteps, he fulfilled his deadly mission. Among the papers next to where Trotsky struggled against his assassin was a long, unfinished manuscript, a biography of Stalin he penned to expose his enemy. The blood spilled in the study confirmed what was etched in ink on the book’s pages. Indeed, with Trotsky’s murder, Stalin demonstrated his most terrifying talent. He was a hangman whose noose could reach across oceans.   In retrospect, it is astonishing just how confident were Trotsky and his supporters like Victor Serge, Isaac Deutscher, and James Cannon in a coming proletarian revolution that would sweep away the Stalin regime. Trotsky’s expectation that World War II would lead to the toppling of Stalin and the restoration of a true workers’ state in the U.S.S.R. never, of course, materialized. In fact, the victory of the Red Army during the “Great Patriotic War” against the Axis states only solidified Stalin’s rule. For many, Marxism became irrevocably defined by and identified with Stalinism. Victory did not mean in this case, though, validity for the system Stalin molded. Trotsky’s critiques of Stalin the person and Stalinism the phenomenon remind us of that.
~
by Jason Dawsey · September 12, 2018.
0 notes
pamphletstoinspire · 7 years ago
Photo
Tumblr media
Fundamental Theorem of Calculus, from Math 121 Clark Univ.
[Feynman] "Do you know calculus?"
[Wouk] "I admitted that I didn't"
[Feynman] "You had better learn it...It's the language God talks."
Herman Wouk, converstion with Richard Feynman in The Language God Talks, p.5
"What is your number?" My grandson, Gabriel (age 2), on meeting someone.
"If you ask how such things can occur, seek the answer in God’s grace, not in doctrine; in the longing of the will, not in the understanding; in the sighs of prayer, not in research; seek the bridegroom not the teacher; God and not man " St. Bonaventure, The Journey of the Mind to God.
IS REALITY ALTOGETHER MATHEMATICAL?
In his very fine book, Is God a Mathematician?, Mario Livio gives a good history of mathematics and its foundational applications to science.  He also discusses whether mathematics is a Platonic ideal or is a construction of the human mind -- i.e. is mathematics "discovered" or "invented"? But he does not address the question posed in his title, which I propose to do in this post.  I'll also discuss some related arguments by physicists and philosophers that reality is mathematics (see references).
Now it goes without saying (although I will say it), that if God is omniscient, he knows everything and therefore, perforce, must know all mathematics. These propositions do not, however, require that reality is altogether mathematical, as suggested by Max Tegmark in his book, Our Mathematical Universe.  If reality is altogether mathematical, then everything can be quantified, represented by numbers or properties that can put into correspondence with numbers.  Is this so?
I invite the reader to suggest things that cannot be quantified by numbers.  Here's my list of a few such:
self-awareness, consciousness ("Cogito, ergo sum")
moments of communion with God, The Holy Spirit, Jesus
love of another
shame
anger
pain
happiness
joy
feelings aroused by nature
feelings aroused by music
feelings aroused by intellectual discovery
the literary excellence of a poem, a short story, a novel
boredom on reading blog posts dealing with the reality of mathematics
etc...
Now psychologists might say that most, if not all of the above can be quantified: just use the simple 1-5 scale as, in satisfaction response surveys. I claim that, unlike measuring the mass of a steel ball or its radius, such a procedure would not yield a universal measurement -- one person's "2" might well be another person's "4".  The qualia referred to in the above items are non-quantifiable, in the sense that a universally applicable measurement cannot be applied.
Let's explore just one of the above in more detail--feelings aroused by music.  In another post, God's Gift to Man -- the Transforming Power of Music, I've discussed the emotional and spiritual impact music has had on me, an effect which cannot be explained by mathematical relationships. The Pythagorean harmonies have no place in the dissonances of Bartok, Berlioz or even Mozart (Symphony #40, the Great G - Minor.
The inability of computation -- mathematics -- to emulate musical creativity is illustrated in a science-fiction story by James Blish, "A Work of Art".  In this tale "mind sculptors" of the future install a recreation of Richard Strauss in a non-musical volunteer.   The volunteer thinks of himself as a resurrected Strauss, composes an opera, and then realizes it uses old musical devices and is not creative.  At the concert in which the work is premiered, the volunteer knows that the resounding applause is for the mind sculptors, not for his musical work.
I AM NOT A NUMBER!" (Number 6, in "The Prisoner")
Let's turn to consciousness/self-awareness as an attribute of mathematical reality. Is the brain a "meat computer"-- can consciousness/self-awareness be programmed? In other words, does the self-aware brain operate by algorithms?  
The eminent mathematical physicist, Roger Penrose, has said no to this proposition in three books: "The Emperor's New Mind", "Shadows of the Mind", and "The Large, the Small, and Human Consciousness".  Penrose demonstrates, using Godel's Incompleteness Theorem and Turing's Halting Theorem, that the human can know the truth of a mathematical theorem even when a computer can not.
In "Shadows of the Mind" he gives four types of belief or non-belief in the possibility of Artificial Intelligence (AI), that self-aware intelligence can be programmed by some set of algorithms:
Consciousness is reducible to computation (the view of strong - AI proponents);
Consciousness can be simulated by a computer, but the simulation couldn't produce "real understanding" (John Searle's view);
Consciousness can't even be simulated by computer, but nevertheless has a scientific explanation (Penrose's own view)
Consciousness doesn't have a scientific explanation at all (the view of Thomas Nagel --see Mind and Cosmos)
Penrose is looking to a theory of quantum gravity to explain consciousness, The philosopher John Searle posits, as does Penrose, that consciousness has a scientific explanation , but that it will be an explanation in which consciousness is an "emergent" property of the brain's biochemistry and biophysics, much as wetness can be explained by theories of surface tension for water.  I have discussed Nagel's views (with links to other discussions) in the post which is linked to above.
A quantum computer (i.e. a scientist engaged in quantum computation), Scott Aaronson, has given an amusing and almost-convincing critique of Penrose's thesis in one of his Physics Lectures.  Some of his criticisms can be answered, particularly the one dealing with the Libet experiment, but I don't propose to engage that discussion here.  The critique relies primarily on two features: the activities of the mind are finite, not infinite; a computer which would be allowed to make mistakes would not be bound by Goedel's Theorem.
Finally, note that Max Tegmark does not show in "Our Mathematical Universe" how consciousness can be explained as a mathematical phenomenon.  He claims that this will be done in the future, but that seems to me very much like a scientism of the gaps.
IS MATHEMATICS QUASI-EMPIRICAL?
If mathematics (maybe I should upper-case that?) is to be the end - all and be - all of what is, then it seems reasonable to suppose that mathematics is complete in itself --there are no loose ends.  A primitive view of Goedel's and Turing's theorems suggest that this is not so.  The computer philosopher Gregory Chaitin reinforces this opinion in his books "The Limits of Mathematics" and "The Unknowable":
"What I think it all means is that mathematic is different from physics, but it's not that different. I think that math is quasi-empirical.  It's different from physics, but it's more a matter of degree than an all or nothing difference. I don't think mathematicians have a direct pipeline to God's thoughts, to absolute truth, while physics must always remain tentative and subject to revision [emphasis added]. Yes math is less tentative than physics, but they're both in the same boat, because they're both human activities, and to err is human." Gregory Chaitin, The Unknowable, pp 26-27
MY TAKE
I view mathematics, logic, reason as the foundations and the framework of the building in which we live.  There are essential additions--faith, religion, beauty, love, ... -- which are non-mathematical and above the bounds of logic.  As Pope St. John Paul II, said.  
"Faith and reason are like two wings on which the human spirit rises to the contemplation of truth; and God has placed in the human heart a desire to know the truth — in a word, to know himself — so that, by knowing and loving God, men and women may also come to the fullness of truth about themselves" Pope St. John Paul II, Fides et Ratio.
So my answer to the question in the title is, God is much more than a mathematician.
*I've gone back to my Jewish roots, inverted the title of a very good book, "Is God a Mathematician?" by Mario Livio, to make it a declarative sentence in form, but still a question (imagine a rising inflection at the end, as with a Yiddish or Pennsylvania Dutch accent); I've put one of the few Yiddish phrases I remember at the end.  If you don't know what "oy vey" means, I'll have to ask "what planet are you from?"
REFERENCES
Mario Livio, Is God a Mathematician?
Roger Penrose, The Large, the Small and Human Consciousness
John Searle, Minds, Brains and Programs.
Max Tegmark, Our Mathematical Universe.
Herman Wouk, The Language God Talks.
From a series of articles written by: Bob Kurland - a Catholic Scientist
1 note · View note
alimonytony · 4 years ago
Text
This is a repost from my rant forum on my site and since I'm interested only in it being read, rather than advertising or shilling it out for hits, I'm going to just repost it here. Before I do let me give you a quick introduction.
I finally registered on the SA forums a week or so ago having been a loyal reader for a couple of years. I don't like the new design of the site, I want to kill it with fire, I liked my good-old Web1.0 scrolly site, give it back please.
I'm posting this here because you lot are smart, and as such, I have no issues with you telling me that you think I'm wrong with this pseudo-rant. This may also be preaching to the choir a bit and for that I sincerely apologize. I hope at least you get some enjoyment out of this. If you're one of those fellows who likes to Digg, the article also has a Digg page, do with it as you see fit - http://digg.com/general_sciences/At...you_intelligent
With that said and done, here goes.
"It's novello time, and it's about religion, so unless you're ready to deal with some views you may not agree with, switch off now. In the words of Illidan "You are not prepared".
Let's get this out here right now. I'm a 23 year old law graduate with an IQ of 155. My political beliefs are liberal and leftist, I listen to Metal and I enjoy violent movies, books and videogames, and I've been a Christian since birth. Baptised, confirmed of my own free will, son of a priest (who are pretty notorious for rebelling against their father's religious beliefs just for the sake of it). I'm part of the Anglican Church of England, which is pretty much the result of Henry the 8th getting pissed off with the catholics not allowing him to divorce his wife(s). We're the state religion of the UK, if you could even say the UK has one, we're pretty liberal about most things, women priests, gay priests, homosexuals in general, sex before marriage, contraception, we take the modern, reasonable way of looking at all of them. At the end of the day, the Bible taught us about forgiveness and being excellent to one another. It had a bit of a round-about way of doing it but what do you expect for a 2000 year old book written entirely by clerical males? It's gonna be a bit out of date, you've gotta read it in context.
I have no problems with anyone's beliefs. Be whatever you want, as long as you believe (or don't believe) for a good reason. But here's what I really don't like, trend-atheism/trend-theism (also referred to as e-atheism, since it seems to be most prevelant in the domain of anonymous blogspammers and Digg-users).
In my late teens, I spent a long time thinking. Yeah, just sitting around and thinking, thinking about faith. Thinking about what it is that I believe in. Rationalizing the various conflicts and contradictions that faith presents us with, looking at the viewpoints of other faiths, or those with no faith at all, taking into account the new things we discover every day and factoring in the influence of science. Some people would claim that, if I had indeed done that, I'd have come to the conclusion, as an intellectual, rational thinker, that God does not exist. They would of course, be wrong.
My beliefs center around several factors. Firstly, it is important for us as human-beings to realize our own limits, and the limits of our understanding. Centuries ago we believed the world was flat. "The Bible told us so!", would be the first cry. Wrong, it really didn't. In the Old Testament, Job 26:7 explains that the earth is suspended in space, the obvious comparison being with the spherical sun and moon. The Old Testament, you remember that one? The one with the fiery bushes, the pillar's of salt, the cool plagues and such? Even that managed to get it right. There's a few more references as well to the 'round' earth (and before you say anything, flat is not a shape, it could have been a flat octagon for all they knew) but I'm not going to go into that yet. We've had computers for less than a century, powered flight for just over a century and of course our amazing horseless carriages. Genetics, electricity, nuclear-bombs, toaster-strudel, the world is in the palm of our hands! And it didn't take us too long did it?
Reality-check, we're still primitives. In the great scheme of things this technology is a mere blip on the historical radar. We've got an awful long way to go before we're able to dissect and understand the mysteries of the universe. We haven't even put a man on Mars yet, let alone left our solar system to find out what exactly is out there. How can it be that we have suddenly, so recently, become so arrogant as to believe we know more than we really do? The Laws of Science are written by man, based on our understanding of how things work. They are theories that, while prove true today, may be debunked by another amazing discovery tomorrow. Which leads onto my next point.
Name this quote "Any sufficiently advanced technology is indistinguishable from magic". Arthur C Clarke, physicist and author, smart fellow. It also hilights the point I'm making. Our understanding of the universe is peerless only amongst ourselves. We are not as smart as we think we are. Just as fire wowed the neanderthals, what would it take to wow us? What would make our jaws drop and our minds boggle? Well, any sufficiently advanced technology of course. And what is technology after-all? Man-made machines. The concept of technology is a human concept, a concept that may, in other parts of the universe, not even exist, replaced by something even more advanced than that, so advanced that we cannot comprehend it. Not surprising really as we mammals only use 10% of our brains.
So where am I going with this? Simple really, take yourself off of your high-horse, you, and the human race, is not as smart as it thinks it is. Now, open your mind a little, and let's explore some possibilities.
The definition of a God. Let us turn to the good book.
Wikipedia.
"God most commonly refers to the deity worshipped by followers of monotheistic and monolatrist religions, whom they believe to be the creator and ruler of the universe. Theologians have ascribed a variety of attributes to the various conceptions of God. The most common among these include omniscience, omnipotence, omnipresence, perfect goodness, divine simplicity, and eternal and necessary existence. God has also been conceived as being incorporeal, a personal being, the source of all moral obligation, and the "greatest conceivable existent"
Hmm, a tall order one might think. Could such a being exist? Some argue that logically, he could not, however, there is very little logic in denying the possibility that a being or beings of such power and advancement exist that they could indeed, be considered 'God' within our definition. That's not to say that God is a small green alien with a flying saucer and a phaser though that would give some of the overzealous fundamentalists something to sweat over, much to our amusement. But what is this God? A creator? Sure, we create. We create technology, we're getting to the stage of being able to create life in one form or another, using the basic building blocks of nature. Could it not be surmised therefore that it is entirely within the realms of possibility that someone or something created those building blocks? Like a programmer creates a new program, someone must have also created the coding language in which he created it. We scramble for answers. We come up with theories. Some believe in the beginning there was nothing, which exploded. Some believe a man in the sky created it everything in 6 days and then mooched around on the 7th. Which is valid?
Neither, and both. They attempt to apply meaning to something where meaning may, or may not exist. Creationism and the Big Bang are in that sense, as bad as each other. They are both merely attempts for us to explain the unexplainable. The Big Bang contradicts our laws of physics (something most catalyse an explosion, therefore something must have been there in the first place, where did that come from, at which point your brain melts). The Creation Story contradicts our laws of physics (Same reasons, who created God after all?). Everything we've so far managed to come up with, from the sublime to the ridiculous, the complex to the simplistic, it's an exercise in desperate straw-clutching. At the end of the day, we don't know jack.
And that's ok. Someone once said that the journey matters more than the destination, it's not the winning, it's the taking part, at least ya tried sport. These explanations of where it all comes from, be they ancient or modern all boil down to the same need. To know. Who'd have thunk it, we've got brains for a reason, and they rather like being used. Those neurons like to be fired, the little grey matter likes a little exercise every once in a while. Just as the Creation Story was a way to explain an unexplainable concept, so is the Big Bang theory. If one were to compare the human mind to a computer, try feeding the Big Bang theory to the medieval man, and it's like trying to shove Bioshock into a Commodore Vic20. Good luck. And what will our children's children's children's grandchildren's children think of our Big Bang theory? My money's on exactly the same thing.
So what am I trying to tell you, stop asking questions, stop looking for answers and just believe whatever the hell suits ya? Absolutely not. Believe whatever suits you, but question it, never stop thinking, never stop asking or learning. In this day and age it seems people are way too willing to believe, or not believe. Belief, or non-belief should be a life-long arduous process and it should end involuntarily, when you fall over dead. Someone (there's a lot of talkative someone's aren't there?) once said 'Never stop believing', I say, "Never stop asking yourself what you believe, and why".
It's time to criticize, so let me load port and starboard cannon and fire a volley at both atheists and theists alike. Believing, or not believing, does not make you intelligent. Smart people do not come to a conclusion on the basis of insubstantial evidence. Smart people do not mindlessly attack other people's beliefs just because they don't conform to their own. Smart people do not assume that their own rigid, poorly formed definitions of logic and faith, reason and belief are mutually exclusive and that if one exists, the other cannot. Smart people think outside the box, not pick fights with those poor souls trapped in it.
What makes you intelligent, is knowing why you believe what you believe. Knowing that you are but one mind, and knowing that at any time you could be proven wrong, only for that person to be proven wrong ad infinitum as we as a race advance.
I suppose you're waiting for my personal beliefs, waiting for this to be some kind of sermon, preaching why my God is better than your God, or non-God. You'll be waiting a long time, because it's not coming. My personal beliefs are just that, personal, they're mine, they belong to me. You cannot take them away from me, only I can. What I can give you though, are my opinions.
Right now shots are being fired. They're not physical shots, they're bullets and shells of ignorance and bigottry. And it's no one-sided battle let me tell you that much. Factionalized camps everywhere you can imagine. Atheists, Theists, Satanists, Christians, Republicans, Democrats, Capitalists, Communists, every group you can imagine, all shouting 'Your God/Non-God sucks, mine is better!'. These days, the internet's become their battleground. So much for sharing knowledge, we're sharing ignorance.
The bigottry and the condemnation has to stop. The sad thing is, I'm having to condemn the condemners. Isn't it lowsy how you generally have to be a hypocrite in order to make a point these days? Food for thought. We can look at the extremes and see the simplistic, secular vs sacred, trend-atheists vs fundamentalist evangelical christians, the most common stereotypes. But in reality, it's so much more complicated than that. It's this stereotyping and narrow-minded attitude that prevents us as a race from achieving the greatness we can. I could make as many decrees as I wanted till I was blue in the face, and I'm going to just to let off a little steam mind you,
"Trend-atheist Digg users, shove your agendas where the sun don't shine, refusing the possibility of a supreme-being does not make you a genius or a radical thinker, it makes you a bloody sheep hiding behind a cloak of anonymity"
"Evangelical Fundamentalist morons, get your overly simplistic, judgmental, dogmatic Crayola God out of my face, you have about as much understanding of the universe as a wet lettuce. That does not make you holy, pure, or guaranteed a private booth at the big game in the sky, it makes you a bloody sheep hiding behind a cloak of propaganda that you only believe because you're told to"
Wow, that feels good, I can understand why you internet-bound condemners like it so much. Gives you that warm, fuzzy feeling doesn't it? What, I'm not allowed to indulge in such a guilty pleasure every once in a while? Play fair Wink
Where's my conclusion? Hell if I know. Did you have the mistaken impression this was some carefully constructed plea for tolerance? Absolutely not, it's an angry slap in the face to my peers. Wake the hell up and use your brain, because my God/Non-god/Explosion/Man-in-the-sky/Vic20 gave you it for a reason.
TB.
0 notes
holytheoristtastemaker · 5 years ago
Quote
Key Takeaways The Java language has changed notably over the last 5 years Two major projects that are delivering that change - Valhalla and Amber - are still in flight Java has continued to maintain its core value of backwards compatibility Despite being 25 years old, there is still plenty of life left in the language and platform New technologies, such as Graal, are helping to keep Java at the forefront of programming languages Almost five years ago, I wrote an article outlining some feature ideas from other languages that I felt could be of benefit to Java. A lot has happened since then — at that time, Java 8 was the newly minted release, whereas the most recent version is now Java 14. Let’s take a look at each feature in turn and see what its current status is: whether it has been added to Java, is on the way, or is not currently planned for inclusion. Reified generics My original predictions ruled out reified generics. I did not foresee the ambition that Project Valhalla has for remaking the JVM from the ground up Project Valhalla’s major goals are: aligning JVM memory layout behavior with the cost model of modern hardware; extending generics to allow abstraction over all types, including primitives, values, and even void; and enabling existing libraries, especially the JDK, to compatibly evolve to fully take advantage of these features. Buried within this description is the loaded word "values", which has evolved into the feature that we know today as inline classes. Reified generics and primitive specialization have thus been subsumed into a much larger project that promises to fundamentally change the way that Java is written and executed. Despite the deep low-level changes that are being made, the goals of the project team include minimizing disruption to existing Java applications and providing an easy, opt-in approach for developers who use Valhalla capabilities in their own code. We should note that Valhalla is still very much a work in progress — and there is still no official roadmap for when it might be delivered. Verdict: ON THE WAY (as part of Project Valhalla) Unsigned arithmetic The possibility of supporting this feature has been repeatedly discussed over Java’s history, but there are a number of complexities involved in introducing it. For example, there is the question of how signedness should be represented in the Java type system, and whether it should be visible at JVM bytecode level or not. These issues have not reached any satisfactory consensus and so Java still does not contain unsigned arithmetic — and one notable aspect of Project Valhalla is that it does not include support for unsigned arithmetic. Verdict: NOT BEING CONSIDERED Long indices for arrays Java’s arrays are constrained in size by a simple fact of their design: they take an int as their index. This means that an array is limited to 2**31 elements (remembering that ints are signed), or roughly 2 billion entries. As originally envisaged, the idea of using a long instead of an int would allow developers to create and manipulate much larger arrays. However, since the original "Missing Features" article, the community’s focus in this area has shifted towards providing easy access to large arrays stored off-heap. There are several reasons for this — ease of interop with non-Java libraries (including machine learning and other number-heavy applications) is one important one. However, there are also questions about how useful large, on-heap arrays would even be. Huge, multi-gig arrays would have significant copy costs when moving in and out of the Java heap and could potentially cause serious headaches for the JVM’s garbage collector. For these reasons, large arrays are mainly thought of in the context of off-heap support, and the concept has been incorporated into features under active development within Project Panama. Verdict: ON THE WAY (as part of Project Panama) More expressive import syntax No serious attempts have been made to expand the scope of import syntax or to introduce type aliasing, even at the local (or file-scoped) level. Verdict: NOT BEING CONSIDERED Collection literals Static methods on interfaces were added in Java 9, and the collections were updated to include factory methods for collections. These play the role of collection literals in Java: var ls = List.of(1,2,3); As the factories are playing the role of literals, this change also introduced new implementations of the collection interfaces. These implementations are immutable, because to reuse the existing mutable collections (such as ArrayList) would have violated the programmer expectation that these values should behave as if they were literals. More intrusive solutions, such as directly introducing new literals into the language syntax, were not pursued. Verdict: DELIVERED (as factory methods) Algebraic data types Algebraic data types in Java are in the process of delivery. The feature consists of two major additions to the type system: records and sealed types as well as pattern matching, a substantial new piece of syntax. Java 14 delivers a preview version of two of these aspects — specifically, records, which in Java are essentially named tuples, and the initial components of pattern matching. The new features that make up the introductory pieces of pattern matching are the first form of pattern in Java: the instanceof pattern and a standardized version of switch expressions. The second of these is the scaffolding that will ultimately enable the introduction of general pattern matching, in a similar way to the match expressions with which Scala programmers may be familiar. There are still many more steps to take before this feature is fully delivered — records and patterns are still only in preview. Further JEPs, including JEP 375, which extends the instanceof pattern to allow deconstruction of records, are required to flesh out pattern matching as a whole. As of the arrival of Java 14, key JEPs — including both JEP 375 and JEP 360, which introduces sealed types — are not targeted for any specific Java version. Despite this lack of a concrete roadmap, it is likely that the entirety of the algebraic data types and pattern-matching mechanism could be delivered in standardized form in time for the next LTS release, which is Java 17 in September 2021. Verdict: ON THE WAY (as part of Project Amber) Structural typing Java’s type system has evolved somewhat since Java 8, but in practice there has been no significant move towards general structural typing. For example, when records were being designed, structural typing was explicitly rejected in favor of making records nominal types. This enforces the idea that the name that we give to a type has power and importance, that Java records are defined by more than just the number and types of their components. One minor place where something that resembles structural typing continues to be vaguely visible in Java is in Java’s non-denotable types. These are really just an extension of the example originally discussed in the 2015 piece. In that example, we construct something that looks like a structural type (Object + ) but can only use it within a single expression because there’s no denotable type that we can use as the type of a variable to assign the value to. Since Java 10, the language has had an extended form of type inference that uses var to reduce boilerplate in assignments. We are able to use this capability to extend the scope in which we may call additional methods defined on a type in this way. However, this is limited to the method in which the type inference occurs. The special type that var infers cannot be propogated across method boundaries precisely because it is non-denotable. In reality, these special cases are not true structural typing, and there is no intention of introducing it. The gravitational pull of Java’s design attraction to names and nominal typing is just too strong. Verdict: CONSIDERED BUT REJECTED Dynamic call sites The last five years have seen a large expansion in the use of invokedynamic, although only within the JDK and a small number of technically sophisticated external libraries. It is still the case that "the Java language does not have a keyword or other construct to create general-purpose invokedynamic call sites" just as the original article stated. The suggestion that the Dynalink library could be expanded to take up this role never came to pass, and, in fact, the Nashorn Javascript implementation that produced Dynalink is now itself considered deprecated and could be omitted from Java 15 (although Dynalink itself will remain). Those libraries that do make use of dynamic call sites do so via the MethodHandles API that, while slightly easier to use in 2020, is still out of reach of most Java programmers. The difficulty of finding a balance between flexible dynamic invocation that does not cause too many runtime problems and compelling language-level usage has proved to be too great, at least for the time being. Verdict: NOT BEING CONSIDERED What Did I Miss? The last 5 years have also seen the emergence of a number of projects and trends that I did not predict or address in the original article. The biggest of these are perhaps: Extent and scope of Project Valhalla Project Amber New Release Model for Java Graal and GraalVM Rise of Kotlin To pick out a couple of examples: Although Project Valhalla was started in 2014, it has gained momentum and expanded enormously over the intervening years. It has become the most ambitious and biggest change that Java has ever seen. Valhalla promises to modify every aspect of the Java platform - from the way that memory and values are represented within the VM, through the type system and generics, and up into the library level and language syntax. This project aims to align Java with the current and future state of hardware and to offer performance and other improvements that simply cannot be addressed piecemeal. Instead, Valhalla aims to move the state of the Java platform from its current position (which we can think of as a local maxima) to a place that is much better suited to be the basis of a platform for the coming decades. Original research is always hard to predict, and so it is perhaps unsurprising that the rise of Graal also caught me by surprise. The basic idea is, like many other compelling concepts, very simple once you’ve grasped it. Java’s usual JIT compiler is written in C++ code and executes on special dedicated threads within the JVM. Graal starts from a simple idea: What if, instead, the JIT compiler was written in Java and the compiler threads were actually running a second copy of the Java interpreter? The interpreted-mode JIT compiler would be as capable as the current JIT - so it could compile any class file to machine code. We should expect that it would be slower than the existing C++ compiler, but it would not differ in its behaviour, only in performance. Taking this idea to its logical conclusion, this means that the interpreted-mode JIT could compile the class files that make up the JIT itself. Once it had warmed up, it could replace itself and run at the same performance as the original, native JIT. This intruiging idea turns out to be the starting point for a major class of new technologies, including native compilation of Java (AOT) as well as a new polyglot virtual machine (GraalVM) capable of running many different languages. Conclusions The Java platform has grown in sophistication over the last five years, with many new language and VM features delivered or in flight. Assuming current trends continue, the community is likely to be most interested in the set of standardized features that will be available in Java 17 (due in September 2021). This will be a very different Java than the one that existed in 2014 when we made our original observations, and while some features have been delivered it seems clear that certain others are unlikely ever to arrive and still others have been realized in a very different form. We look forward to seeing what the next five years will bring for the Java language and platform, and especially the aspects that we are unable to predict right now.
http://damianfallon.blogspot.com/2020/04/javas-missing-features-5-years-later.html
0 notes
tak4hir0 · 6 years ago
Link
In the last few months, I have learned a lot about modern JavaScript and CSS development with a local toolchain powered by Node 8, Webpack 4, and Babel 7. As part of that, I am doing my second “re-introduction to JavaScript”. I first learned JS in 1998. Then relearned it from scratch in 2008, in the era of “The Good Parts”, Firebug, jQuery, IE6-compatibility, and eventually the then-fledgling Node ecosystem. In that era, I wrote one of the most widely deployed pieces of JavaScript on the web, and maintained a system powered by it. Now I am re-learning it in the era of ECMAScript (ES6 / ES2017), transpilation, formal support for libraries and modularization, and, mobile web performance with things like PWAs, code splitting, and WebWorkers / ServiceWorkers. I am also pleasantly surprised that JS, via the ECMAScript standard and Babel, has evolved into a pretty good programming language, all things considered. To solidify all this stuff, I am using webpack/babel to build all static assets for a simple Python/Flask web app, which ends up deployed as a multi-hundred-page static site. One weekend, I ported everything from Flask-Assets to webpack, and to play around with ES2017 features, as well as explore the Sass CSS preprocessor and some D3.js examples. And boy, did that send me down a yak shaving rabbit hole. Let’s start from the beginning! JavaScript in 1998 I first learned JavaScript in 1998. It’s hard to believe that this was 20 years — two decades! — ago. This post will chart the two decades since — covering JavaScript in 1998, 2008, and 2018. The focus of the article will be on “modern” JavaScript, as of my understanding in 2018/2019, and, in particular, what a non-JavaScript programmer should know about how the language — and its associated tooling and runtime — have dramatically evolved. If you’re the kind of programmer who thinks, “I code in Python/Java/Ruby/C/whatever, and thus I have no use for JavaScript and don’t need to know anything about it”, you’re wrong, and I’ll describe why. Incidentally, you were right in 1998, you could get by without it in 2008, and you are dead wrong in 2018. Further, if you are the kind of programmer who thinks, “JavaScript is a tire fire I’d rather avoid because it lacks basic infrastructure we take for granted in ‘real’ programming languages”, then you are also wrong. I’ll be able to show you how “not taking JavaScript seriously” is the 2018 equivalent of the skeptical 2008-era programmer not taking Python or Ruby seriously. JavaScript is a language that is not only here to stay, but has already — and will continue to — take over the world in several important areas. To be a serious programmer, you’ll have to know JavaScript’s Modern and Good Parts — as well as some other server-side language, like Python, Ruby, Go, Elixir, Clojure, Java, and so on. But, though you can swap one backend language for the other, you can’t avoid JavaScript: it’s pervasive in every kind of web deployment scenario. And, the developer tooling has fully caught up to your expectations. JavaScript during The Browser Wars Browsers were a harsh environment to target for development; not only was Internet adoption low and not only were internet connections slow, but the browser wars — mainly between Netscape and Microsoft — were creating a lot of confusion. Netscape Navigator 4 was released in 1997, and Internet Explorer 5 was released in 1998. The web was still trying to make sense of HTML and CSS; after all, CSS1 had only been released a year earlier. In this environment, the definitive web development book of the era was “JavaScript: The Definitive Guide”, which weighed in at over 500 pages. Note that, in 1998, the most widely used programming languages were C, C++, and Java, as well as Microsoft Visual Basic for Windows programmers. So expectations about “what programming was” were framed mostly around these languages. In this sense, JavaScript was quite, quite different. There was no compiler. There was no debugger (at least, not very good ones). There was no way to “run a JavaScript program”, except to write scripts in your browser, and see if they ran. Development tools for JavaScript were still primitive or inexistent. There was certainly not much of an open source community around JS; to figure out how to do things, you would typically “view source” on other people’s websites. Plus, much of the discussion in the programming community of web developers was how JavaScript represented a compatibility and security nightmare. Not only differing implementations across browsers, but also many ways for you to compromise the security of your web application by relying upon JavaScript too directly. A common security bug in that era was to validate forms with JavaScript, but still allow invalid (and insecure) values to be passed to the server. Or, to password-protect a system, but in a way that inspection of JavaScript code could itself crack access to that system. Combined with the lack of a proper development environment, the “real web programmers” used JavaScript as nothing more than a last resort — a way to inject a little bit of client-side code and logic into pages where doing it server-side made no sense. I remember one of the most common use cases for JavaScript at the time was nothing more than changing an image upon hover, as a stylistic effect, or implementing a basic on-hover menu on a complex multi-tab form. These days, these tasks can be achieved with vanilla CSS, but, at the time, JavaScript DOM manipulation was your only option. JavaScript in 2008 Fast forward 10 years. In 2008, Douglas Crockford released the book, “JavaScript: The Good Parts”. By using a language subsetting approach, Crockford pointed out that, not only was JavaScript not a bad language, it was actually a good language, well-designed, with certain key features that made it stand out vs competitors. Around this time, several JavaScript libraries were becoming popular, notably jQuery, Prototype, YUI, and Dojo. These libraries attempted to provide JavaScript with something it was missing: a cross-browser compatibility layer and programming model for doing dynamic manipulation of pages inside the browser, and especially for a new model of JavaScript programming that was emerging, with the moniker AJAX. This was the beginning of the trend of rich internet applications, “dynamic” web apps, single-page applications, and the like. JavaScript’s Tooling Leaps The developer tooling for JavaScript also took some important leaps. In 2006, the Firefox team released Firebug, a JavaScript and DOM debugger for Firefox, which was then one of the world’s most popular web browsers, and open source. Two years later, Google would make the first release of Google Chrome, which bundled some developer tooling. Around the same time that Chrome was released, Google also released V8, the JavaScript engine that was embedded inside of Chrome. That marked the first time that the world had seen a full-fledged, performant open source implementation of the JavaScript language that was not completely tied to a browser. Firefox’s JS engine, SpiderMonkey, was part of its source tree, but was not necessarily marketed to be modularized and used outside the context of the Firefox browser. I remember that aside from Crockford’s work on identifying the good parts of JavaScript, and aside from the new (and better) developer tooling, a specific essay on Mozilla’s website helped me re-appreciate the language, and throw away my 1998 conception. That article was called “A Reintroduction to JavaScript”. It showed how JavaScript was actually a real programming language, once you got past the tooling bumps. A little under-powered in its standard library, thus you had to rely upon frameworks (like jQuery) to give you some tools, and little micro-libraries beyond that. A year after reading that essay, I wrote my own about JavaScript, which was called “Real, Functional Programs with JavaScript” (archived PDF here). It described how JavaScript was, quite surprisingly, more of a functional language than Java 8 or Python 2.7. And that with a little focus on understanding the functional core, really good programs could be written. I recently converted this essay into a set of instructional slides with the name, “Lambda JavaScript” (archived notes here), which I now use to teach new designers/developers the language from first principles. But, let’s return to history. Only a year after the release of Chrome, in 2009, we saw the first release of NodeJS, which took the V8 JavaScript engine and embedded it into a server-side environment, which could be used to experiment with JavaScript on a REPL, to write scripts, and even to write HTTP servers on a performant event loop. People began to experiment with command-line tools written in JavaScript, and with web frameworks written in JavaScript. It was at this point that the pace of development in the JavaScript community accelerated. In 2010, npm — the Node Package Manager — was released, and it and its package registry quickly grew to represent the full JavaScript open source community. Over the next few years, the browser vendors of Mozilla, Google, Apple, and Microsoft engaged in the “JavaScript Engine Wars”, with each developing SpiderMonkey, V8, Nitro, and Chakra to new heights. Meanwhile, NodeJS and V8 became the “standard” JS engine running on developer’s machines from the command line. Though developers still had to target old “ECMAScript 3” browsers (such as IE6), and thus had to write restrained JavaScript code, the “evergreen” (auto-updating) browsers from Mozilla, Google, and Apple gained support for ECMAScript 5 and beyond, and mobile web browsing went into ascendancy, thus making Chrome and Safari dominant in market share especially on smartphones. I remember in 2012, I gave a presentation at a local tech conference entitled, “Writing Real Programs… with JavaScript!?”. The “!?” punctuation was intentional. That was the general zeitgeist I remember in a room full of developers: that is, “is writing real programs with JavaScript… actually possible!?” It’s funny to review those slides as a historical relic. I spent the first half of the talk convincing the audience that JavaScript’s functional core was actually pretty good. And then I spent the second half convincing them that NodeJS might… it just might… create a developer tooling ecosystem and standard library for JavaScript. There are also a few funny “detour” slides in there around things like Comet vs Ajax, a debate that didn’t really amount to much (but it’s good to remind one of fashion trends in tech). Zooming ahead a few years, in all of this noise of web 2.0, cloud, and mobile, we finally reached “mobilegeddon” in 2015, where mobile traffic surpassed desktop traffic, and we also saw several desktop operating systems move to a mostly-evergreen model, such as Windows 10, Mac OS X, and ChromeOS. As a result, as early as 2015 — but certainly by 2018 — JavaScript became the most widely deployed and performant programming language with “built-in support” on almost every desktop and mobile computer in the world. In other words, if you wanted your code to be “write once, run everywhere” in 2015 or so (but even as far back as 2009), your best option was JavaScript. Well, that’s even more true today. The solid choice for widespread distribution of your code continues to be JavaScript. As Crockford predicted in 2008: “It is better to be lucky than smart.” JavaScript in 2018-2019 In 2018-2019, several things have changed about the JavaScript community. Development tools are no longer fledgling, but are, instead, mature. There are built-in development tools in all of Safari, Firefox, and Chrome browsers (and the Firebug project is mostly deprecated). There are also ways to debug mobile web browsers using mobile development tools. NodeJS and npm are mature projects that are shared infrastructure for the whole JavaScript community. What’s more, JavaScript, as a language, has evolved. It’s no longer just the kernel language we knew in 1998, nor the “good parts” we knew in 2008, but instead the “modern parts” of JavaScript include several new language features that go by the name “ES6” (ECMAScript v6) or “ES2017” (ECMAScript 2017 Edition), and beyond. Some concepts in HTML have evolved, such as HTML5 video and audio elements. CSS, too, has evolved, with the CSS2 and CSS3 specifications being ratified and widely adopted. JSON has all but entirely replaced XML as an interchange format and is, of course, JavaScript-based. The V8 engine has also gotten a ton of performance-oriented development. It is now a JIT compiled language with speedy startup times and speedy near-native performance for CPU-bound blocks. Modern web performance techniques are almost entirely based on a speedy JavaScript engine and the ability to script different elements of a web application’s loading approach. The language itself has become comfortable with something akin to “compiler” and “command line” toolchains you might find in Python, Ruby, C, and Java communities. In lieu of a JavaScript “compiler”, we have node, JavaScript unit testing frameworks like Mocha/Jest, as well as eslint and babel for syntax checking. (More on this later.) In lieu of a “debugger”, we have the devtools built into our favorite browser, like Chrome or Firefox. This includes rich debuggers, REPLs/consoles, and visual inspection tools. Scriptable remote connections to a node environment or a browser process (via new tools like Puppeteer) further close the development loop. To use JavaScript in 2018/2019, therefore, is to adopt a system that has achieved 2008-era maturity that you would see in programming ecosystems like Python, Ruby, and Java. But, in many ways, JavaScript has surpassed those communities. For example, where Python 3’s reference implementation, CPython, is certainly fast as far as dynamic languages go, JavaScript’s reference implementation, V8, is optimized by JIT and hotspot optimization techniques that are only found in much more mature programming communities, such as Java’s (which received millions of dollars of commercial support in applied/advanced compiler techniques in the Sun era). That means that unmodified, hotspot JavaScript code can be optimized into native code automatically by the Node runtime and by browsers such as Chrome. Whereas Java and C users may still have debates about where, exactly, open source projects should publish their releases, that issue is settled in the JavaScript community: it’s npm, which operates similarly to PyPI and pip in the Python community. Some essential developer tooling issues were only recently settled. For example, because modern JavaScript (such as code written using ES2017 features) needs to target older browsers, a “transpilation” toolchain is necessary, to compile ES2017 code into ES3 or ES5 JavaScript code, suitable for older browsers. Because “old JavaScript” is a Turing complete, functional programming language, we know we can translate almost any new “syntactic sugar” to the old language, and, indeed, the designers of the new language features are being careful to only introduce syntax that can be safely transpiled. What this means, however, is that to do JavaScript development “The Modern Way”, while adopting its new features, you simply must use a local transpiler toolchain. The community standard for this at the moment is known as babel, and it’s likely to remain the community standard well into the future. Another issue that plagued 2008-era JavaScript was build tooling and modularization. In the 2008-2012 era, ad-hoc tools like make were used to concatenate JavaScript modules together, and often Java-based tools such as Google’s Closure Compiler or UglifyJS were used to assemble JavaScript projects into modules that could be included onto pages. In 2012, the Grunt tool was released as a JavaScript build tool, written atop NodeJS, runnable from the command-line, and configurable using a JavaScript “Gruntfile”. A whole slew of build tools similar to this were released in the period, creating a whole lot of code churn and confusion. Thankfully, today, Single Page Application frameworks like React have largely solved this problem, with the ascendancy of webpack and the reliance on npm run-script. Today, the webpack community has come up with a sane approach to JavaScript modularization that relies upon the modern JS support for modules, and then development-time tooling, provided mainly through the webpack CLI tool, allow for local development and production builds. This can all be scripted and wired together with simple npm run-script commands. And since webpack can be itself installed by npm, this keeps the entire development stack self-contained in a way that doesn’t feel too dissimilar from what you might enjoy with lein in Clojure or python/pip in Python. Yes, it has taken 20 years, but JavaScript is now just as viable a choice for your backend and CLI tooling projects as Python was in the past. And, for web frontends, it’s your only choice. So, if you are a programmer who cares, at all, about distribution of your code to users, it’s time to care about JavaScript! In a future post, I plan to go even deeper on JavaScript, covering: How to structure your first “modern” JavaScript project Using Modern JS with Python’s Flask web framework for simple static sites Understanding webpack, and why it’s important Modules, modules, modules. Why JS modules matter. Understanding babel, and why it’s important Transpilation, and how to think about evolving JS/ES features and “compilation” Using eslint for bonus points Using sourcemaps for debugging Using console.assert and console for debugging Production minification with uglify Building automated tests with jest Understanding the value of Chrome scripting and puppeteer Want me to keep going? Let me know via @amontalenti on Twitter.
0 notes
sherazhussain · 6 years ago
Text
The Crucible: Dangerous and Primitive HIV Criminalization Laws Are Claiming More and More Victims: One Group Is Doing Something About It – CELIA FARBER – The Truth Barrier
By Celia Farber
“We expect this trend to continue. While the AIDS industry has convinced Americans of the alleged AIDS epidemic, prosecutors have a hard time finding anyone willing to promote their propaganda under penalty of perjury.”
CLARK BAKER, OMSJ
The 2011 Nobel laureate poet Tomas Tranströmer wrote a poem called “To Friends Behind A Frontier,” to close friends living in (then) GDR:
1
I wrote so meagerly to you. But what I couldn’t write swelled and swelled like an old-fashioned airship and drifted away at last through the night sky.
2
The letter is now at the censor’s. He lights his lamp. In the glare my words fly up like monkeys on a grille, rattle it, stop and bare their teeth.
3
Read between the lines. We’ll meet in 200 years When the microphones in the hotel walls are forgotten And can at last sleep, become trilobites.
The poem reflects the feeling of sadness of witnessing capture, in this case, Western Europeans wishing they could liberate friends in East Germany. “Read between the lines. We’ll meet in 200 years, when the microphones in the hotel walls are forgotten, and can at last sleep, become trilobites,” captures the cycle of mania, hunt, persecution, inside deranged political systems—all from nothing and for nothing. But one day, the poet assures us, the microphones will become fossils; The friends will be free again, and can “meet.”
For some reason, these stories have not gotten told. Not even by those of us who have devoted years to chronicling the horrors wrought by the never proven HIV “theory.” We got mired in the ego-driven correctomania of “the science”—while the sheer human consequences of the paradigm were overlooked, or tuned out. In utter silence, away from sound and sight, forgotten by all the world, hundreds of people in this country and around the world have been serving time for HIV “crimes” which seem culled from the 16th century, at a time before court room justice was invented.
An accusation. That’s all it takes. An angry ex lover, often, turning the tables on a former partner, claiming he or she did not disclose HIV status prior to sex.
Welcome to the world of HIV criminalization—the logical and chilling final station of barbarism in an already upside down world. This is where the psychic prison of a positive HIV test meets actual prison walls, where the brutality, madness and sheer stupidity of the HIV state is fully realized– where the violence upon the marked people is given unbridled reign.
It is a slippery slope, a perpetual Crucible, a place where the accusation seals the deal, and if you are not a witch, well, you would float. We need not have any sympathy. As POZ magazine founder Sean Strub, who is an advocate against HIV criminalization has said, “All HIV positive gay men are one disgruntled lover away from a jail sentence.”
In the United States, 37 of our states have statutes on the books which criminalize HIV transmission, and non-disclosure of HIV status. Sentences for those declared guilty easily run as high as 25 years or more. One of the Pennsylvania statutes designates a minimum sentence of life imprisonment, and in one state, Nebraska, the crime can carry the death penalty.
States which do not criminalize HIV transmission are: Arizona, Connecticut, Delaware, Hawaii, Maine, Nebraska, New Mexico, New York, Oregon, Texas, and Wyoming.
HIV criminalization laws began in earnest in 1990 when the federal Ryan White CARE act passed. This law mandated that states criminalize intentional transmission of HIV to be eligible for millions of dollars in funding for treatment and prevention programs. Some states took it a step further than federal law required, defining intentional transmission as failing to disclose positive status to a sexual partner.  The second time the act was reauthorized, in 2000, the requirement that states must criminalize intentional transmission was removed. These quietly woven draconian laws gained foothold also around the world at this time, most popular, not surprisingly, in Northern and Western Europe.
The United States leads the world in prosecutions as well as convictions of HIV antibody positive people, accused of non-disclosure. Some 913 have been prosecuted to date. The second most enthusiastic country is Canada, where there have been 146 prosecutions and 79 convictions. Next is Austria, 55 prosecuted, 55 convicted, followed by Sweden: 50 prosecuted, 50 convicted. Germany, Australia, Norway, Denmark are all close behind.
Here is a random sampling of countries that have a “zero” attached to this—no prosecutions, no convictions: Russia, Philippines, Romania, Latvia, Chad, Mali, Armenia (along with dozens more.)
Point being: Criminalization of HIV positive people only took off in the US and Canada, and in the star-posts of European enlightened post-war democracy. Apparently, in some countries, mothers can now be criminally charged if they pass “HIV” to their babies. This Orwellian society is precisely the nightmare, I must stress, that HIV dissidents have been warning against for many years. It must be dismantled, before any human being on this planet is safe again. (Safe from this.)
You hear of HIV criminal cases only rarely in the media, when local health departments have leaked that a “monster” (male, generally, black, generally) “tried to infect,” several hundred women with “AIDS,” such as the case of Ghanaian national Henry Assumang, soon on trial in the UK.
Absorbing and refracting deep wells of racism, xenophobia, and anti-immigration sentiment, the frothy language of a typical newspaper account of an HIV case:
“An illegal immigrant may have infected hundreds of women with HIV in a string of one-night-stands, it has emerged. The infected Jamaican reveler prowled nightclubs to pick up women and then spent almost a year unchecked in hospital where he looked for sex with vulnerable patients.
“Health officials have written to more than 400 women to warn them they might have the deadly virus after having unprotected sex with him. The immigrant, who arrived in the UK on a visitor’s visa in 2002, has admitted he cannot remember how many woman he has slept with.”  —The Daily Mail, UK
Vapors, hysteria, moral panic, nothing concrete—all this contributes to the perfect storm for human rights disasters that both sides of the HIV war agree must end. [This may be the only point both sides agree on, in 27 years.]
Though it would appear that the “HIV establishment” (hundreds of pharmaceutically-funded organizations, foundations, activists and lobbyists) laid the groundwork for this nightmare scenario which has for a quarter century relentlessly been pounding away at inaccurate, distorted and wildly inflated HIV statistics and scare scenarios—they too are now trying to slam the brakes on.
Sean Strub, founder of POZ magazine, has made a deeply moving eight -minute documentary that illuminates the deep injustice and plain horror of the situation.
“HIV is not a crime” says the film in the opening sequence, summing up the core sentiment, and referring to a “viral underclass” that is created by the enactment of HIV criminalization laws.
Now, the dissenting, or “denialist” position is that all persons who have been branded as “having HIV” by the numerous testing technologies, are part of a “viral underclass” that they (the denialists) would wish to liberate. This would be done by way of a stark and, for the first time, objective scientific look at what we mean by “HIV,” which resides inside the hockey net we call the HIV test.
What does “HIV” signify?
A slew of tests that suggest presence, because the slew of tests defined its presence when they were developed. But presence of what, and more importantly, where?
In human blood? Or in the hockey net. (The tests)
If a person is found not to be carrying a lethal weapon, can they have ever been a threat to another, for brandishing said lethal weapon?
Stop for a moment, ponder with me. We speak of crimes of bodies, bodily fluids, humans being retro-fitted with lethal weaponry in their sexual fluids, and thrown in prison because they supposedly tried to kill another person with no weapon other than their body. If that is not science fiction I don’t know what is.
The plot thickens.
In 2009, a newly-minted non-profit investigation agency calling itself OMSJ – The Office of Medical and Scientific Justice – was founded by retired LAPD officer and investigator Clark Baker, who entered the fray by way of the 2008 Semmelweis Society International Whistleblower Conference. Comprised of detectives, scientists, medical doctors and attorneys, OMSJ has become a kind of Amnesty International of medical abuses, seeking redress to crimes by an industry that has paid $10 billion (since 2009) to settle thousands of claims related to the illegal marketing of products that kill or injure 2-4 million Americans annually. OMSJ founder Clark Baker always refers to the pharmaceutical industry as a “criminal enterprise.” Detested by industry-funded organizations for what it calls its “denialist” leanings, OMSJ is scoring victories in a legal realm that is just about as dark as dark gets: HIV criminalization.
Fighting not for the “rights” of HIV positive criminally accused people but for the liberation of them from the system, OMSJ has developed a simple strategy: Rather than question the softly defined rights of HIV positive people, they go after the alchemy of tests and presumptions that fuels a pandemic of misdiagnoses. In this way, they force prosecutors to prove that the person they wish to put behind bars in indeed infected with HIV.
“We’ve had scores of victories so far,” says OMSJ CEO Clark Baker. “In all, HIV-related charges were withdrawn, dismissed, or plea-bargained in 49 cases.”
More than 100 cases have crossed OMSJ’s windshield since 2009.  “In about 1/3 of those cases,” says Baker, “the attorneys find one reason or another to ignore what we offer. That narrative involves variations of a young black man who dates white girls in a town where the children of defense attorneys, prosecutors and judges attend the same ice cream socials and school proms.”
Says Baker, “Lynch mobs are a tough sell.”
In another 1/3 of cases, the defense expresses interest but, for one reason or another, convinces their clients to plead guilty to ten years or more.
In some states, prosecutors only need to prove that the defendant didn’t disclose – even when prosecutors make no effort to prove that an infection exists.
Says Baker: “Our successes were typically won by attorneys who coordinated their defense strategy with us.”
Asked to put a fine point on how exactly OMSJ sets these condemned people free, or helps to, Baker says: “We review the medical records, which is often nothing more than a health department report that alleges a positive test result. But when we dig deeper, we find that “Doctor A” received a positive HIV test result from an unreliable laboratory that he didn’t understand. ‘A’ refers the patient to “Doctor B,” who assumes that ‘A’ conducted a competent diagnosis. So like outfielders who think someone else will catch the ball, the patient is soon prescribed a deadly psychotropic drug like Atripla that will eventually sicken and kill the patient. But unlike most negligent homicides, the killer signs the death certificate.”
The makers of Atripla, Baker points out, Gilead Sciences and Bristol-Myers Squibb (BMS), currently face multistate lawsuits that allege $100,000 kickbacks to clinicians who unnecessarily prescribe their drugs to healthy patients. ProPublica has found almost a billion dollars in such kickbacks, which doesn’t include what wasn’t disclosed.
“These are facts that prosecutors, health departments and doctors don’t want aired before a jury,” says Baker:
“As you can imagine, Doctors ‘A’ and ‘B’ are reluctant to admit their incompetence, which is why the prosecution’s case collapses.  Understandably, our work threatens the credibility of the US Government, drug and healthcare industries, which is why state attorneys general are being pressured to end the prosecutions in their states.  Industry-funded activists at LAMBDA, Treatment Action Group and HIV Law & Policy are cynically using the humanitarian pretext to end prosecutions before too many taxpayers learn of the scam that specifically targets black and gay Americans.”
Baker says, “Based upon the cases we have examined since 2009, there is strong evidence that 95% of all criminal HIV convictions in the United States involve individuals who were never infected with HIV. The greater implication is that millions of allegedly HIV+ people around the world were probably never at risk of dying from HIV.”
Baker believes that he has a “unification theory” that would resolve the differences between the Duesberg position (retrovirus exists but is harmless) with the Perth position (no proof exists for existence of a retrovirus.) (Details of this will emerge over time, and not in this article.)
In an editorial for the journal Haematologica Dr. Etienne de Harven, Professor Emeritus of Pathology, and pioneer of electron microscopy at Sloan Kettering in the 1950s, wrote, on the “fundamental failure” of HIV research:
… The specificity of viral markers depends on the success of virus isolation and purification. Without fully demonstrated success in virus isolation and purification, identification of viral markers is extremely hazardous and can lead to severe misinterpretation of clinical data. A dramatic illustration of this is to be found in current HIV research. In this case, the virus (HIV) has never been properly isolated, since sedimentation in sucrose gradient at the density of 1.16 g/mL was erroneously considered to yield pure virus, systematically ignoring that material sedimenting at that density contains large amounts of cell debris and microvesicles. Therefore, proteins and nucleic acids found in such 1.16 bands are very likely to be of cellular origin and cannot be used as viral markers. Such a faulty methodology has had extremely serious consequences, i.e. the world-wide use of HIV-antibody tests, Elisa and Western Blot, which dangerously lack specificity, as demonstrated in 1993 by Papadopulos et al., in Australia.
Etienne de Harven, MD
Professor Emeritus of Pathology,
University of Toronto, Ontario, Canada
Viral etiology of human cancer: a historical perspective

Haematologica – Journal of Hematology;
1999; 84:385-389
HIV test kits have stunning disclaimers in the package inserts, stating in different ways over and over that HIV tests are not proof of infection with HIV—a case first made by a group of scientists in Perth, Australia, in a 1993 paper in BioTechnology.
Here is but one of countless examples:
Detection of antibodies to HIV-1 does not constitute a diagnosis of Acquired Immune Deficiency Syndrome (AIDS). A NEGATIVE BLOT is not a guarantee that the causative agent for AIDS is not present. Although a blot POSITIVE for antibodies to HIV-1 indicates infection with the virus, a diagnosis of AIDS can only be made clinically if a person meets the case definition of AIDS established by the Center for Disease Control (USA), the World Health Organization or other relevant authorities…
[HIV blot 2:2 Western Blot Assay, MP Diagnostics
source: Alberta Reappraising AIDS Society]
OMSJ’s team includes Dr. Rodney Richards, formerly of Amgen, who developed one of the first HIV test kits before defecting from the company altogether, in anguish over how misleading “HIV tests” really were.
Says Baker:
“Based upon the 100 plus cases we have been involved in since 2009, there is strong evidence that 95% of all criminal HIV convictions in the United States involve individuals who were never infected with HIV.”
In fact, if you press him further, in the highly esoteric but critical discussion of what exactly is wrong with the HIV test and why and how it does not demonstrate “infection,” or, for that matter, what is meant by “infection,” Baker goes further:
“There is now strong evidence that none of our clients were ever infected with HIV.”
Yes, I know. WHAT?
But let’s leave that Ostrich Egg to gestate a bit, and hatch when it is good and ready. This will take time.
Baker points out that health clinics profit from every positive HIV test they get.
“They call it the Magic Effect,” says Baker:
“When Magic Johnson retired from basketball, clinics reported that phone calls and testing skyrocketed. Health department busybodies routinely grill patients about their sex lives and partners. Then either call the partners or police about the alleged exposure. When police make an arrest, they leak the story to the media, creating the desired fear and hysteria. Sally’s on the evening news and you think, we dated last year – I should get tested. Before you know it, the health department goons are warning you that they will contact the police unless you provide the names and phone numbers of your friends and employers.”
Doctors, meanwhile, also benefit financially in a rather shocking way:
“Doctors are permitted to ignore FDA warning labels about the unreliability of HIV tests,” says Baker. “Many of these doctors accept kickbacks and trips to Tahiti from HIV drug manufacturers for unnecessarily prescribing deadly drugs to their asymptomatic patients.”
It gets worse.
Multi-million dollar AIDS organizations that purport to serve the needs of HIV positive individuals, are now actively seeking to block them from knowing about OMSJ’s legal triumphs on behalf of the HIV accused.
On the website for Positive Justice Project: Guidance for People Living With HIV Who Are Threatened With, or, are Facing Criminal Prosecution for HIV Nondisclosure or Exposure, there are 15 “things you can do as damage control,” And one of them is an open warning to avoid OMSJ.
Never naming OMSJ directly, the group warns:
AVOID PEOPLE WHO SAY THEY CAN HELP YOU BECAUSE HIV DOES NOT CAUSE AIDS:
You may be approached by people who claim they want to help you because an HIV test does not prove that you have HIV or AIDS, or because HIV is not harmful to others. AIDS “denialists” — people who do not believe that HIV is the cause of AIDS and that all AIDS treatments are toxic — frequently approach defendants in cases that have received press coverage, and may be interested in using your case to advance their cause. These people should be avoided because they likely will hurt rather than help your case.
Baker, for his part, says: “Organizations like HIV Law & Policy, Treatment Action Group and LAMBDA have never attempted to prove that their clients are not infected with HIV. The Obama administration, UNAIDS and the UN are trying to dissuade Western governments from prosecuting these cases using the pretext of human rights. It was in 2009 when we started winning these cases that they suddenly had their Come-to-Jesus moment.  I would work with any of them to free an unjustly convicted human being. But they won’t work with OMSJ. Our door is open any time they change their mind and decide to prioritize their clients freedom over their own personal ideology.”
After Yvonne Nicole Andrews left an ex-boyfriend who had repeatedly assaulted her, he turned around and falsely accused her of exposing a total of four men to HIV, none of whom she had ever met. [All four tested negative.] Soon, before she knew what was happening, Ms. Andrews found herself in a Florida prison cell facing a sixty-year sentence. Despite hospital records documenting the injuries, which included a badly sprained neck, severe concussions, and more, and despite overt statements that he planned to kill her, her ex used the laws to become make her the criminal. He was never charged.
The blond, soft-spoken mother of two had languished in county jail for several months when OMSJ contacted her attorney and prepared her defense.
Reached at home just weeks after her release, Andrews told The Truth Barrier:
“OMSJ’s attorney saw me while I was in prison, and explained everything. Then, after my attorney and I understood and we all became a team, they went to work. They were amazingly fast and effective. OMSJ broke down the prosecution in no time at all and educated them about the scientific side. These people wanted to put me away for sixty years. My kids would have had no mom. Instead I was out after nine months.”
“We had a similar case in 2011,” said Baker, “when a rapist accused his victim of HIV exposure. After questioning the victim’s doctor in a pretrial hearing, prosecutors withdrew all charges against our client who, if convicted, could have received a 30-year prison sentence and a deportation order.”
Andrews’ voice breaks when she mentions Clark Baker:
“Mr. Baker to me is heaven sent. He is my angel. I will be in debt to that man for the rest of my life. I can’t even express the feelings I felt when they came and told me. Words cannot express it.”
“I want my story to be told,” she continues,” because I want everybody to know the truth. I had no idea you could destroy somebody’s life just like that, just accusations, no proof, just hearsay. No idea. I was in prison with a girl who was part of a drug deal gone bad… she ran over a man and crushed his skull. She was in for murder. Her maximum was 15 years. My maximum was 60 years.”
She draws a deep sigh.
“Yes, m’aam.”
She continues:
“I sat down to write Mr. Baker a thank you letter, but after a week of mulling it over, I still could not find the words. The team at OMSJ, those people are working for a higher power. For all the people who are innocent and don’t deserve any of this, but nobody hears them. Nobody wants to hear it. One day it will all come out. The truth will come out.”
Ms. Andrews tells me she is delighted and grateful to God to have gotten home for Thanksgiving, and looks forward to spending Christmas with her family. But life is no Hollywood ending for these people. They have uniformly been exposed in local media, both as HIV positive and as criminals. It doesn’t go away when the charges are dropped. Their collapsed lives don’t miraculously reform.  They are classified felons and can’t work. “I can’t even get a job in a local store,” says Andrews. “But I have faith in God. I know he has his hands on me. I want to help others.”
Ms. Andrews has never taken HIV medication, nor had any symptoms of any kind. During her 9 1/2 months in jail, she spent most of her time studying the Bible. “I’ll be honest with you, when I was in jail I felt safe,” she says. Her ex had (and these are just some of the incidents:) thrown her off a porch, body-slammed her, pounded her head to the point of spraining her neck and giving her a severe concussion, threatened to kill her, stalked her, and more. “Now I am out. He knows I’m out. My family and I want to leave this area. I pray morning, noon and night.”
Take off HIV/AIDS goggles and put on domestic abuse and misogyny goggles, in order to keep seeing, and keep hearing. Her ex was found to be taking anti-HIV medications, which was discovered once when he was pulled over, and the medicine was in his car. He used to tell Andrews: “I’m sorry you’ll never be with another man.”
“He was just so insecure and controlling. He beat me physically, abused me mentally and verbally. This man has done everything he could to destroy me. In his mind, it was either death or prison.”
Andrews ex had a special trick: Mid beatings, he would call 911, and accuse her of domestic abuse. He is 6 ft 4 inches, 280 lbs, and works in construction. On one occasion, he had another girlfriend jump on Andrews and assault her, while he made the 911 call, and commented: “Don’t worry about it. She’s going to prison.”
“I will keep going strong,” says Andrews. “I am not going to give up. I want everybody to know the truth. My heart is just filled with joy. I am so ready to do this. When you’re in a situation like this, you feel like you’re the only person this has ever happened to. But there are so many. And they all need help. I was incarcerated, and as of now, I am a convicted felon. But Clark Baker is working with me to find new life after this. I have to start my life over. I have the utmost respect for that man and his organization. I would do anything in the world for him.”
“I thought this was something I would never talk to anybody about. But I am relieved it’s being written and being put out there. Because I am finding out that it’s not just me, there are other people in this situation. And they deserve to be heard. A lot of people don’t know who to turn to, for help. I was shunned by everybody. When they told me I was HIV positive–when they tell you that, a part of you just dies. It’s just gone.”
Andrews was told she was positive in 2008.
She continues:
“But now I have gotten educated and I think they are inaccurate in their testing. I have never had symptoms, and never taken medication. They tried, but I didn’t take it because I wasn’t sick. I’m as healthy as a horse.”
I asked her how it felt when she left prison, and came home, on Nov 15, this year.
“Elation, tears,” she says:
“I can’t even express the feelings that I felt. I got to come home to my family. I made it home for Thanksgiving, and I have so much to be thankful for. Christmas will be even greater. I am just so happy.  We need to let people know that there are people that do care about them, and they’re not alone.”
***
————————————————————————————————————– Additional research for this article by Mark Harris.
For more information about OMSJ, to inquire about a legal situation, or to make a donation, go to http://www.omsj.org
The Truth Barrier has traveled as far as Stavanger Norway to report on this unfolding story. Stay tuned for Part Two, coming soon.
Source
http://truthbarrier.com/2012/12/22/the-crucible-dangerous-and-primitive-hiv-criminalization-laws-are-claiming-more-and-more-victims-one-group-doing-is-something-about-it/
0 notes
itbeatsbookmarks · 7 years ago
Link
(Via: Hacker News)
May 31, 2018
nullprogram.com/blog/2018/05/31/
Emacs 26.1 was recently released. As you would expect from a major release, it comes with lots of new goodies. Being a bit of an Emacs Lisp enthusiast, the two most interesting new features are generators (iter) and native threads (thread).
Generators
Generators are one of those cool language features that provide a lot of power at a small implementation cost. They’re like a constrained form of coroutines, but, unlike coroutines, they’re typically built entirely on top of first-class functions (e.g. closures). This means no additional run-time support is needed in order to add generators to a language. The only complication is the changes the compiler. Generators are not compiled the same way as normal functions despite looking so similar.
What’s perhaps coolest of all about lisp-family generators, including Emacs Lisp, is that the compiler component can be implemented entirely with macros. The compiler need not be modified at all, making generators no more than a library, and not actually part of the language. That’s exactly how they’ve been implemented in Emacs Lisp (emacs-lisp/generator.el).
So what’s a generator? It’s a function that returns an iterator object. When an iterator object is invoked (e.g. iter-next) it evaluates the body of the generator. Each iterator is independent. What makes them unusual (and useful) is that the evaluation is paused in the middle of the body to return a value, saving all the internal state in the iterator. Normally pausing in the middle of functions isn’t possible, which is what requires the special compiler support.
Emacs Lisp generators appear to be most closely modeled after Python generators, though it also shares some similarities to JavaScript generators. What makes it most like Python is the use of signals for flow control — something I’m not personally enthused about. When a Python generator completes, it throws a StopItertion exception. In Emacs Lisp, it’s an iter-end-of-sequence signal. A signal is out-of-band and avoids the issue relying on some special in-band value to communicate the end of iteration.
In contrast, JavaScript’s solution is to return a “rich” object wrapping the actual yield value. This object has a done field that communicates whether iteration has completed. This avoids the use of exceptions for flow control, but the caller has to unpack the rich object.
Fortunately the flow control issue isn’t normally exposed to Emacs Lisp code. Most of the time you’ll use the iter-do macro or (my preference) the new cl-loop keyword iter-by.
To illustrate how a generator works, here’s a really simple iterator that iterates over a list:
(iter-defun walk (list) (while list (iter-yield (pop list))))
Here’s how it might be used:
(setf i (walk '(:a :b :c)) (iter-next i) ; => :a (iter-next i) ; => :b (iter-next i) ; => :c (iter-next i) ; error: iter-end-of-sequence
The iterator object itself is opaque and you shouldn’t rely on any part of its structure. That being said, I’m a firm believer that we should understand how things work underneath the hood so that we can make the most effective use of at them. No program should rely on the particulars of the iterator object internals for correctness, but a well-written program should employ them in a way that best exploits their expected implementation.
Currently iterator objects are closures, and iter-next invokes the closure with its own internal protocol. It asks the closure to return the next value (:next operation), and iter-close asks it to clean itself up (:close operation).
Since they’re just closures, another really cool thing about Emacs Lisp generators is that iterator objects are generally readable. That is, you can serialize them out with print and bring them back to life with read, even in another instance of Emacs. They exist independently of the original generator function. This will not work if one of the values captured in the iterator object is not readable (e.g. buffers).
How does pausing work? Well, one of other exciting new features of Emacs 26 is the introduction of a jump table opcode, switch. I’d lamented in the past that large cond and cl-case expressions could be a lot more efficient if Emacs’ byte code supported jump tables. It turns an O(n) sequence of comparisons into an O(1) lookup and jump. It’s essentially the perfect foundation for a generator since it can be used to jump straight back to the position where evaluation was paused.
Buuut, generators do not currently use jump tables. The generator library predates the new switch opcode, and, being independent of it, its author, Daniel Colascione, went with the best option at the time. Chunks of code between yields are packaged as individual closures. These closures are linked together a bit like nodes in a graph, creating a sort of state machine. To get the next value, the iterator object invokes the closure representing the next state.
I’ve manually macro expanded the walk generator above into a form that roughly resembles the expansion of iter-defun:
(defun walk (list) (let (state) (cl-flet* ((state-2 () (signal 'iter-end-of-sequence nil)) (state-1 () (prog1 (pop list) (when (null list) (setf state #'state-2)))) (state-0 () (if (null list) (state-2) (setf state #'state-1) (state-1)))) (setf state #'state-0) (lambda () (funcall state)))))
This omits the protocol I mentioned, and it doesn’t have yield results (values passed to the iterator). The actual expansion is a whole lot messier and less optimal than this, but hopefully my hand-rolled generator is illustrative enough. Without the protocol, this iterator is stepped using funcall rather than iter-next.
The state variable keeps track of where in the body of the generator this iterator is currently “paused.” Continuing the iterator is therefore just a matter of invoking the closure that represents this state. Each state closure may update state to point to a new part of the generator body. The terminal state is obviously state-2. Notice how state transitions occur around branches.
I had said generators can be implemented as a library in Emacs Lisp. Unfortunately theres a hole in this: unwind-protect. It’s not valid to yield inside an unwind-protect form. Unlike, say, a throw-catch, there’s no mechanism to trap an unwinding stack so that it can be restarted later. The state closure needs to return and fall through the unwind-protect.
A jump table version of the generator might look like the following. I’ve used cl-labels since it allows for recursion.
(defun walk (list) (let ((state 0)) (cl-labels ((closure () (cl-case state (0 (if (null list) (setf state 2) (setf state 1)) (closure)) (1 (prog1 (pop list) (when (null list) (setf state 2)))) (2 (signal 'iter-end-of-sequence nil))))) #'closure)))
When byte compiled on Emacs 26, that cl-case is turned into a jump table. This “switch” form is closer to how generators are implemented in other languages.
Iterator objects can share state between themselves if they close over a common environment (or, of course, use the same global variables).
(setf foo (let ((list '(:a :b :c))) (list (funcall (iter-lambda () (while list (iter-yield (pop list))))) (funcall (iter-lambda () (while list (iter-yield (pop list)))))))) (iter-next (nth 0 foo)) ; => :a (iter-next (nth 1 foo)) ; => :b (iter-next (nth 0 foo)) ; => :c
For years there has been a very crude way to “pause” a function and allow other functions to run: accept-process-output. It only works in the context of processes, but five years ago this was sufficient for me to build primitives on top of it. Unlike this old process function, generators do not block threads, including the user interface, which is really important.
Threads
Emacs 26 also bring us threads, which have been attached in a very bolted on fashion. It’s not much more than a subset of pthreads: shared memory threads, recursive mutexes, and condition variables. The interfaces look just like they do in pthreads, and there hasn’t been much done to integrate more naturally into the Emacs Lisp ecosystem.
This is also only the first step in bringing threading to Emacs Lisp. Right now there’s effectively a global interpreter lock (GIL), and threads only run one at a time cooperatively. Like with generators, the Python influence is obvious. In theory, sometime in the future this interpreter lock will be removed, making way for actual concurrency.
This is, again, where I think it’s useful to contrast with JavaScript, which was also initially designed to be single-threaded. Low-level threading primitives weren’t exposed — though mostly because JavaScript typically runs sandboxed and there’s no safe way to expose those primitives. Instead it got a web worker API that exposes concurrency at a much higher level, along with an efficient interface for thread coordination.
For Emacs Lisp, I’d prefer something safer, more like the JavaScript approach. Low-level pthreads are now a great way to wreck Emacs with deadlocks (with no C-g escape). Playing around with the new threading API for just a few days, I’ve already had to restart Emacs a bunch of times. Bugs in Emacs Lisp are normally a lot more forgiving.
One important detail that has been designed well is that dynamic bindings are thread-local. This is really essential for correct behavior. This is also an easy way to create thread-local storage (TLS): dynamically bind variables in the thread’s entrance function.
;;; -*- lexical-binding: t; -*- (defvar foo-counter-tls) (defvar foo-path-tls) (defun foo-make-thread (path) (make-thread (lambda () (let ((foo-counter-tls 0) (foo-name-tls path)) ...))))
However, cl-letf “bindings” are not thread-local, which makes this otherwise incredibly useful macro quite dangerous in the presence of threads. This is one way that the new threading API feels bolted on.
Building generators on threads
In my stack clashing article I showed a few different ways to add coroutine support to C. One method spawned per-coroutine threads, and coordinated using semaphores. With the new threads API in Emacs, it’s possible to do exactly the same thing.
Since generators are just a limited form of coroutines, this means threads offer another, very different way to implement them. The threads API doesn’t provide semaphores, but condition variables can fill in for them. To “pause” in the middle of the generator, just wait on a condition variable.
So, naturally, I just had to see if I could make it work. I call it a “thread iterator” or “thriter.” The API is very similar to iter:
https://github.com/skeeto/thriter
This is merely a proof of concept so don’t actually use this library for anything. These thread-based generators are about 5x slower than iter generators, and they’re a lot more heavy-weight, needing an entire thread per iterator object. This makes thriter-close all the more important. On the other hand, these generators have no problem yielding inside unwind-protect.
Originally this article was going to dive into the details of how these thread-iterators worked, but thriter turned out to be quite a bit more complicated than I anticipated, especially as I worked towards feature matching iter.
The gist of it is that each side of a next/yield transaction gets its own condition variable, but share a common mutex. Values are passed between the threads using slots on the iterator object. The side that isn’t currently running waits on a condition variable until the other side frees it, after which the releaser waits on its own condition variable for the result. This is similar to asynchronous requests in Emacs dynamic modules.
Rather than use signals to indicate completion, I modeled it after JavaScript generators. Iterators return a cons cell. The car indicates continuation and the cdr holds the yield result. To terminate an iterator early (thriter-close or garbage collection), thread-signal is used to essentially “cancel” the thread and knock it off the condition variable.
Since threads aren’t (and shouldn’t be) garbage collected, failing to run a thread-iterator to completion would normally cause a memory leak, as the thread sits there forever waiting on a “next” that will never come. To deal with this, there’s a finalizer is attached to the iterator object in such a way that it’s not visible to the thread. A lost iterator is eventually cleaned up by the garbage collector, but, as usual with finalizers, this is only a last resort.
The future of threads
This thread-iterator project was my initial, little experiment with Emacs Lisp threads, similar to why I connected a joystick to Emacs using a dynamic module. While I don’t expect the current thread API to go away, it’s not really suitable for general use in its raw form. Bugs in Emacs Lisp programs should virtually never bring down Emacs and require a restart. Outside of threads, the few situations that break this rule are very easy to avoid (and very obvious that something dangerous is happening). Dynamic modules are dangerous by necessity, but concurrency doesn’t have to be.
There really needs to be a safe, high-level API with clean thread isolation. Perhaps this higher-level API will eventually build on top of the low-level threading API.
0 notes
meralee727 · 7 years ago
Text
Tumblr media
Dumb characters are a television staple. Characters who just don’t always seem to have it together, whom you wonder how they manage to live, survive and basically not die. Characters that despite their intellectual deficiencies, we root for them to maybe figure out or not.
Back in 1983, Dr. Howard Gardner discovered that there were eight levels or eight different types of intelligence. Later, existential intelligence and moral intelligence were added and will be added to this blog to determine the ultimate truth behind two of my favorite television dumb guys–the characters, not the actors who play them ’cause I don’t know the actors who play them and that would just be mean even though I’m sure they’re lovely individuals.
Now, given my Bachelor of Arts in Media Studies and my Masters in both Marriage and Family Counseling and Elementary Education, I am basically an expert in my own head.
So who is smarter?
Subjects:
Joey Tribbiani
Tumblr media
Place of birth: Queens, New York
Age: 48
*While Friends ended in 2004, I am giving him the age he would likely be now, as It’s Always Sunny is still going and it’s just easier for me. 
Occupation:  Actor most notably for playing Dr. Drake Ramoray on Days of Our Lives
Vices: Food
Brief Background:
Joey Tribbiani is an Italian American, Caucasian male who grew up in a large family where he was the oldest and the only son. He has seven younger sisters whom he is close to and is very protective of. He has a close relationship with both his mom and dad. There has been no notable childhood trauma although when he was twenty-five years old, he discovered that his father was having an affair with a pet stuffer. His parents still remain happily married with his mom deciding the affair would simply be looked at as a hobby.
Charlie Kelly
Tumblr media
Place of birth: Philadelphia, Pennsylvania
Age: 42
Occupation: Janitor at a bar in Philadelphia called Paddy’s Pub
Vices: Drinking, eating cat food, huffing inhalants, drinking paint, eating chalk, stalking, sniffing glue
Brief Background:
Charlie Kelly is a Caucasian male who was raised by a single mother in Philadelphia, Pennsylvania. Not much is known about his father though it is assumed that his biological father might be Frank Reynolds, a man whom he is currently sharing an apartment as well as a bed with. Charlie discovered at the age of thirty that he was the survivor of an abortion his mother had soon after she had a sexual relationship with Frank Reynolds. His mother often supported herself and her son through prostitution. One of Charlie’s most vivid childhood memories is of Christmas Day, opening the door to a series of men dressed as Santa who would “visit” with his mom. Despite this, there is some severe denial on Charlie’s part as to what was happening. There is also some suggestion that Charlie may have been the victim of sexual assault as a child at the hands of his Uncle Jack.
 Gardner’s Levels of Intelligence
Spatial Intelligence: Visualizing yourself in a 3D world, excels in figuring out puzzles and maps. Does well when presented with a construction project.
Joey: He does have some background in construction and did build an entertainment unit for his apartment, though he incorrectly measured the size of the unit which ended up being too big for the wall it was placed on. He is not skilled with puzzles and doesn’t quite understand maps. During a trip to London, he needed to lay his map down on the ground and step into it in order to find his way around.
Charlie: He is not clear on what 3D means, once wearing a pair of 3D glasses outside and wondering why they didn’t work. With assistance from his friend, Mac, he was able to successfully glue the pieces of a broken beer bottle back together and drink beer out of it which was required during a game of Chardee MacDennis, a game created with his friends and coworkers at Paddy’s. He is also not strong with reading maps, during a trip to the water park, he struggled to understand North, East, South and West and relied on Frank to show him where he needed to go.
Winner: While it is impressive that Charlie was able to successfully put together a broken beer bottle, Joey takes the point here. Despite being the wrong size, he did build an entire entertainment unit without assistance and was able to retile the bathroom floor in the apartment of his neighbors–Monica and Rachel. Joey’s construction background gives him the edge here.
Intrapersonal Intelligence: Understanding your needs, wants and desires. Understanding yourself.
Joey: His strengths, although not always successful, are in acting. While at times, he has been plagued with self doubt about his talents as an actor, he seems to come back to it. He seems to understand where his strengths lie and has a strong desire and motivation to make it as an actor, going so far as to beg for his job back at Days of Our Lives after he had embarrassed himself with the producers. He knows what he is good at and tends to go after those things. He did try to move into his own apartment in order to get in touch with his thoughts only to realize he didn’t have a lot of thoughts.
Charlie: He is a simple man who is happy with who he is. He has no desire to move up in life and is content to remain a janitor at a bar and continue living in squalor in Section 8 housing. He doesn’t have the drive or motivation to better himself because he understands who he is and likes who he is. That being said, there is not a lot of self reflection and there is a sense of delusion to some of his activities such as believing he is a lawyer who specializes in bird law without ever having attended law school.
Winner: Joey. Charlie’s needs and wants are more primitive and while he is content with who he is, there is a lack of self awareness and a lack of an inner thought process which often causes chaos in his life. He acts first, thinks later. Joey does seem to have a more advanced view of himself and while his inner thought process may not be deep, his desire to move forward or at least try gives him this point.
Linguistic Intelligence: The ability to understand spoken and written language as well as the ability to speak and write.
Joey: He is an actor so his ability to understand the words on a page is a strength. He has also shown an understanding of poetry, being able to decipher the meaning behind a poem a man had written about his friend, Monica. While he may not always enjoy writing or reading, he is able to do so. With encouragement from his friend, Ross, he did try to write a play although got bored doing it and instead wrote quick stories for his friends to act out. His favorite things to read are comic books, the backs of cereal boxes and pornographic magazines.
Charlie: He is unable to read or write and his friends have often stated that he has a learning disability, though he has not officially been diagnosed. During a group intervention at their bar where they staged several interventions for various reasons, they had suggested one of the interventions be about Charlie’s illiteracy. At one point, Charlie accidentally offered the bar up as a prize in a dance marathon after misreading “pride” as “prize”.  He is a song writer but instead of using lyrics, uses pictures instead. His writings are a serious of random words that are strung together in incoherent sentences. He also has difficulty pronouncing words with more than two syllables. When his friend, Dee, asked to take him to a spa, he thought she was asking him for a spaghetti day. There is also some suggestion that one of the reasons he struggled with working in a mailroom which he had done for a brief period was because he read Pennsylvania as Pepe Sylvia. He also seems to be in denial about the severity of his illiteracy problem, often blaming his friends or brushing it aside.
Winner: Joey. Joey may just be lazy when it comes to motivation in this area but Charlie’s illiteracy as well as his denial about said illiteracy gives Joey the edge here. Also, Charlie needs to be enrolled in some sort of Special Education reading program for adults but his lack of awareness regarding this problem may prevent him from doing this.
Bodily Kinesthetic Intelligence: the ability to use your body to convey feelings and ideas. They have good hand eye coordination and their gross and fine motor skills are above average as well.
Joey: He once broke his arm jumping on his bed. He is average at playing flag football and does seem to possess an average level of athletic ability.
Charlie: He jumped out of the back of a moving van without injury. He also took a shot at a Phillies Hockey game and while he missed the shot, he still showed skill as an ice hockey player and taught Mac how to skate. He also jump kicked Mac out of the way of a falling piano. He is a skilled baseball player.  After drinking seventy one beers on a cross country flight from Philadelphia to Los Angeles, he was able to hit a baseball out of the park on the first try. Of course, he did have some trouble walking straight but his abilities to hit the ball were above average.
Winner: Charlie. While both men seem to have average athletic abilities, Charlie’s ability to knock a ball out of the park after seventy one beers gives him the edge here.
**Disclaimer: It is not advisable to drink seventy one beers in one sitting because it is stupid and you will die.
Interpersonal Intelligence: The ability to understand others and make meaningful connections with others.
Joey: He has close, dependent friendships with five people in particular: Monica, Rachel, Phoebe, Ross and Chandler. While not often discussed, he does seem to be able to maintain friendships with others outside his core group. He often hosts a party for the people he works with on Days of Our Lives and moved to Los Angeles in 2004 by himself and fostered a new set of friendships. He is protective of his sisters and his friends. He genuinely cares about their feelings and supports them when he can.
Charlie: He is also part of a very close knit group. He is incredibly close with his co workers at Paddy’s: Dee, Dennis and Mac. He also shares a bed with Frank Reynolds and at one point, married him so he could get on Frank’s health insurance. They have since divorced. He saved Mac’s life once when he jump kicked him out of the way of a falling piano and enjoys smoking breaks with Dee. While it’s not always obvious, he does care about those friends in particular. This unfortunately has not extended to outside the group. Ignoring all restraining orders, he continues to stalk a woman known only as the Waitress. People who seem to come into contact with him and his group often end up with their lives completely destroyed.
Winner: Joey. While both men are part of two very codependent, fused groups, Charlie’s group is far more toxic. Joey seems far more capable of making meaningful connections with others both in and out of his group.
Existential Intelligence: People who are able to see the big picture and use intuition to understand that world around them. They seek meaningful learning experiences in understanding the world.
Joey: While he prefers to live in the now and doesn’t seem interested in deeper learning, it does seem that he does have the ability to think beyond himself. He does believe in ghosts and has a fear of little girl ghosts. When his agent passed away in 2004, he did believe that she was calling him from beyond–this was later revealed that his friend, Phoebe, was calling him pretending to be the agent to spare his feelings.
Charlie: He is a man with very primitive and basic needs and does not seem capable of meaningful learning. He does not concern himself with questions of life and death. He does not look at the big picture and how it relates to the world, but focuses on immediate gratification.
Winner: Joey. While neither man is that deep, Joey’s thinking is a bit more advanced than Charlie’s which gives him the edge.
Logical/Mathematical Intelligence: Skilled at deductive reasoning, detecting patterns and logical thinking. They excel at abstract and complex ideas.
Joey: Math is not a strong suit as he is often in dire financial straits, relying on his friends to bail him out. His thinking is not always based on logic and is not always linear. He struggles with basic arithmetic and confused his phone number for the amount due on his phone bill.
Charlie: He struggles as well with logical and linear thinking. He does not understand complex or abstract ideas but when presented with a scheme or a scam, without being told, he can understand the steps of the scam as when his friends were trying to run a contaminated chicken scam on a day of a surprise health inspection.
Winner: While this could end up in a draw as neither one excel in logical thinking, Charlie takes the win by a rat’s hair. When his friends doubted whether or not he had an understanding of the scam they were playing on the day of the health inspection, he got it immediately and was also able to help the gang pull off the scam while at the same time figuring out the steps needed to pass the inspection.
Musical Intelligence: The ability to understand pitch, tone and an enjoyment for making and playing music.
Joey: He does have ballroom dancing skills as he worked with his superintendent Mr. Treeger to teach him how to dance but does not show a skill for more complicated dance moves. When he got a drum set once, he seemed more interested in banging on them and throwing the sticks up in the air more than actually playing. He does not seem to posses a natural singing ability.
Charlie: He seems to be a prodigy in this area, having written a musical called The Nighman Cometh which his friends performed. He also wrote and performed  several songs for a bar industry night when important bar people stopped by Paddy’s to see if the gang had finally done enough to make them eligible for an award. He also wrote and performed a song at Frank’s Little Beauties kids beauty pageant.
Winner: Charlie. His skills to create catchy music and to be able to pick up an instrument and start playing put him far above Joey in this category.  Charlie is incredibly gifted in this area and seems to be self taught.
Naturalist Intelligence: The ability to understand the patterns of living things, understands animals and plants.
*it is important to note that this skill also comes with the ability to record and chart scientific data when it comes to plants and animals but we are just going to ignore that because I would like to.
Joey: He loves animals but doesn’t quite understand them. He believes that animals eventually go to a farm, showing a lack of understanding when it comes to the life cycle of plants and animals.
Charlie: He is a janitor who lists “rat basher” as part of his job description where he also has a special bat with nails as his rat bashing stick. He also created a line of mittens to put on kittens and through a speciality of law he invented, he seems to have an understanding of birds.
Winner: The whole scientific data part aside, it might be Charlie. He seems to feel an intense sadness when he has to kill rats, a feeling of remorse he surprisingly does not have when he interacts with other people outside of his core group.
Moral Intelligence: Ability to understand right from wrong, understanding of values
Ummmmm……
Well, this is awkward.
Joey: When he began a relationship with the ex of a best friend, he told his friend he would not pursue the relationship with her if the friend did not approve. He has a strong sense of right and wrong, cares deeply about his friends and family and expects the same honesty and loyalty from them.
Charlie: At this time, Charlie has committed the following: stalking, harassment, violation of several restraining orders brought on him by the Waitress, breaking and entering, public intoxication, illegal drug use, assault and battery, eating Santa Claus, grand theft, shop lifting, faking his own death, selling drugs, destruction of property, kidnapping and torture, fraud, false reporting, etc, etc….
Winner: Joey…..no explanation necessary
Final Score:
Joey: 6
Charlie: 4
Final result: While neither man would ace an IQ test, this very scientific and quite honestly pointless blog will put to rest the question absolutely no one asked.
Joey Tribbiani is more intelligent BUT Charlie Kelly does make some lovely music.
                            Using Gardner’s Levels of Intelligence to discover who is smarter: Charlie Kelly VS. Joey Tribbiani Dumb characters are a television staple. Characters who just don't always seem to have it together, whom you wonder how they manage to live, survive and basically not die.
0 notes
descubes · 7 years ago
Text
In the Paris Open Source Summit, I had a long discussion with engineers from AdaCore, that reminded me of the early roots of XL in Ada. I have never really retraced the steps along the way, and this was an interesting walk for me. I thought I’d share…
My interest in programming languages is quite old. Actually, I had been writing development tools for as long as I can remember:
My first published program, at age 14, was an extension of the Sinclair Spectrum BASIC that gave new features such as flood fill or a primitive window system.
A few years later, I published HPDS (HP Development System), a cross-compiler for HP-48 and HP-28 calculators that used an extended version of the built-in language, including a complete assembler (you can already see the Alsys commenting style in this example). HPDS did not have much success, but some of the games I developed with it are still available on the Internet today.
Also, I had been deeply fascinated by the Sinclair QL’s SuperBasic, which had departed so much from regular BASIC that it was probably closer to Pascal.
The direction of my thinking about programming languages changed drastically when, as an engineering student, I met the Ada programming language.
Step 0 (1990s): From Alsys SA to LX
During my last year in engineering school, my internship was at Alsys SA, a company that was producing high-quality Ada compilers, written themselves in Ada. I have very fond memories of that period. I learned quite a bit with the brilliant engineers at that company. The commenting style I still use today is a remnant of that training period.
I learned Ada by reading the reference manual. I remember being very impressed by this language, notably by the standardisation effort. At the time, no two Pascal or C compilers were behaving the same. You had the Turbo Pascal dialect, the Think C dialect which was different from the MPW C, etc… I also liked the “solid feel” of the Ada language.
Yet, from the very beginning, I felt like Ada was a bit too restrictive. That was the incentive I needed to start thinking about my own programming language.
Step 0bis: WASHB – What Ada Should Have Been
In the very early days, I thought of my language as some enhanced version of Ada. So I called it WASHB, short for What Ada Should Have Been. Obviously, my knack for catchy names and acronyms had not entirely developed back then. That name obviously did not stick for very long, and WASHB was never anything more than a vague specification.
Step 1 (1995): LX (Langage eXpérimental)
The first serious effort at creating a real language was called LX, which were the initials for “Langage eXpérimental”, or “experimental language” in Shakespearian. I don’t have much data on the evolution of the language at that time, besides old Word documents that are unreadable on modern versions of Word. In particular, I no longer have source code that I can reliably trace back to that era.
  An LX compiler generating 68K assembly code
I do remember however that I had a compiler that was generating assembly code for the Motorola 68K family of CPUs. I was developing on Atari ST at the time, and I remember testing the generated code on an embedded board with a 68040 back when I was working for the HP Test and Measurement Organisation in France.
That early compiler went far enough to compile “Hello World“. I do believe that this was with a standard library written in the language itself.
A language that can build its own standard library
LX was still very Ada-like. Still, as I recall (I no longer have computer records of that period), several ideas had already solidified by that time, which I will expand on later:
Giving up on superfluous syntactic markers such as terminating semi-colon.
Using generics to write standard library component such as arrays or I/O facilities.
Making the compiler an integral part of the language, which led to…
having a normalised abstract syntax tree, and…
considering “pragmas” as a way to invoke compiler extensions.
I am quite positive about these ideas emerging at the time, because they derived from concerns about Ada having too many “magic thingies”, and these concerns were already well formed while I was working at Alsys.
What I disliked about Ada
I never liked magic in a language. To me, keywords demonstrated a weakness in the language, since they indicated something that you could not build in the library using the language itself. Ada had plenty of keywords and magic constructs.
Let me elaborate a bit on some specific frustrations with Ada:
Tasks in Ada were built-in language constructs. This was inflexible. Developers were already hitting limits of the Ada-83 tasking model. My desire was to put any tasking facility in a library, while retaining an Ada-style syntax and semantics.
Similarly, arrays were defined by the language. I wanted to build them (or, at least, describe their interface) using standard language features such as generics. Use cases I had in mind was interfacing with languages that had different array layouts such as Fortran and C, or using an array-style interface to access on-disk records. Back then, mmap was unavailable on most platforms.
Ada text I/O facilities were uncomfortable. But at that time, there was no good choice, and it was mostly a game of picking the poison that would kill you:
In Pascal, WriteLn could take as many arguments as you needed and was type safe, but it was a magic procedure in Pascal, that you could not write yourself in standard Pascal, nor extend or modify to suit your needs.
Ada’s text I/O facilities only took one argument at a time, which made writing the simplest I/O statement quite tedious relative to C or Pascal.
C’s printf statement had multiple arguments, but was neither type safe nor extensible, and the formatting string was horrid.
I also did not like pragmas, which I found too ad-hoc, with a verbose syntax. I saw pragmas as indicative that some kind of generic “language extension” facility was needed, although it took me a while to turn that idea into a reality.
From experimental to extensible
I soon realised that my efforts were mostly about being able to extend the language through its standard library and mechanisms such as pragmas. At some unspecified point in time, somewhere along the way, the meaning of LX changed from experimental language to extensible language. I liked the normalisation of Ada, but I wanted a way to leverage the base language to go beyond the basics in a controlled and specified way.
The development period for LX lasted between my training period at Alsys in 1990 and 1998, when I jointed the HP California Language Lab in Cupertino (CLL) to work on the C++ compiler and, I hoped, my own language. It did not all go as planned…
Step 2 (1998): XL, meet Xroma
One of the very first things I did moving to the US was to translate the language name to English. So LX turned into XL. This was a massive rename in my source code, but everything else remained the same.
Daveed Vandevoorde and meta-programming
As soon as I joined the CLL, I started talking about my language and the ideas within. One CLL engineer who immediately “got it” is Daveed Vandevoorde. Daveed immediately understood what I was doing, in large part because he was thinkering along the same lines. He pointed out that my approach had a name: meta-programming, i.e. programs that deal with programs. I was doing meta-programming without knowing about the word, and I felt really stupid at the time, feeling that everybody knew about that technique but me.
Daveed was very excited about my work, because he was himself working on his own pet language named Xroma (pronounced like Chroma). At the time, Xroma was, I believe, not as far along as XL, since Daveed had not really worked on a compiler. However, it had annotations similar to my pragmas (which I suspect are distant ancestors of C++11 attributes), and some kind of public representation for the abstract syntax tree as well.
Also, the Xroma name was quite Xool, along with all the puns we could build using a capital-X pronounced as “K” (Xolor, Xameleon, Xode, …) or not (Xform, Xelerate, …). As a side note, I later called “Xmogrification” the VM context switch in HPVM, probably in part as a residual effect of the Xroma naming conventions.
In any case, Daveed and I joined forces, that combined effort was named Xroma. I came up with the early version of the lightbulb logo, and Daveed did a nice 3D rendering of the same using the Persistence of Vision ray tracer.
Concept  programming
The discussions around our respective languages, including the meta-programming egg-face moment, led me to solidify the theoretical underpinning of what I was doing with XL. It actually did go somewhat beyond meta-programming, which was really only a technique being used, but not the end goal. I called my approach Concept Programming. I tried to explain what it is about in this presentation.
Concept programming is about how we transform concepts that reside in our brain into code that resides in the computer. That conversion is lossy, and concept programming explores various techniques to limit the losses. It introduces pseudo-metrics inspired by signal processing such as syntactic noise, semantic noise, bandwidth and signal/noise ratio. More importantly, Concept Programming has consistently guided what I am doing with XL.
From examples of concept programming to C++ concepts
As an aside, talking about concepts, I have reasons to suspect that C++ concepts might be the result of a mis-interpretation of several concept-programming e-mail discussions I had with a few C++ committee members around the year 2000. Maybe I’m wrong and it’s just a coincidence. Besides the emails I sent, there is some striking similarity.
Consider the following concept example from Wikipedia:
template <class T> concept bool EqualityComparable() { return requires(T a, T b) { {a == b} -> Boolean; // Boolean is the concept defining a type usable in boolean context {a != b} -> Boolean; }; }
To me, it looks very much like a C++ version of this example (called validated generics in XL), which I was using as an illustration of the outcomes of concept programming in practically any discussion of these topics back in 2000:
generic type ordered where A, B : ordered Test : boolean := A < B
As of this writing (December 2017), C++ concepts did not yet make it to the C++ standard. By contrast, a variant of the code above shows up on a web page that states “First published on February 17, 2000“. Whether reinvented independently or not, this specific idea, that I will keep calling validated generics, took about 20 years to make it to C++.
The one thing that makes me unhappy about C++ concepts is the name concepts. In Concept Programming, concepts reside in your head, never in the code. So calling something in the code “concept” is bound to make concept programming much harder to explain to developers who learned C++ concepts first.
A program database to rule them all
Daveed is still a prominent and innovative member of the C++ community today. Back in the CLL days, he was already quite influential, being for example the HP representative to the C++ Standard committee.
He quickly generated quite a bit of interest in the CLL about some kind of universal program database that would represent the program in such a way that various tools could work on it. We called such transformations thin tools. The database format was intended to work across languages, so it was designed to be able to represent a C++ parse tree or a Java parse tree in a very similar way. There was tremendous interest about this kind of technology at the time, and like many things, these ideas took years to materialise elsewhere.
Daveed and I gave several internal talks about our ideas, and I was happy to let him speak if only because my english accent at the time was much worse than his. That proved to be a mistake…
Switching to the off-side rule
Another major visual change that happened around that time was switching to the off-side rule, i.e. using indentation to mark the syntax. Python, which made this approach popular, was at the time a really young language (release 1.0 was in early 1994).
Alain Miniussi, who made a brief stint at the CLL, convinced me of giving up the Ada-style begin and end keywords. I was initially totally unconvinced, and reluctantly tried it on a fragment of the standard library. As soon as I tried it, however, the benefits immediately became apparent. It was totally consistent with the core idea of concept programming, namely that the code should look like your concepts. Enforcing indentation made sure that the code did look like what it meant.
It took some effort to convert existing code, but I’ve never looked back since then.
Daveed leaves HP and XL loses traction
Not very long after I joined the CLL, Daveed received one of these offers that you can’t refuse from the Edison Design Group, the company he’s still working for to this day. So he left HP. Before leaving, he asked me to keep the Xroma name for his own project, and together, we decided that I would rename my side as Mozart. I was disappointed, because I liked the name Xroma, but did not think too much of it.
However, it quickly became evident that after Daveed’s departure, XL had lost all traction in the CLL. The next talk I organised about it had maybe two people. Clearly, CLL engineers saw Xroma as being solely Daveed’s baby, with me just tagging along. It was obvious that everybody thought the project had died the day Daveed left HP.
Trying Apple, unsuccessfully
After a few months without any traction at HP, I started looking elsewhere. Through some chance event, I ended up pitching XL to Bertrand Serlet at Apple. I rarely met someone so smart. I remember being vastly impressed that the second or third question he asked was “How do you deal with introspection“. I did not know at the time how important introspection was in the Objective-C programming model. That question, coming from a higher-up at Apple, was totally unexpected. It convinced me that Apple knew what they were talking about.
In any case, Bertrand Serlet was convinced enough that I interviewed with the compiler team at Apple. Things went quite well, until someone asked “Are you sure you own this language?” I personally had absolutely no doubt about that, having invented that language long before even joining HP. However, the Apple engineer who had asked the question was quick to point out that if I had spoken about it to HP engineers, California Work for Hire agreements probably meant that HP had taken ownership of my work.
So the discussion with Apple stopped abruptly, and I returned to HP somewhat bummed. I still did a few things at the CLL, like porting the HP C++ compiler to Itanium or representing HP at the C++ committee for a couple of years. But I had no real love for C++, and I hit a career wall within the CLL. I finally left the C++ compiler team after only two years, and started HP Integrity Virtual Machines. But that is another story.
Step 3 (2000): Open-sourcing XL and Mozart
Before leaving the CLL, and following the Apple incident, I talked with various people at HP to make sure my intellectual property of XL was acknowledged.
It took quite a bit of time, but we reached an agreement as follows: XL and Mozart had to be made open-source, and published regularly so that HP could monitor whether they were interested in it. Also, because HP had a strong interest in Java at the time, they wanted to make sure that whatever I developed also worked for Java.
Moka, a Java to Java compiler
So I published Mozart and began working actively on it, making sure there was some prominent Java support in it. I also published an article in Dr Dobb’s, a popular developer journal.
But my heart was never with Java anymore than with C++, as evidenced by the much more extensive documentation about XL on the Mozart web site. As a language, Java had very little interest for me.
Key innovations in 2000-vintage XL
By that time, XL was already quite far away from the original Ada. Here are some of the key features that went quite a bit beyond Ada:
The syntax was quite clean, with very few unnecessary characters. There were no semi-colons at the end of statement, and parentheses were not necessary in function or procedure calls, for example. The off-side rule I talked about earlier allowed me to get rid of any begin or end keyword, without resorting to C-style curly braces to delimit blocks.
Pragmas extended the language by invoking arbitrary compiler plug-ins. As I already pointed out, I suspect that attributes in C++11 are distant (and less powerful) descendants of this kind of annotation, if only because their syntax matches my recollection of the annotation syntax in Xroma.
Expression reduction was a generalisation of operator overloading that works with expressions of any complexity. To this day, expression reduction still has no real equivalent in any other language that I know of, although expression templates can be used to achieve similar effect in a very convoluted way for expressions following the standard operator syntax in C++.
True generic types were a way to make generic programming much easier by declaring generic types that behaved like regular types. Validated generic types extended the idea by adding a validation to the type, and they also have no real equivalent in other languages that I am aware of, although C++ concepts bring a similar kind of validation to C++ templates.
Type-safe variable argument lists made it possible to write type-safe variadic functions. They solved the WriteLn problem I referred to earlier, i.e. they made it possible to write a function in a library that behaved exactly like the Pascal WriteLn. I see them as a distant ancestor of variadic templates in C++11, although like for concepts, it is hard to tell if variadic templates are a later reinvention of the idea, or if something of my e-mails influenced members of the C++ committee.
A powerful standard library was not quite there, but the key foundations were there, and it was mostly a matter of writing it. My implementation of complex numbers, for example, was 70% faster than C++ on simple examples, because it allowed everything to be in registers instead of memory.
There were a few things that I believe also date from that era, like getting rid of any trace of a main function, top-level statements being executed as in most scripting languages.
Limitations of the parse tree representation
One thing did not work well with Mozart, however, and it was the parse tree representation. That representation, called Notes, was quite complex. It was some kind of object-oriented representation with many classes. For example, there was a class for IfThenElse statements, a Declaration class, and so on.
This was quite complex, and made it extremely difficult to write thin tools, in particular thin tools that respected subtle semantic differences between languages. By 2003, I was really hitting a wall with XL development, and that was mostly because I was also trying to support the Java language which I did not like much.
One of the final nails in the Mozart coffin was a meeting with Alan Kay during an HP technical conference (he was an HP Fellow at the time). I tried to show him how my language was solving some of the issues he had talked about during his presentation. He did not even bother looking. He simply asked: “Does your language self-compile?“. When I answered that the compiler being written in C++, Alan Kay replied that he was not interested.
That gave me a desire to consider a true bootstrap of XL. That meant rewriting the compiler from scratch. But at that time, I had already decided that the internal parse tree representation needed to be changed. So that became my topic of interest.
Step 4 (2003): Bootstrapping XL2
The new implementation was called XL2, not as a version number, but because I was seeing things as a three-layer construction:
XL0 was just a very simple parse tree format with only eight node types.
XL1 was the core language, without any library.
XL2 was the full language, including its standard library.
This language is still available today, and while it’s not been maintained in quite a while, it seems to still pass most of its test suite. More importantly, the XL0 format has remained unchanged since then.
The XL0 parse tree format
The parse tree format is something that makes XL absolutely unique among high-level programming languages. It is designed so that code that can look and feel like an Ada derivative can be represented and manipulated in a very simple way, much like Lisp lists are used to represent programs.
The picture below shows an example of XL source code on the left, along with a graphical rendering of the internal representation on the right (click for details):
The parse tree format consists of only eight node types, four leaf node types (integer, real, text and symbol), four inner node types (infix, prefix, postfix and block). It is very vaguely documented here.
A few surprising properties of this parse tree format is that individual program lines are seen as the leaves of an infix “newline” operator. There are no keywords at all, the precedence of all operators being given dynamically by a syntax file.
Bootstrapping XL
The initial translator converts a simplified form of XL into C++ using a simplified form of transcoding. The simplified form of XL2 acceptable as input for this translation phase is only used in the bootstrap compiler. It already looks a bit like the final XL2, but error checking and syntax analysis are practically nonexistent.
The bootstrap compiler can then be used to translate the native XL compiler. The native compiler performs much more extended semantic checks, for example to deal with generics or to implement a true module system. It emits code using a byte-code that is converted to a variety of runtime languages. For example, the C bytecode file will generate a C program, turning the native compiler into a transcoder from XL to C.
That native compiler can translate itself, which leads to a true bootstrap where the actual compiler is written in XL, even if a C compiler is still used for the final machine code generation.
The XL2 compiler advanced to the point where it could pass a fairly large number of complex tests, including practically all the things that I wanted to address in Ada:
Pragmas implemented as compiler plug-ins.
Expression reduction generalising operator overloading.
An I/O library that was as usable as in Pascal, but written in the language and user-extensible.
A language powerful enough to define its own arrays or pointers, while keeping them exactly as usable as built-in types.
Compiler plugins
XL2 had full support for compiler plug-ins, in a way similar to what had been done with Mozart. However, plug-ins were much simpler to develop and maintain, since they had to deal with a very simple parse tree structure.
For example, the differentiation plugin implements symbolic differentiation for common functions. It is tested here. The generated code after applying the plugin would look like this. The plugin itself is quite simple. It simply applies basic mathematical rules on parse trees. For example, to perform symbolic differentiation on multiplications, the code looks like this:
function Differentiate (expr : PT.tree; dv : text) return PT.tree is translate expr when ('X' * 'Y') then dX : PT.tree := Differentiate(X, dv) dY : PT.tree := Differentiate(Y, dv) return parse_tree('dX' * 'Y' + 'X' * 'dY')
Meta-programming became almost entirely transparent here. The translate statement, itself provided by a compiler plug-in (see below), matches the input tree against a number of shapes. When the tree looks like X*Y, the code behind the matching then is evaluated. That code reconstructs a new parse tree using the parse_tree function.
Also notice the symmetric use of quotes in the when clause and in the parse_tree function, in both cases to represent variables as opposed to names in the parse tree. Writing parse_tree(X) generates a parse tree with the name X in it, whereas parse_tree('X') generates a parse tree from the X variable.
Translation extension
A particularly important compiler extension provided the translation and translate instructions. Both were used extensively to rewrite XL0 parse trees easily.
We saw above an example of translate, which translated a specific tree given as input. It simply acted as a way to compare a parse tree against a number of forms, evaluating the code corresponding to the first match.
The translation declaration was even more interesting, in that it was a non-local function declaration. All the translation X from all modules were accumulated in a single X function, several functions corresponding to distinct phases in the compiler. This made it possible to distribute translation XLDeclaration statements throughout the compiler, dealing with declaration of various entities, with matching translation XLSemantics for the later semantics analysis phase.
This approach made it quite easy to maintain the compiler over time. It also showed how concept programming addressed what is sometimes called aspect-oriented programming.
Step 5 (2009): Dynamic code generation
One issue I had with the original XL2 approach is that it was strictly a static compiler. The bytecode files made it possible to generate practically any language as output. I considered generating LLVM bitcode, but thought that it would be more interesting to use an XL0 input instead. One reason to do that was to be able to pass XL0 trees around in memory without having to re-parse them. Hence XLR, the XL runtime, was born.
XLR, the functional variant of XL
For various reasons, I wanted XLR to be dynamic, and I wanted it to be purely functional.  My motivations were:
a long-time interest in functional languages.
a desire to check that the XL0 representation could also comfortably represent a functional languages, as a proof of how general XL0 was.
an intuition that sophisticated type inference, Haskell-style, could make programs both shorter and more solid than the declarative type systems of Ada.
While exploring functional languages, I came across Pure, and that was the second big inspiration for XL. Pure prompted me to use LLVM as a final code generator, and to keep XLR extremely simple.
Translating using tree rewrites
As a matter of fact, I sometimes describe XLR as a language with a single operator, ->, which reads as transforms into. Thus, X->0 declares a variable X. This notation can be used to declare basic operators:
x:integer - y:integer as integer -> opcode Sub
It makes a declaration of writeln even shorter than it was before:
write x:text as boolean -> C elfe_write_text write x:integer as boolean -> C elfe_write_integer write x:real as boolean -> C elfe_write_real write x:character as boolean -> C elfe_write_character writeln as boolean -> C elfe_write_cr
More interestingly, even if-then-else can be described that way:
if true then TrueBody else FalseBody -> TrueBody if false then TrueBody else FalseBody -> FalseBody if true then TrueBody -> TrueBody if false then TrueBody -> false
Similarly for basic loops, provided your translation mechanism implements tail recursion properly:
while Condition loop Body -> if Condition then Body while Condition loop Body until Condition loop Body -> while not Condition loop Body loop Body -> Body; loop Body for Var in Low..High loop Body -> Var := Low while Var < High loop Body Var := Var + 1
Note that the fact that such structures can be implemented in the library does not mean that they have to. It is simply a proof that basic amenities can be constructed that way, and to provide a reference definition of the expected behaviour.
Step 6 (2010): Tao3D
When I decided to leave HP, I thought that XLR was flexible enough to be used as a dynamic document language. I quickly whipped together a prototype using XLR to drive an OpenGL 3D rendering engine. That proved quite interesting.
Over time, that prototype morphed into Tao3D. As far as the XLR language itself is concerned, there wasn’t as much evolution as previously. A few significant changes related to usability popped up after actively using the language. For example, implicit conversions of integer to real were not in the original XLR, but it was quite annoying in practice when providing object coordinates.
Tao3D developed a relatively large set of specialised modules, dealing with things such as stereoscopy or lens flares. As a product, however, it was never very successful, and Taodyne shut down in 2015.
Step 7 (2015): ELFE
ELFE is another application of XL’s extensibility to another application domain, namely distributed software. The idea was to take advantage of the existence of the XL0 standard parse tree to communicate programs and data across machines.
An ELFE program looks as as if it was running on a single machine, but actively exchanges program segments and their associated data between distant nodes. ELFE only adds a very small number of features to the standard XL:
The ask statement sends a program, and returns the result of evaluating that program as if it has been evaluated locally. It works like a remote function call.
An invoke statement sends a program to a remote node. It’s a “fire and forget” operation, but leaves a reply channel open while it’s executing.
Finally, the reply statement allows a remote node to respond to whoever invoke‘d it, by evaluating one of the available functions in the caller’s context.
A few very simple ELFE demos illustrate these remote-control capabilities. For example, it’s easy to monitor temperature on two remote sensor nodes, and to ask them to report if their temperatures differ by more than some specified amount.
ELFE was designed to run with a small memory footprint, so it provides a complete interpreter that does not require any LLVM. On the other hand, the LLVM support in that “branch” of the XL family tree fell into a bad state of disrepair.
And today?
These days, I find myself with several subtly distinct variants of XL which all share the same XL0, but have very different run-time constraints.
Languages using the XL0 parse tree format
Languages currently using the same XL0 parse tree format include;
Tao3D has the most advanced library, and a lot of code written for it. But that code often depends on undesirable behaviours in the language, such as implicit by reference argument passing.
ELFE has the most advanced type system of all variants, being able to perform overloading based on the shape of parse trees, and having a rather complete set of control structures implemented in the library. It also has an interesting modular structure, and a rather full-featured interpreter.
XLR fell behind with respect to LLVM support, LLVM not being particularly careful about release-to-release source compatibility. On the other hand, it had the most advanced type inference system, which allowed it to get performance that was close to C for simple cases.
XL2 has been left aside for a few years, but is still all but obsolete. It would need a bit of love to make progress with the standard library and actually connect the XLR back-end as initially envisioned.
Re-converging?
Overall, the effort today is to re-converge these various branches and to catch-up with LLVM. The ideal converged solution would have:
The modular structure, interpreter, remote control capabilities and type system developed for ELFE.
The real-time graphic capabilities of Tao3D, probably offered as an ELFE-style module
A finished Haskell-style type inference system
An XL2 front-end for those who prefer an imperative programming style
Future ideas
In addition, I have been toying with a few ideas for a while:
Using is instead of -> as the as the one-and-only rewrite operator. I believe that for most programmers, X is 0 is immediately understandable, whereas the current X->0 requires an explanation.
Replacing the block node type with an sequence or array node type.
Currently, blocks without a content, such as ( ) or { }, have a blank name inside, which I find ugly. It would make more sense to consider them as arrays with zero length.
Furthermore, blocks are often used to hold sequences, for example sequences of instructions. It would be easier to deal with a block containing a sequence of instructions than with the current block containing an instruction or a chain of infix nodes.
Bootstrapping an XLR compiler or interpreter, to validate that the XLR-level language is good enough for a compiler.
Conclusion
This article was way too long.
    From Ada to XL in 25+ years… In the Paris Open Source Summit, I had a long discussion with engineers from AdaCore, that reminded me of the early roots of…
0 notes
tic80tutorials · 7 years ago
Text
Lesson 1: Introducing Tic-80, Javascript and “Hello World”
Approximate length: 1-2 hours.
 NOTE: These tutorials assume a basic level of computing knowledge such as being able to unzip an archive file, familiarity with a word processor or text editor and knowing your way around a standard keyboard layout. Beyond that no previous programming, game design or artistic experience is necessary.
 There are Tic-80 versions for Android and iOS but these tutorials will assume you are learning on a desktop computer or laptop.
 What is Tic-80?:
Tic-80 is a “fantasy computer”. It’s an app that lets you pretend your powerful modern computer is an old, primitive computer for making and playing simple games. Tic-80 contains a code editor for programming and tools for making graphics, sound effects, music, maps and levels.
Tic-80 supports three different programming languages JavaScript, LUA and MoonScript but these tutorials will exclusively use JavaScript.
What is JavaScript:
JavaScript is a programming language originally developed to allow interactive content to be included in web pages and has since become the default language for web based software making it one of the most widely used programming languages in the world.
JavaScript is frequently cited as a good starting language for people wanting to learn the basics of programming. Although we’ll be using it here to make games the skills you’ll learn in these tutorials will transfer to web development and will give you a good footing for learning other languages in the future.
 Some things to bear in mind:
It can sometimes be difficult to picture how these early tutorials will translate into making games. It is important to remember that all computer programs are just a series of instructions. In that respect there is no difference between the simple programs you are about to create, a complicated piece of commercial utility software like Photoshop or Word and a modern AAA videogame. Learning a computer language is analogous to learning a spoken language – you start by learning to say “Hello”, not by writing a novel.
If this is your first experience programming, it’s important to remember that you don’t have to understand everything immediately. Programming concepts and terminology will be revisited and recapped throughout the series and you don’t need to understand everything in a lesson before moving on to the next. A big part of coding is experimentation and observation, these tutorials will frequently ask you to make non-specific changes to your code and draw your own conclusions.
 Getting Started:
Tic-80 is available to download here:
https://tic.computer/create
There are versions for Windows, Mac and Linux. Once you’ve downloaded and unzipped Tic-80, double click on the Tic-80 program icon. After a brief start up sequence you’ll be presented with this screen:
Tumblr media
This is the Console. Here you can save and load projects and carry out system level commands, you can think of it as Tic-80s operating system (like Windows, Mac OS or Linux on your computer), but we can’t do any programming on this screen.
If you press Escape you’ll get to the Code Editor:
Tumblr media
This is where we’ll be writing our games. There is some default code in the editor already, but we can ignore that for now. Looking at the toolbar at the top of the screen we can see five icons on the left that take you to different editors. Here you can edit graphics, make maps and sound effects and compose music. Take some time to click around, explore and play about with the different editors. When you’ve finished exploring click on the left most icon or press F1 to return to the code editor.
 “Hello World”:
A “Hello World” program is a very simple computer program that displays the message “Hello World” on the screen. It’s traditionally the first thing you make when learning a new programming language. The default code we found in the Code Editor is a Hello World program. Click the Run icon on the toolbar (it looks like a Play icon) or press Ctrl-R, the shortcut for Run. Run in this context means to start the program.
Notice how there’s a bit more going on than just the “Hello World” message. There’s an animated character on the screen too and we can move it around with the arrow keys. Press Escape once to quit out of the program back to the Console and press Escape again to return to the Code Editor.
We want to write our own version of Hello World, this default one is written in a language called LUA and we’ll be learning JavaScript (and using this one would be cheating!). First, we need to delete the existing code. The Code Editor works just like a word processor or text editor. You can select blocks of text by holding the left mouse button and dragging or scrolling with the mouse wheel. To delete selected text press backspace or delete.
Once we’ve deleted all the existing text type in the following lines of code. Don’t worry about what they all mean yet, we’ll look at each line and what it does afterwards. Don’t copy and paste, you’ll get a better feel for JavaScript by typing out these examples.
// Hello World Program // script: js   function TIC() {
 cls(0);  print("HELLO WORLD!",0,0);
}
Once you’ve typed all that in press Run and, fingers crossed, there’s your Hello World message. Congratulations! You’ve written your first program with Tic80.
If something has gone wrong you’ll wind up with a screen like this:
Tumblr media
Don’t worry, you’ll be seeing a lot of this screen so you might as well get used to it now! Error messages are just Tic-80s cryptic way of helping you out. Go back and check your code to make sure there are no mistakes. Tic-80 will point you in the right direction by telling you which line of your program is the problem. Some things to watch out for are missing semi colons at the end of lines, missing closing brackets “)” and braces “}” and spelling errors.
Now let’s look at each line individually:
// Hello World Program
This line is a comment. Comments are used to leave notes and descriptions in your code. A single line comment begins with “//”. This tells the computer to ignore the line when it’s running our program. Try changing the text after “//” or adding in other comment lines in the code. The program should still run identically to before (make sure you’ve used the “/” symbol and not “\” by mistake!). Commenting on and documenting your code and how it works is an essential programming skill which we’ll discuss in greater depth later in this tutorial series.
// script: js
This is a special comment that tells Tic-80 that our program is written in JavaScript. This might seem contradictory when we just learnt that the computer ignores comments when it runs the program. What is happening is that the Tic-80 Code Editor looks for this comment BEFORE we run the program so it knows what language we’re using and can correctly follow our instructions. Think of it as a message we’ve left for the computer, not an instruction it has to carry out. When our program is running the computer ignores this line like any other comment.
function TIC(){
This line “defines a function” called TIC. A function is a block of code that performs a specific task. All the code that follows the brace “{“ is part of the function, up to the closing brace “}”. All Tic80 programs contain a TIC function, it marks the starting point of the program where the computer starts to follow our instructions. Tic80 follows all the instructions we put in the TIC function and when it has finished it starts again with the first instruction in the function. This is called a program loop. Tic80 will continue to follow these instructions until we tell it to stop, either by pressing Escape or with an instruction within the program.
cls(0);
This line is a “statement”. A statement is a single instruction to the computer and ends with a semi colon “;”. Cls(0) is an instruction that clears the screen. Try commenting this line out by adding “//” so the computer ignores it and run the program again. What happens? Delete the “//” again and try changing the number in the brackets.
print(“Hello World!”,0,0);
This statement is an instruction to print the words “Hello World!” on the screen. Change the line to read: Print(“Hello World!”,90,60); and run the program. What happens? Try adding a second line that prints another message somewhere else on the screen?
We’ve got a perfectly good Hello World program but it’s a bit dull compared to the default one which we deleted. Lets add some graphics. First go to the Sprite Editor by either clicking the toolbar icon or pressing F2. Tic80 programs can use two sets of 256 tiles, one for foreground graphics or “sprites” (basically anything that we move around) and one for background graphics (used for things like level scenery, title screens, still images, etc.). Each tile is 8 pixels wide by 8 pixels tall. Make sure you’re editing the background graphics tiles by clicking the BG icon in the top right of the screen:
Tumblr media
Now select a tile to edit by clicking anywhere in the large box on the right hand side of the screen and by drawing graphics in the smaller box on the left hand side using the mouse. Draw anything, dots, patterns, characters, objects, pieces of scenery – whatever first springs to mind. When you’ve drawn your first tile click in another blank spot on the right hand side of the screen to select another tile to edit. Once you’ve drawn a few tiles press go to the Map Editor, again by using the toolbar icon or by pressing F3.
Let’s make our background graphic by placing some tiles on to the map display. You can bring up the tile palette by holding down shift or clicking the Show Tiles icon in the top right corner of the toolbar:
Tumblr media
Click on one of the tiles you drew in the Sprite Editor and then “draw” the tiles on the grid using the left mouse button. Before you get stuck in lets double check we’re drawing in the right place, if you we’re exploring the map editor earlier you might have moved the drawing window. Click on the World Map button (the little eye icon in the toolbar) or press TAB. You’ll get this screen:
Tumblr media
We want to be drawing in the top left corner of the map. If the red box is not in the top left corner, drag it to line up with the grid in the top left corner with the mouse. Hit TAB again to go back to the main map editor screen.
You can spend as much or as little time as you want to make your background graphic, switching between the sprite editor and map editor if you need to draw extra tiles. Once you’ve finished go back to the Code Editor (F1) and add the following line between the line beginning “cls” and the line beginning “print”:
map(0,0,30,17,0,0);
Now run your program. You should see your background graphic drawn behind your Hello World message. If there is no graphic double check that you drew it in the top left corner of the world map and that you typed the new line of code correctly.
To save your work press Escape to return to the console and type “save helloworld”. You can load this program again from the console by typing “load helloworld”.
Summary:
In this lesson we’ve looked at the Tic80 software and some of the tools and editors it contains. We’ve written our first program, learnt how to add comments to our code (a fundamental programming skill) and how to create our own graphics and draw them on screen in our program.
We’ve covered a lot of ground. If there’s anything you’re unsure of try going back to re-read and experiment with your code or the Tic80 software. Remember, it’s not necessary to understand everything before moving on to the next lesson.
1 note · View note