tag:quandyfactory.com,2024-11-19:/202411192024-11-19T12:00:00ZQuandy Factory Newsfeed - AllQuandy Factory is the personal website of Ryan McGreal in Hamilton, Ontario, Canada..http://quandyfactory.com/blog/273/rip_thomas_e_kurtz_co-creator_of_basic2024-11-20T12:00:00ZRIP Thomas E. Kurtz, Co-Creator of BASIC
<p>I just learned that Thomas E. Kurtz, co-creator of the BASIC computer programming language, died on November 12, 2024 at age 96. This really hit me emotionally, and I’ve come to realize it’s because my life would most likely be radically different if not for BASIC.</p>
<p>I was launched on the road to becoming a software developer at around age 13 in the mid-1980s when my mother came home from work with a Compaq Deskpro Portable computer. It came with a 5 1/4” floppy drive, a 40 MB hard drive and 640 KB of RAM and it weighed around 30 lbs. </p>
<p>I was sort of hovering annoyingly around the perimeter as the tech set up the computer, and at some point he looked at me and said, “Hey kid, you wanna learn to program computers?” </p>
<p>I said, “Uh, sure?” </p>
<p>He handed me a small black plastic-bound three-ring binder containing a manual on GW-BASIC, the specific flavour of BASIC that shipped with the computer.</p>
<p>I started on page 1 and read through the book. As I learned each concept, I started writing programs that incorporated the fundamental constructs of most modern languages: </p>
<ul>
<li>direct mode vs program mode</li>
<li>variables and data types</li>
<li>if-then conditions</li>
<li>FOR-NEXT loops</li>
<li>WHILE-WEND loops</li>
<li>reading from and writing to the file system</li>
<li>sequential vs. random data access</li>
<li>25x80 ASCII graphics on the Hercules monochrome display</li>
<li>program flow via the much maligned GOTO </li>
<li>subroutines via the more civilized GOSUB-RETURN code blocks</li>
<li>error handling via ON ERROR GOTO</li>
</ul>
<p>I even made some rudimentary music (PLAY took letter notes whereas SOUND took frequencies in Hz) producing different pitches of the square wave beep our computer could emit.</p>
<p>And yes, my first program read:</p>
<pre><code>10 PRINT “RYAN IS AWESOME!”
20 GOTO 10
</code></pre>
<p>Eventually I was creating elaborate if extremely derivative programs, including a text-based Dwarf cave adventure game in which I was determined to have the game remember all the locations your character killed monsters so they would still be there if you came back later. (I was particularly proud of having the corpses get incrementally more deteriorated each time you revisited them.)</p>
<p>Eventually I grew into adulthood and lost interest in programming. But in my late 20s I found myself in a position where my manager wanted an intranet site for our organization and I perhaps capriciously offered to build it. </p>
<p>I was also working part-time as a waiter and one of my coworkers was taking a web development course at a local college. I asked him how hard it was to build a website and he was really helpful, pointing me to some resources and giving me the basics of HTML.</p>
<p>One thing led to another and I ended up moving into a role in my regular job that had a web development component. </p>
<p>At some point I was asked to build a dynamic website and when I looked into the server running our website, I learned it supported something called Active Server Pages, or ASP. </p>
<p>Imagine my pleasant surprise when I found out the programming language for ASP was VBScript, which stands for Visual BASIC, scripting edition. </p>
<p>It was just a modern version of the language I had learned as a teenager! </p>
<p>Aling the way, I also learned JavaScript and CSS, and once I started writing server code, I also learned SQL. </p>
<p>When a group of us decided in 2994 to start a local civic organization, I offered to build us a website. The very first version of Raise the Hammer was built in VBScript and the data was stored in an MS Access database (except for the article contents, which were stored in text files). </p>
<p>Once ASP became deprecated for Microsoft’s new .NET application development framework, I decided to break from the MS stack and branch out to a cross-platform language called Python. </p>
<p>That was around 2009 and it turns out to have been a very good call, as Python has become a dominant language across various domains, including machine learning and AI. </p>
<p>So far I’ve enjoyed a wonderful career as a software developer, albeit self-taught, and it has given me incredible opportunities to learn things and build things and be a part of some amazing communities, organizations and projects.</p>
<p>I try to be mindful of the rare privilege of having more or less open access to a computer in my home starting in the mid-1980s. I don’t think I appreciated at the time just how unusual this was!</p>
<p>And reflecting on the death of Thomas Kurtz, I also have to acknowledge the privilege of being exposed to a high-level programming language specifically designed for ease of understanding and learning.</p>
<p>After all, BASIC stands for <strong>Beginners' All-purpose Symbolic Instruction Code</strong>, and true to its name, it really was easy for at least one awkward kid to learn.</p>
<p>May Thomas E. Kurtz, who changed the course of human history during his 96 years and has now undertaken the ultimate GOSUB with no RETURN, rest in peace. </p>
Ryan McGreal2http://quandyfactory.com/site/24/home2024-11-13T12:00:00ZHome
<p style="float: right; margin-left: 5px;"><img style="border: 1px solid black;" src="/static/images/ryan_mcgreal_headshot_2016_05_11_sm.jpg" alt="Ryan McGreal" title="Ryan McGreal"></p>
<p>This is the personal website of Ryan McGreal in Hamilton, Ontario, Canada. </p>
<p>I live with my family and work as a programmer and writer. I was the editor of <a href="http://raisethehammer.org">Raise the Hammer</a> and volunteer with <a href="http://hamiltonlightrail.ca/" target="_blank">Hamilton Light Rail</a>, a citizen group dedicated to bringing light rail transit to Hamilton. </p>
<p>Several of my <a href="/essays/">essays</a> have been published in the <cite>Hamilton Spectator</cite>.</p>
<p>This website serves mainly as a handy repository of <a href="/essays/">published essays</a>, <a href="/projects/">active projects</a>, <a href="/blog/">random musings</a> and <a href="/links/">links</a> that I work on on or use frequently. It's also an online playground where I can try out new ideas.</p>
<p>For a much more detailed introduction to the site and its subject matter, check out the <a href="/about/">About</a> page.</p>
<p>Otherwise, feel free to contact me via email: <a href="mailto:ryan@quandyfactory.com">ryan@quandyfactory.com</a>.</p>
Ryan McGreal2http://quandyfactory.com/site/13/about2024-11-13T12:00:00ZAbout
<h3>Introduction</h3>
<p>My name is Ryan McGreal, and I live in Hamilton, Ontario, Canada with my family. I work as a web application developer, consultant, writer, editor and troublemaker, though it's mostly the programming that pays the bills. </p>
<h4>Raise the Hammer</h4>
<p>Until a few years ago, my principal activity that <em>didnt't</em> pay the bills was my role as editor of <a href="http://raisethehammer.org">Raise the Hammer</a>, an online magazine dedicated to sustainable urban revitalization in Hamilton. </p>
<h4>Hamilton Light Rail</h4>
<p>I am also a proud founding member of <a href="http://hamiltonlightrail.ca">Hamilton Light Rail</a>, a community group dedicated to bringing light rail transit to Hamilton.</p>
<h4>Published Essays</h4>
<p>I have written several essays on urban issues that have been published in the <em>Hamilton Spectator</em> and elsewhere over the past five years.</p>
<h4>Contact</h4>
<p>You can reach me via email at <a href="mailto:ryan@quandyfactory.com">ryan@quandyfactory.com</a> or on Bluesky <a href="https://bsky.app/profile/did:plc:3jq532444f33elehy5suckza">ryanmcgreal.bsky.social</a>.</p>
<h3>This Site</h3>
<p>This is my personal website, repository of essays and projects, and playground for new ideas. </p>
<p><em>Quandy</em> is a portmanteau of "Quick and Dirty", which can be a useful method of approaching problems. "Quick and dirty" has the benefit of being, well, quick, as well as flexible for those cases when initial requirements end up changing (i.e. just about every nontrivial project). </p>
<p>It suggests an iterative approach, on the reasoning that it's easier to build something simple and then make it better than it is to try and spring a fully-formed application from your forehead. </p>
<p>As John Gall famously stated: </p>
<blockquote>
<p>A complex system that works is invariably found to have evolved from a simple system that worked. The inverse proposition also appears to be true: A complex system designed from scratch never works and cannot be made to work.</p>
</blockquote>
<h3>Eye Quandy</h3>
<h4>Quandy Logo</h4>
<p>The red Quandy logo in the top left corner is courtesy of <strong>Trevor Shaw</strong>, a great local graphics designer and the creative director of <a href="http://www.getjuice.ca/">Juice Creative</a>.</p>
<h4>Footer Image</h4>
<p>The awesome cityscape panorama in the footer was taken by the talented photographer and amateur urbanist <strong>Aaron Segaert</strong>, and is used with permission.</p>
<h3>Interests</h3>
<p>In recent years I have been particularly interested in: the nature of city economies and urban development; the role of public participation and community engagement in creating and sustaining a healthy society; and ways to increase the openness, transparency and responsiveness of organizational governance and policy making.</p>
<h4>Conceptual Overlap</h4>
<p>I admit that my ideas about openness in government and policy making reflect my experience using and developing software: an open, information-sharing approach with peer review results in better results than a closed, proprietary approach based on blind trust.</p>
<h4>Jack of All Trades</h4>
<p>My interests take me all over the place, figuratively, from land use patterns and transportation modes to the global energy situation, geopolitics, social policy, economics and political economy, democratic structures and traditions, broad-based community organizing, local politics and current affairs, architecture, city life, ecology, sustainability, cognitive psychology, and more.</p>
<p>I don't claim expertise in any of these areas, but I am committed to studying the experts and following empirical best practices in these domains. </p>
<h4>Benefit from Shared Expertise</h4>
<p>The great thing about living in an open, knowledge-based culture is that you can benefit from the expertise of others. Once you establish the credibility of expertise, you can use it as a kind of knowledge <a href="http://en.wikipedia.org/wiki/Application_programming_interface">API</a> that allows you to take advantage of the expertise without necessarily knowing everything about the internals.</p>
<p>If not for this ability for non-experts to access expertise, there would be no way for the benefits of that expertise to disseminate into the broader society and inform our policy decisions.</p>
<h3>Programming</h3>
<p>I enjoy programming and have benefited immensely from the vast, rich ecosystem of free and open source software available to programmers today (see "Technical Notes", below).</p>
<h4>Great Time for OK Coders</h4>
<p>I know enough about great programmers and their remarkable contributions to understand that I am not a great programmer. Nevertheless, the rich ecosystem of programming languages, libraries, frameworks and tools means even a duffer like me can be creative and productive - and that's a <a href="http://c2.com/cgi-bin/wiki?GoodThing">Good Thing</a>.</p>
<h4>Productive Modern Languages</h4>
<p>One of the great things about modern programming languages is how highly expressive they are. You can create working code very efficiently, with a minimum of boilerplate. </p>
<p>That means it's easy to develop simple tools that do exactly what you want them to do and no more - and to do them quickly.</p>
<h4>Shared Open Source Software</h4>
<p>Recently I have begun releasing a few such handy tools under a free software / open source licence. You can find my shared resources hosted on <a href="http://github.com/quandyfactory">GitHub</a>. </p>
<p>The code isn't beautiful, but I'm <a href="http://code.google.com/events/io/sessions/MythGeniusProgrammer.html">no genius</a>.</p>
<h3>Technical Notes</h3>
<p>There's no particularly good reason why I didn't simply use WordPress or Drupal or some other off-the-shelf blogging software for this site; except that I enjoy building things (also, PHP makes the baby Jesus cry). </p>
<p>Anyway, it's not like I built the site from scratch.</p>
<ul>
<li><p>It runs on <a href="http://nginx.org/en/">nginx</a> and <a href="http://www.apache.org/">Apache</a> on a <a href="http://www.centos.org/">CentOS</a> <a href="http://www.linux.org/">Linux</a> machine hosted by the awesome admins at ̶W̶e̶b̶f̶a̶c̶t̶i̶o̶n̶ <a href="http://opalstack.com?affiliate=hammertime">Opalstack</a>. </p></li>
<li><p>It is written in the <a href="http://python.org">Python programming language</a> and uses the lightweight <a href="http://webpy.org">web.py</a> application development framework. </p></li>
<li><p>Web.py talks to Apache via the <a href="https://uwsgi-docs.readthedocs.io/en/latest/">uwsgi</a> server module, which replaces the older standard <a href="http://www.wsgi.org/wsgi/">Web Services Gateway Interface (WSGI)</a> specification for Python applications to communicate with web servers.</p></li>
<li><p>The site stores its documents in a <a href="https://mariadb.org/">MariaDB</a> database, which is a free-and-open source fork of <a href="http://dev.mysql.com/">MySQL</a>, and the database connection is made using the ingenious <a href="http://www.sqlalchemy.org/">SQLAlchemy</a> database toolkit and object-relational mapper (ORM).</p></li>
<li><p>Documents are saved in <a href="http://daringfireball.net/projects/markdown/">Markdown</a> syntax and converted to HTML for display using the <a href="http://code.google.com/p/python-markdown2/">python-markdown2</a> library (which is itself a re-implementation of the original <a href="http://www.freewisdom.org/projects/python-markdown/">python-markdown</a> library).</p></li>
<li><p>It also uses <a href="/projects/5/quandy">Quandy</a>, a library of handy classes and functions that I use frequently in writing web code. </p></li>
</ul>
<p>In other words, I'm sitting here on the shoulders of giants - and the view is grand!</p>
Ryan McGreal2http://quandyfactory.com/blog/272/kamala_harris_deserves_to_win2024-11-02T12:00:00ZKamala Harris Deserves to Win
<p>Kamala Harris and her team have run an extraordinary campaign. The central message is clear and consistent and compelling. Harris has successfully communicated her story, her values, her vision and her specific policy agenda.</p>
<p>Her core message puts freedom and opportunity at its centre, drawing an increasingly sharp contrast with her opponent and detailing in specific, personal terms how her policies will help Americans to get ahead. Harris doesn’t shy away from making the stakes of this election clear, but she campaigns with joy and laughter and optimism, and she has built a big tent, promising to represent the interests of all Americans, regardless of how they vote.</p>
<p>Harris has performed consistently well under unimaginably enormous pressure. From her first rally after suddenly becoming the presumptive nominee, to her masterful debate performance in which she goaded her opponent into a full meltdown, to her commanding execution of a hostile interview on Fox News, to her exhilarating closing argument to 75,000 attendees last Tuesday at the Ellipse, Harris has continually met each moment of this astonishing campaign.</p>
<p>In choosing Minnesota Governor Tim Walz as her running mate, Harris eschewed the poll-tested cautious route and selected a charismatic, down-to-earth Midwestern progressive with a strong track record of achieving popular, effective policy results and a folksy way of piercing the mystique of condescending, self-important Republicans.</p>
<p>Meanwhile, the Democratic Party has built a massive outreach and get-out-the-vote organization to build on the momentum of the presidential campaign, channel volunteer enthusiasm and maximize turnout across a large, fractious anti-MAGA coalition spanning everyone from social democrats on the left through constitutional conservative Republicans on the right.</p>
<p>Their social media strike force has been agile, witty and prolific, relentlessly driving the Harris campaign’s themes in an often hostile landscape of large social networks designed to reward paranoia and enragement.</p>
<p>Overall, the campaign has been well organized and well funded and the strategy has been well executed. They have gone to all the places they needed to go and done all the things they needed to do to reach voters - especially low-propensity undecided voters in key swing states which, thanks to the caprices of the Electoral College, will decide the outcome of the presidential election regardless of the overall popular vote share.</p>
<p>With no serious gaffes or major missteps, Harris has given her opponents no real hooks on which to hang their criticisms - which, of course, has not stopped them from embracing wholesale shameless denial of reality to make their apocalyptic opposing case to voters.</p>
<p>Her opponent promises to round up and deport millions of people, give huge tax cuts to his billionaire friends, impose a massive new sales tax across the board on all imported goods, slash spending on federal public services by trillions of dollars, and exact retribution on his political enemies by transforming what remains of the federal government into his personal revenge machine.</p>
<p>After refusing to concede his electoral loss in 2020 and inciting a mass violent insurrection on January 6, 2021, Trump continues to deny that he lost and has made accepting his lie a condition of loyalty for members of his party.</p>
<p>Everyone who refused to bend the knee has by now been pushed out. Those who remain - and those who signed up to fill the void of the more principled - are either craven enough to parrot the lie or doctrinaire enough to believe it.</p>
<p>Trump’s daughter-in-law has taken over the Republican National Committee and reallocated the funding for its GOTV operation to a massive lawfare assault on the integrity of the 2024 election while Trump and his sycophants have been busy laying the groundwork to insist again that he won, no matter the actual results.</p>
<p>And he absolutely could win. The swing state polls have had the two candidates essentially tied since Harris launched her whirlwind campaign on July 21. The election could go either way, and no one will know the outcome until the votes have been counted and litigated after November 5.</p>
<p>There is no question that Harris deserves to win. She has run a much better campaign. She has been disciplined, consistent and forceful. She and her team have built the largest and most comprehensive ground game in American history.</p>
<p>She also has an army of lawyers ready to litigate the Trump campaign’s efforts to disqualify legitimate votes. No one can accuse her of throwing the game.</p>
<p>To the extent that doing real things in the real world still means anything, Harris has put in the work to secure a well-deserved victory in this surreal campaign, whereas Trump has run a wildly undisciplined campaign and outsourced his ground operation to a billionaire oligarch toady.</p>
<p>If Harris loses, there will be a firehose of recriminations from pundits and politicos claiming this or that strategic failure or unforced error or tactical oversight caused her downfall.</p>
<p>The plain truth is that if she loses, it won’t be because of any mistakes she made, no matter how much some people will want to shoehorn the result into their pet priors.</p>
<p>If she loses, it will be because Americans, by and large, looked at their choices and chose fascism.</p>
<p>The good news is that the outcome has not been written yet. There absolutely is time for a majority of Americans to decide that their republic is still worth protecting and preserving.</p>
<p>I’m not superstitious, but I am a little stitious, so I’m not going to make any predictions, other than this:</p>
<p>If enough Americans come together and reconstruct the anti-MAGA majority that defeated Trump in 2020, they absolutely will defeat him again in 2024.</p>
Ryan McGreal2http://quandyfactory.com/blog/271/our_media_platforms_are_failing_in_the_fight_against_fascism2024-10-11T12:00:00ZOur Media Platforms are Failing in the Fight Against Fascism
<p>I have a pet theory that fascism rears up every time there is a transformational new communications medium and the fascists are able to exploit the lack of filters and protections in the new medium. Over time, as people and systems adapt, the fascist impulse gets downregulated again.</p>
<p>But this time, for various reasons, the systems that operate our new communications media are actually doing progressively <em>less</em> to filter, downregulate and protect against fascism, not more, as they mature. This is both fascinating and terrifying.</p>
<p>On Facebook, they decided to take the easy way out and deprioritize or outright block all news reporting indiscriminately, instead of trying to filter the reliable news from the propaganda and disinformation. The result is that an entire cohort of social media consumers get almost no news whatsoever now.</p>
<p>Xitter, um, decided to go a different route. That site actively incentivizes the worst kinds of disinformation and even pays propagandists to spread it through revenue sharing. And its owner is out there every day promoting and boosting insane fascist conspiracy theories. </p>
<p>(And not for nothing, but he has also spent tens of millions of dollars funding a Super PAC that supports Republican campaigns and especially the Republican presidential candidate.)</p>
<p>Media sharing sites like YouTube, Instagram and TikTok have opaque algorithms that promote content based not on accuracy but on emotional intensity and similarity to previously viewed content. This has the effect of serving as an intake funnel into increasing radicalization.</p>
<p>The legacy news media are struggling to compete for attention with these new media platforms, and tend to lean into their own forms of sensationalism to try and remain relevant. In addition, squeezed for revenue, these companies are cannibalizing themselves, which further reduces their quality and reliability and make them a target of claims that the news media can’t be trusted.</p>
<p>To the extent that democracy requires a reasonably literate, well informed electorate, this media landscape is very bad news.</p>
<p>In the past, the mainstream media were a primary line of defence against rising fascist sentiment. The fascists themselves understand this, which is why they attack the legitimacy of the media so relentlessly and invest so heavily in creating their own parallel networks.</p>
<p>Essentially, today’s major media networks are all either: (a) recoiling from their responsibility to be a bulwark against disinformation; (b) losing the capacity to serve this role; or else (c) actively working to promote the disinformation and propaganda they are supposed to be guarding against.</p>
<p>It’s bad. Really bad.</p>
<p>In a not-crazy media environment, it would be unimaginable for the election between Kamala Harris and Donald Trump to be a statistical tie. In a not-crazy media environment, Trump would never have gotten within several miles of the nomination for one of the two major national political parties.</p>
<p>But that’s not the media environment we live in.</p>
<p>No matter who wins in November, a huge share of Americans inhabit a funhouse mirror view of the world. Bringing them back into some kind of shared understanding of reality is going to be a huge challenge under any media context, but probably impossible if the media platforms refuse to help.</p>
<p>I would like to end on a hopeful note, and it is this: we are not the first generation to face this challenge, and we can learn from how previous generations responded to it. Our media environment is new, but the basic task remains: to figure out how as a society we can agree on what is real.</p>
Ryan McGreal2http://quandyfactory.com/blog/269/the_conspiracy_to_steal_the_2024_election_is_hiding_in_plain_sight2024-09-25T12:00:00ZThe Conspiracy to Steal the 2024 Election is Hiding in Plain Sight
<p>It’s vitally important to understand the central truth about the way authoritarians think about power: they don’t care if you believe them when they claim something, they only care about having the power to make their claims stick, regardless of how many people actually believe them. </p>
<p>In some ways it’s better when most people don’t actually believe them, because it lets them show that the truth has no constraining power over them.</p>
<p>Authoritarian power-grab conspiracies that succeed don’t succeed because of secrecy. <a href="/blog/204/the_j6_committee_and_conspiracy_theories_vs_real_conspiracies">They succeed when knowing about them is not enough to stop them.</a></p>
<p><em>I can’t emphasize this enough.</em> TFG is not trying to win more votes. He is saying out loud, over and over again, that he plans to win by controlling how the votes are counted in the swing states. </p>
<p>His campaign isn’t even running a ground game. Instead, they’re openly running a full-court press against voters and voting.</p>
<p>His enablers in state governments are changing voting laws and regulations to suppress legitimate turnout by making it more difficult to obtain voting ID, aggressively purging voter registrations, cutting the number of polling stations in Democratic-leaning districts, even making it a crime to provide water to voters lined up for hours in the heat because there are so few polling locations.</p>
<p>They’re also attacking the mechanisms of voting itself, taking over key positions in state election commissions and implementing new rules - often blatantly illegal - designed to manufacture chaos when it comes to tabulating and certifying results. </p>
<p>This tactic creates space for the other part of their plan: To undermine public confidence in which candidate won a swing state so badly that it becomes effectively impossible to submit a clean slate of electors to the House. </p>
<p>Why does that matter? Glad you asked. </p>
<p>The theory goes that if the states can’t present their electors on time, or if the results are deadlocked, then it falls to the House itself to break the stalemate. And the current Republican House majority leader didn’t just vote against certifying the results in 2020, he actually led the House effort to overturn the 2020 election results through specious legal arguments. </p>
<p>Asked point-blank about 2024 this week, he said, “If we have a free, fair and safe election, we’re going to follow the Constitution.”</p>
<p>“If”.</p>
<p>Again, if this conspiracy succeeds, it won’t be because they managed to keep it secret. They’re doing it all in public view. </p>
<p>If it succeeds, it will be because they succeeded in seizing the apparatus of power and making their plan stick. </p>
<p>Mike Johnson has the power he has over the next election - as House majority leader and second in line to the presidency - because his fellow Republican party members decided that his efforts to overthrow the last election were not disqualifying. That was a choice to put power ahead of truth.</p>
<p>On the other hand, the state of Nebraska won’t make a last-minute change to their law apportioning electors to switch to a winner-take-all model because a single Republican state lawmaker - State Senator Mike McDonnell - stood up to the massive pressure from the MAGA movement and refused to allow a special session to enact the change. </p>
<p>This demonstrates the huge difference a single courageous person can make, but it also illustrates just how fragile the rule of law has become under the sustained assault of a party that no longer wishes to earn power by winning public support.</p>
<p>All of this is happening even as organized, coordinated campaigns of abuse and violence seek to drive good people out of public office and the machinery of democracy and civil service.</p>
<p>And despite all this, the outcome remains a toss-up just six weeks from election day.</p>
<p>I’m not American so I can’t vote. But the world is watching, and would-be authoritarians the world over are busy taking notes and cheering for their guy to win. </p>
<p>Thanks to political polarization and the Electoral College, the election will most likely end up being decided by around 50,000 votes in a handful of swing states. Every single vote matters. And every action taken to reach people and inspire them to vote for freedom and democracy is essential.</p>
<p>I wish I had a more inspiring closing note, but this is going to be a nail-biter and there is no magic wand to guarantee the outcome. </p>
<p>The good news is that this is also true for the people trying to stack the deck against democracy. </p>
<p>They’re trying, but they have not yet succeeded. </p>
<p>And if enough Americans come together to campaign for a more hopeful, more inclusive future, that hopeful goal is absolutely within reach. </p>
<p>The rest of the world is rooting for you to succeed in keeping your republic and carrying it forward. </p>
Ryan McGreal2http://quandyfactory.com/blog/268/vp_harris_must_seize_control_of_her_own_narrative2024-07-28T12:00:00ZVP Harris Must Seize Control of Her Own Narrative
<p>As Louis Pasteur famously said, <em>chance favours the prepared mind</em>. And the free world is most fortunate that Vice President Kamala Harris, suddenly the presumptive Democratic nominee for president, was prepared to seize the historic opportunity presented a week ago today when President Joe Biden yielded to mounting pressure from his party and announced that he would no longer seek re-election.</p>
<p>Harris has her work cut out for her, not only because she is not well-defined in the minds of many voters but also because she is about to face an extremely well-funded partisan media assault.</p>
<p>The right-wing rage machine is unburdened by the need for logical consistency, so it embraces a kind of natural selection process in which an army of trolls generates an array of different attacks on their enemy and then they check to see which attack resounds with voters. </p>
<p>They don’t need a theory of the case against Harris; they just need to keep generating more and more BS until they find something that sticks. Right-wing narratives resonate because they shamelessly adopt whichever narratives happen to resonate.</p>
<p>They haven’t found an effective narrative against Harris yet. And the quicker and more clearly Harris defines herself, the less attack surface the right will have to impose some other definition onto her. So far she is off to an excellent start, defining her temperament and her vision not only in relation to core American values but also in razor-sharp contrast to her opponent’s biggest weaknesses.</p>
<ul>
<li><p>She wants to expand your freedom. He wants to control your life. </p></li>
<li><p>She wants to move the country forward. He wants to drag it backward.</p></li>
<li><p>She stands for the rule of law. He makes a mockery of the rule of law.</p></li>
<li><p>She’s upbeat and hopeful. He’s grim and apocalyptic.</p></li>
<li><p>She’s a bit goofy. He’s deeply weird and creepy. </p></li>
<li><p>She laughs. He sneers. </p></li>
<li><p>She likes Venn diagrams, he likes violent 4chan memes.</p></li>
<li><p>She fights for women’s rights. He abuses and demeans women. </p></li>
</ul>
<p>Harris also has another advantage: the modern right is so terminally online and so up its own ass that it can’t help reaching to an ugly combination of lazy sexism/racism and obscure references from the right-wing rabbit hole that swing voters find super-weird and off-putting.</p>
<p>But they’re also ruthless and relentless, and they will keep grinding and grinding until they find an attack that works, no matter how ugly or absurd. So Harris and her campaign team need to move fast to build on their early and really extraordinary success striking a new and energizing tone. </p>
<p>In 2020, Harris struggled to find her voice. After a couple of early comms missteps in her Vice Presidency, the Biden administration seems to have withdrawn her from a lot of high profile media appearances. It’s possible that fear of letting her upstage Biden may have also played a role.</p>
<p>What her incredible launch into the position of presumptive Democratic nominee tells us is that she spent that time out of the harsh media glare wisely. </p>
<p>She has been doing the hard work to build relationships throughout the party, mostly through the kind of smaller personal interactions at which she has always excelled. So when President Biden made his history-making announcement and then endorsed her to replace him, she was able to leverage her party relationships to line up enough delegates and party leaders to lock up the nomination.</p>
<p>Additionally , and just as importantly, Harris presents as refreshingly authentic and comfortable and clear in her persona and power and conviction, and that resonates better than any crass political hit job ever could.</p>
Ryan McGreal2http://quandyfactory.com/projects/266/introducing_catgpt2024-05-22T12:00:00ZIntroducing CatGPT
<script>
catgpt_words = ['meow', 'meow', 'meow', 'maw', 'mee', 'yow', 'mom', 'now', 'neow', 'naw', 'wow', 'mah', 'nah', 'hiss', 'hiss', 'purr', 'purr', 'hiss', 'meow'];
catgpt_seps = [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '? ', '. ', '. ', '. ', '! '];
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function catgpt_generate_response() {
prompt = $('#catgpt_prompt').val();
$('#catgpt_reponse').val('');
words = Math.floor(Math.random() * (100 - 20) + 20);
response = [];
for (var i = 0; i < words; i++) {
this_word_index = Math.floor(Math.random() * (catgpt_words.length));
this_word = catgpt_words[this_word_index];
response.push(this_word)
this_sep_index = Math.floor(Math.random() * (catgpt_seps.length));
this_sep = catgpt_seps[this_sep_index];
response.push(this_sep)
response_string = response.join('');
console.log('response_string = ' + response_string);
this_delay = Math.floor(Math.random() * 200 + 20);
console.log('this_delay = ' + this_delay);
await sleep(this_delay);
$('#catgpt_response').val(response_string);
}
$('#catgpt_prompt').val('');
narrative = $('#catgpt_narrative').html();
narrative = narrative + '<p><strong>' + prompt + '</strong></p>';
narrative = narrative + '<p>' + response_string + '</p>'
$('#catgpt_narrative').html(narrative);
}
</script>
<div>
<label for="catgpt_prompt" id="catgpt_prompt_label">Prompt:<br/>
<textarea id="catgpt_prompt" name="catgpt_prompt" placeholder="Enter your prompt here:" style="height: 24px; max-width: 90%;"></textarea>
</label>
</div>
<div><button id="catgpt_generate_response_button" name="catgpt_generate_response_button" onclick="catgpt_generate_response()">Generate Response</button><br/></div>
<div>
<label for="catgpt_response" id="catgpt_response_label">Response:<br/>
<textarea id="catgpt_response" readonly="readonly" name="catgpt_response" style="height: 100px; max-width: 90%;"></textarea>
</label>
</div>
<div id="catgpt_narrative">
</div>
Ryan McGreal2http://quandyfactory.com/blog/265/modern_life_is_rubbish_is_not_rubbish_after_all2024-05-21T12:00:00ZModern Life is Rubbish is Not Rubbish After All
<p>In the early 1990s, there was a record store in Westdale on King West near Newton where you could actually listen to a CD before choosing to buy it. </p>
<p>When the second Blur album, <em>Modern Life is Rubbish</em>, came out, I rushed to the store to check it out - and I hated it. I was expecting another baggy tour-de-force like <em>Leisure</em>, but instead I got something sounding like mid-career Kinks and I was put off.</p>
<p class="image">
<img src="/static/images/modern_life_is_rubbish.jpeg" alt="Modern Life is Rubbish"></img>
</p>
<p>So I didn’t buy it. Of course, I came back into the fold with Parklife, and have remained a Blur fan ever since. But for whatever reason I never circled back to <em>Modern Life</em>. </p>
<p>Until now. I’ve been listening to it all weekend and I honestly don’t know what was wrong with me. The album is delightful! </p>
<p>It’s a rich serving of proto-Britpop with all the hallmarks that would characterize the Blur sound for the rest of the decade: the zany mishmash of British Invasion, post-punk and Baroque chamber music, the lush harmonies, elaborate melodies and chord progressions, the playful and dissonant guitar work, the quirky syncopated rhythms, the cheeky observational lyrics - a fully realized, coherent expression of a discrete musical worldview. </p>
<p>So to <em>Modern Life is Rubbish</em>, I offer my apologies for having dismissed you out of haste and distorted expectations, and I look forward to continuing to try and make up for lost time.</p>
Ryan McGreal2http://quandyfactory.com/blog/270/modern_life_is_rubbish_is_not_rubish2024-05-21T12:00:00ZModern Life is Rubbish is Not Rubish
<p>In the early 1990s, there was a record store in Westdale on King West near Newton where you could actually listen to a CD before choosing to buy it. </p>
<p>When the second Blur album, <em>Modern Life is Rubbish</em>, came out, I rushed to the store to check it out - and I hated it. I was expecting another baggy tour-de-force like <em>Leisure</em>, but instead I got something sounding like mid-career Kinks and I was put off.</p>
<p>So I didn’t buy it. Of course, I came back into the fold with Parklife, and have remained a Blur fan ever since. But for whatever reason I never circled back to Modern Life. </p>
<p>Until now. I’ve been listening to it all weekend and I honestly don’t know what was wrong with me. The album is delightful! </p>
<p><img src="https://quandyfactory.com/static/images/IMG_4969.jpeg" alt="Modern Life is Rubbish" /></p>
<p>It’s a rich serving of proto-Britpop with all the hallmarks that would characterize the Blur sound for the rest of the decade: the zany mishmash of British Invasion, post-punk and Baroque chamber music, the lush harmonies, elaborate melodies and chord progressions, the playful and dissonant guitar work, the quirky syncopated rhythms, the cheeky observational lyrics - a fully realized, coherent expression of a discrete musical worldview. </p>
<p>So to <em>Modern Life is Rubbish</em>, I offer my apologies for having dismissed you out of haste and distorted expectations, and I look forward to continuing to try and make up for lost time.</p>
Ryan McGreal2