Josh

I don't think eliminating religion would eliminate magical thinking. Religious beliefs are, fundamentally, social, the result of psychological pressures inherent in the human psyche, and, therefore, will continue to exist. My only hope is that fewer irrational precepts — purity culture, abstinence education, opposition to early-term abortion and sex work, end-of-life autonomy, and harm reduction — would enjoy the untouchable social and political armor it seems to provide.

Josh

[Meta] This app has, for the past couple of months, admirably served exactly the purpose I had for it. There are, of course, some rough edges - all involving Quill and rich text. Otherwise, I am quite pleased.

Josh

Operation AIPAC Fury looks like it's off to a Roaring lamenting-the-loss-of-U.S.-sovereignty success.

Josh

It was difficult to have correct historiosocial analysis of this particular ethnic conflict in 2023. It seems, at least, that most democratic voters see it now. 17% of Democrats say their sympathies are more with the Israelis. What percent of elected Democrats?

Josh
The lawsuit alleges that Tesla marketed its “Full Self-Driving” package as though the vehicles were equipped with the hardware needed for complete driverless operation at a time in the near future. Many drivers purchased or leased Tesla vehicles and paid thousands of dollars for the feature, believing their cars could soon operate without human control.
The lawsuit alleges Tesla has not delivered on those promises. It further alleges that despite updates and marketing statements, the company has not demonstrated the ability for its vehicles to complete a fully autonomous drive or obtained the certifications required for driverless operation in California (California DMV Autonomous Vehicle). This central issue is at the heart of the Tesla Self-Driving Lawsuit.
Josh

おお!

Josh
We must speak clearly about the management of platforms such as X and the vision of figures like Elon Musk. Freedom of expression is not the right of a magnate to buy the public debate and manipulate it through algorithms that amplify confusion. Spain will move forward with legislation under which technology executives will assume direct criminal liability for serious violations on their platforms. The era of hiding behind servers is over. - Pedro Sánchez Prime Minister of Spain
Josh

スペイン語を勉強するために、日本語の勉強を休んだ。今年四千単語を学ぶつもりだ。もう二千を覚えた。行くぞ!

Josh
The White House has become a non-stop corruption machine. Never, ever before in the history of the country has the president of the United States so openly, so brazenly, so consistently worked to use the immense power of the presidency to enrich himself. Never before in the history of the nation has something like this happened. In secret, the president of the United States taking payments from foreign governments – put in his own pockets – and then handing them national security favors that the United States had never been willing to do in the past. - Sen. Chris Murphy
Josh

If American conservatives were adults instead of petulant children - or supporters of everything they claim to hate about MAGA - they'd have supported Kamala Harris' center-right bid for presidency. Portuguese conservatives have gone further to keep the far-right from power: supporting António José Seguro, a socialist.

Josh
Kompromat is a Russian term for "compromising material"—damaging information, photos, or documents gathered, often by intelligence agencies, to blackmail, manipulate, or discredit public figures. Originating in 1930s Soviet secret-police jargon, it is used for political leverage or ensuring loyalty.
Josh

I recently passed another birthday and realized fully-well that I am staring down 40. This moment has given me pause to think: what goals have I set to now that I will regret if I have not accomplished them by 40? I took several years away from studying Japanese to get fluent in Spanish. I'd reached N4-N3, with a vocabulary several thousand words deep. I'd logged 225 days on Bunpro, and many more dozens of hours consuming input. I knew hundreds of kanji. Having begun to study Japanese in 2008 or so, it feels like my white whale. With three years left on the clock, there's still time to reach N2, ね? With so much code to write, and math to study, maybe it will always remain out of reach...

Josh

To the surprise of nobody: it is obvious that Iran's theocracy is problematic, and has produced a terrible human rights record. It is equally true that Israel's ethnocracy is problematic, and has produced a terrible human rights record. Neither make good friends for liberal - secular and ethnically-inclusive - Americans.

Josh

Tech billionaires fuel Donald Trump’s $429mn haul ahead of midterm elections. Corporate America's corruption out is in the open. The American government as a social project that provides a fair foundation to the benefit of all of us is dead.

https://archive.is/JMwsu

Josh

I will also finally get off Google's email platform and office suite, and move fully to Proton Mail. I'm tempted to put Linux on my Lenovo Legion — with LLMs, maybe it's finally the year of the Linux desktop?

Josh

The boycott list:

  1. Meta
  2. Twitter/X/Tesla/xAI/SpaceX
  3. Google
  4. OpenAI
  5. LinkedIn
  6. Amazon (this one's the most difficult)
  7. Microsoft
  8. Oracle

It isn't a perfect boycott, but the goal is maximally to reduce my personal contributions to the revenues of any company that financially or politically has contributed to MAGA.

Josh

Little one was home again today. Day care has been closed four days this week. I laid down with them around 1 p.m. so that they'd take a nap while mamá was out for an appointment. Papá accidentally took a nap too - and woke up past 4 p.m.!

Oops.

I've so far kept up with my self-directed 30 days of scikit-learn.

Today: SVMs with different kernels (linear, polynomial, rbf, and sigmoid, special thanks to this article for helping me to understand their differences and uses).

Tomorrow: `from sklearn.naive_bayes import GaussianNB`

📊🎉

Josh

Top review for the Melania Trump documentary: "if it was shown on a plane people would still walk out" ☠️

Josh

accidentally just spent nearly four and a half hours watching gettysburg (1993). visually stunning, accurate to my historical recollection and visits to the battlefield. pretty great film!

Josh

Quantum algorithms exploit interference - the alignment and cancellation of amplitudes - to outperform any classical probabilistic method. In quantum programming, interference is our power tool: we engineer it to build up correct answers and erase the wrong ones.

— Michael Nielsen, Isaac Chuang, Scott Aaronson

Josh

The gate logic is trivial enough, and I understand the advantages of taking a fuzzier, probabilistic (ok, yes, "precisely probabilistic", and yes, the interference effects are very neat) view towards the result of a computation. The obvious question once one realizes the feasibility of developing a Turing-complete computer using quantum gates is: what does it take to build physical qubits?

Josh
HRANA – On the twenty-sixth day of nationwide protests, according to aggregated data compiled by HRANA, the number of confirmed fatalities has reached 5,002, while the number of deaths still under investigation has risen to 9,787. In addition, at least 7,391 people have suffered serious injuries during the protests, and the total number of arrests has increased to 26,852. These figures were recorded under circumstances in which, just one day earlier, official authorities, by citing significantly lower numbers reportedly issued by the Legal Medicine Organization, attempted to solidify the government’s official narrative regarding the killings. At the same time, the internet shutdown in Iran, now approaching its third week, has continued unabated.
Josh
I have a poet friend
    let poet = Friend(Names.Persephone);
She's kind and she's rad
    poet.set('crunchy vibe', true)
She's AWAKE she's got that third eye open energy
    she's making the world a better place
        and she
✨ doesn't take shit from anybody
(gracias por todo tu querer, apoyo y amistad, tía.)
Josh

On Charles Koch and the scam of right-wing philanthropy

Right-wing “solutions” keep failing to meet the most basic needs of tens of millions of Americans. We know that these failures are neither failures of imagination, nor a design flaw, but the intentional outcome of neoliberal institutional design. When Charles Koch announces a new non-profit, it communicates recognition that the price he's paid for stability is too low; the stability isn't there. American plutocrats have been getting away with paying too little to keep the masses content, and now they're nervous about the consequences. Charles Koch in particular has spent decades funding efforts to shrink the welfare state, and now his network is funding an initiative to address... the wholly predictable social fraying that occurs when communities can no longer cooperate to solve problems together, but each person is treated as an individual with few means of cooperation beyond for-profit economic transactions. In its place is growing populist sentiment, and extremism. If we are fortunate, before American society becomes more precarious, or even collapses under the weight of capitalism's well-known, studied, and understood internal contradictions, some relief to “the masses” - the non-owners who vote but who have no real power in the political system that makes decisions despite their needs, or analyses - might come to fruition. If it does, great for us! Capitalists of the future: take note that the cost of stability is not inexpensive, but it is a necessary expense. If not, and inequality and the exigencies of capital growth continue to create intolerable conditions for those who must live under their physical and psychological burdens, whose bodies and attention are a valuable resource, and the basis of all wealth, then socialism will come sooner rather than later.

Josh

“Through state-owned organizations, as well as the broader public sector, [Nordic societies] disprove the belief that governments stifle innovation. Moreover, Nordic governments show how to use new technologies to solve the biggest social and environmental problems while ensuring the disruptions and gains of innovation are distributed fairly.”

Josh

“It is so fucking wild to me, how skepticism toward American intervention abroad is still waved off as knee-jerk lefty radicalism, as if the last quarter-century never happened. The recent history of U.S. meddling in the Middle East - wars sold on false premises, states shattered rather than stabilized, millions killed, tens of millions displaced, trillions wasted, resentments deepened for generations - ought to have made caution a baseline, not a fringe posture. Opposing yet another intervention isn’t a matter of ideological purity or reflexive anti-Americanism; it’s the only rational response to a track record of catastrophic unintended consequences that we seem determined to forget.”

— Freddie deBoer

Josh

“Call it democracy, or call it democratic socialism, but there must be a better distribution of wealth within this country for all God’s children.”

— Martin Luther King Jr.

Josh

I pay for YouTube premium to not see ads, but every video now has sponsored content. Why am I paying YouTube?

Josh

Also pushed a quick fix to hide the language selection UI for code blocks. It's not needed when rendering a post; I know what language I'm putting into the editor when I write it! No big changes today unless I start feeling super motivated later, trying to find the willpower to get invested elsewhere... on a Sunday.

Josh

Dad hack: the little one didn't want to sleep, but they were complaining a lot as if they were tired. I started reading to them about cosmology and the big bang. BOOM! Right to sleep.

Josh

TODO: There's a bug with link previews: if you post a link whose description is too long, it won't trim the description. Instead, it will simply fail to insert it into the database. What should happen instead: if a page's og:description is longer than expected, we trim it, and append ellipsis.

There was a bug posting link previews with long descriptions 💪🏻

Josh

Use case for another user type? If the focus of this platform is rich text, why not poetry, and let some poet friends try it out?

Josh

I'm having Claude Code assist me in a major refactor of Apollo. The plan is to break it up into a few smaller modules: apollo-core, apollo-doobie, and apollo-http4s. Claude produced a PR quickly enough. The challenge: how do I, the senior engineer, know that Claude's code works? It's a huge PR that touches the entire project, surely you can't just trust the LLM. At least not yet. So: I set about to update the Apollo giter8 template to use the refactored version of Apollo. Note to self: yes, you need automated tests. Claude Code was less reliable here, but I ended up getting everything I needed from Tertulia and produced a working version. Next steps: I think the Claude PR is safe to merge, but with some caveats associated with the build system. Still, I think the safe thing to do is to copy a clean version into Tertulia's monorepo first, make sure everything works, then mint a new version. Once Tertulia's happy with the refactor... I'm pushing to Maven Central! And once that's done, I'll pull Tertulia off the monorepo to become Apollo's first user.

Josh

Finished what I started: Tertulia's login pages now override the newly overridable Apollo defaults. I tested them, they work great (well, except the part about Mailgun not working from this domain yet).

Configuring Apollo is super slick now:

apollo = Apollo(
config = ApolloConfig(
csrfTokenKey
),
templates = ApolloTemplates(
auth = (csrf, focus, flash) => html.auth(csrf, focus, flash),
forgotPassword = (csrf, flash) => html.forgotPassword(csrf, flash),
resetPassword = (csrf, error) => html.resetPassword(csrf, error)
),
services = ApolloServices(
user = userService,
confirmation = confirmationService,
mail = mailService,
session = sessionService,
reset = resetService
)
)

AuthRoutes.routes[F, User, Mailgun.Email, UserId](apollo)

Shout out to Claude for the assist converting my hand-written Bootstrap-using templates into nice, clean Twirl.

🎉

Josh

Running toy datasets through scikit-learn, with Claude's assistance, and confusion matrices and the classification report came up.

uv run python .\main.py
Confusion Matrix:
[[14 0 0]
[ 0 14 0]
[ 0 0 8]]

Classification Report:
precision recall f1-score support

class_0 1.00 1.00 1.00 14
class_1 1.00 1.00 1.00 14
class_2 1.00 1.00 1.00 8

accuracy 1.00 36
macro avg 1.00 1.00 1.00 36
weighted avg 1.00 1.00 1.00 36

I did some digging through the documentation and learned:

The precision is intuitively the ability of the classifier not to label a negative sample as positive. The recall is intuitively the ability of the classifier to find all the positive samples.

My rough understanding here is that if false positives are costly, you want your model to be more precise, and if false negatives are costly, you want to ensure your model has good recall. The F1-score balances precision and recall equally, which is tunable using F-beta: beta > 1 favors recall, beta < 1 favors precision.

The F-beta score weights recall more than precision by a factor of beta. beta == 1.0 means recall and precision are equally important.
Josh

Creating a Python environment using `uv` is super simple, and the tooling looks nicer than other Python virtual environments I've seen in the past. The wrapper around venv is nice:

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
uv init 30-days-of-scikit-learn
cd .\30-days-of-scikit-learn\
uv add scikit-learn pandas

Then, write your Python code:

from sklearn.linear_model import LinearRegression

model = LinearRegression()
model.fit(X_train, y_train)
predictions = model.predict(X_test)

And run with `uv run python .\main.py`!

🎉

Josh

Despite the President's campaign of retribution in Minneapolis, and today's threat to invoke the Insurrection Act, we're still following what's happening in Gaza.

According to a 2024 U.N. report, rebuilding Gaza's shattered homes will take until at least 2040. – Reuters
Josh

Link previews are a hard problem for a small platform like this: everyone treats your platform as if you're a scraper and returns 403: Unauthorized. And CORS prevents you from using the user's JavaScript client from grabbing metadata too!

Josh

I really and simply don't understand how Musk's open fascism hasn't decimated Twitter's user base. Sure, their numbers are down by tens of millions, but Bluesky isn't up tens of millions of users. Bluesky is trending largely negative, closer to 1 million daily active users (DAU), down from a peak of nearly 1.5 million. Global politicians and mainstream media still use Twitter, despite that it's become a biased, Nazi-infested cesspool, where its owners presence and the platform's biases are inescapable, and, in many cases, actively work to prevent the world they'd personally like to see, or are working towards. Why?

Josh

f^(x)=f^(ξ)e2πiξxdξ\hat{f}(x) = \int_{-\infty}^\infty \hat{f}(\xi)\,e^{2 \pi i \xi x}\,d\xi

Josh

Back in my day…

Back in my day, you didn’t have to learn CSRF, CORS, and TLS to get a website running, you’d just slap some PHP tags into your HTML, maybe a head block at the start of your page for a database connection, and Apache would dutifully host your slapdash, insecure website, and it would mostly work on the Internet. Not so today — every step of the way building even this simple microblogging platform has been a learning experience. I realized while refactoring Apollo’s password reset and recovery endpoints that it probably took me several weeks to figure out what was going on with Http4s’ CSRF implementation well enough to create the middleware that does what I want: attaches the CSRF token to the request so that it can be rendered as HTML to a form. Meanwhile, I forgot about several design decisions I made early just to get the forms working, also before I’d written my cookie-based flash message system. I remember my first web application: I downloaded a PHP “login system” system someone had posted to a forum… somewhere, and I wrote an online game. I knew even fewer of the parts. In terms of web application software, I really do feel like I’m at the pinnacle of my abilities: I am skilled in type safe, functional programming, I know the web stack all the way down to the wire and all the way up to high-level, complex single page application frameworks and architectures. Never wrote a compiler, though, and my current side project (to this side project) is to build a Hack computer from transistors.

The little guy’s at daycare, time to make the donuts 🍩

Josh

When people perceive legitimate channels (courts, elections, peaceful protest) as closed off or ineffective, and when state violence continues without accountability, some portion of a movement tends to radicalize. The basic lesson from history here, and risk to national security, is that if the U.S. immigration authorities crack down further on dissent, and kill additional protesters, and the legal forms of grievance prove ineffective in the face of impunity for crimes committed against the American public, dissent might drive radicalization, and devolve from protests to become an insurgency with guerrilla tactics of the kind seen in insurgencies from Northern Ireland to Vietnam. This is not a prediction; I am not calling for violence; it's a risk assessment.

Josh

YouTube embeds now work, check it out:

I also added custom url previews for links to bsky.app, so they look more like quoted posts and less like article previews.

Josh
I don't understand how anyone can watch how blatantly Grok is manipulated to answer the way ownership desires it to and then act like the other LLM chatbots couldn't possibly be similarly but less obviously compromised to produce responses in whatever way corporate interests and priorities dictate.
Josh

My primary critique of Abundance echoes this one from Sandeep Vaheesan: essentially, Democratic industrial policy is stuck in a rut. Democrats do not believe in the public production of goods. Instead, we give private producers of goods public dollars and pray they won't raise prices, because Democrats are also against price controls. From postsecondary education to healthcare and housing, it is painfully obvious to any American suffering for want of housing, healthcare, and education — and unwilling, or unable to pay additional rents in the form of interest on top of inflated prices — that this does not work. Or, to be more accurate: it delivers temporary benefits before making everything more expensive. Private interests in capitalism are profit seeking: if you give them money, they are required by the logic of the system to try to get more of it. The cronyism decried by libertarians and neoliberals is not an aberration, it is a competitive adaptive behavior inherent to the exigencies of the economic system itself.

Josh

This service is now... tertulia.social!

tertulia: f. Reunión de personas que se juntan habitualmente para conversar sobre algún tema.

It's getting late and I'm out of steam, but accomplishments: domain name ✅ big Apollo Auth refactor is mostly completed also, I should soon be able to override its templates by overriding the new ApolloTemplates case class:

case class ApolloTemplates(
auth: (String, String, Option[Flash]) => Html,
forgotPassword: (String, Option[Flash]) => Html,
resetPassword: (String, Option[String]) => Html
)

object ApolloTemplates {
def defaults: ApolloTemplates = ApolloTemplates(
auth = (csrf, focus, flash) =>
html.authForm(csrf, focus, flash.map(f => (f.cssClass, f.message))),
forgotPassword = (csrf, flash) =>
html.resetRequestForm(csrf, flash.map(f => (f.cssClass, f.message))),
resetPassword = (csrf, error) => html.changePasswordForm(csrf, error)
)
}

object Apollo {
def apply[F[_], U, I, E](
config: ApolloConfig[F],
services: ApolloServices[F, U, I, E]
): Apollo[F, U, I, E] = Apollo(config, ApolloTemplates.defaults, services)
}

I fixed a few bugs also where POSTs to Apollo endpoints would render immediately instead of redirect to GETs on error.

🎉

Josh

Ah, before this becomes a question: yes, I'm using LLMs to work on this project. Apollo, the authentication framework for Http4s I used as the backbone of this application, has been written almost entirely by me personally. It is the result of years of studying functional programming and web application software, e.g. servers, frameworks, and protocols. It has cool, funky type signatures like `OptionT[F, Throwable, Option[Post]]`, and `Kleisli[F], Request[F], Response[F]]`, and I know exactly what problems they help to solve, how they work, and why they're there. However, recently I've been using Claude Opus 4.5. A lot of the code for this microblogging platform in particular was generated by Claude, although the application itself was my idea, and I've made the decisions about architecture and libraries, etc. Claude's a pretty good designer and UI/UX engineer. I've also written a non-trivial amount of its code too: Claude is good, but it still whiffs often enough and I have to intervene.

So, thanks for the help, Claude and Anthropic!

Josh

Why are young Americans rejecting the two major political parties?

A hypothesis:

The Republican Party doesn't reflect their values.

The Democratic Party doesn't meaningfully change anything: its preferred tools, supply-side handouts, predictably increase costs, invite regulatory capture and rent-seeking, and eventual political rollback. We find ourselves surviving from crisis to crisis because our ‘fixes’ are expensive, unstable stopgaps rather than durable, structural solutions.

Josh

Iran is a victim of American imperialism. In 1953, democratically-elected Prime Minister Mohammad Mosaddegh was overthrown in a coup d'état orchestrated by the United States and the United Kingdom, at the behest of British Petroleum after Mossadegh nationalized Iran's oil resources and refused to concede a more profitable arrangement to the western powers. The Americans — the CIA — called this Operation Ajax.

This is peak Cold War logic: oil, an important natural resource, had been nationalized; the United States has, historically, frequently rejected nationalization as a form of theft (cue protest by Pierre Proudhon); the U.S. wanted access to that natural resource, or, at least to ensure it was inaccessible to its rivals, and thus it acted to "secure its interests."

This is well-known history, I have nothing to add.

However, I do want to comment on a weird, problematic trend I've seen repeatedly on the American left: this tendency to support all anti-American governments under the banner of anti-imperialism.

Iran, after its 1979 revolution, came to be an authoritarian, theocratic state. Even if the United States did not exist, Iran would not be an ideologically safe place for anyone who isn't part of the in-group in power. It is a country where atheists, like Yousef Mehrdad and Sadrollah Fazeli Zare, are murdered by the government for not being superstitious, to say nothing its its other extreme, reactionary and religious biases. LGTBQ+ Iranians can be, and are, harassed, arrested, and detained based on perceived sexual orientation or gender identity.

Therefore, I call upon the American left in general: the enemy of my enemy is not my friend. Israel is engaged in ethnic cleansing backed by the U.S. Iran is a theocratic terror state. Resistance against the worst excesses of U.S. behavior can be done without running interference for religious bullies abroad — we have our own problems with superstition and mass cults in this country.

Support Iranians in their bid for freedom. A better world is possible only with a free Iran.

Josh

I made a few little updates today: posts now show the time of the post, and you can get a post's permalink by clicking on the time it was posted. I added OpenGraph metadata to the single post view too, for platforms that render link previews.

Josh

US Justice Department serves Federal Reserve with grand jury subpoenas

The threat of criminal charges is a consequence of the Federal Reserve setting interest rates based on our best assessment of what will serve the public, rather than following the preferences of the President. — Jerome H. Powell
Josh

Reporting can inform. It can also pacify. Remember that for change to come, for there to be justice for Renee, and a future without ICE killings, we must act — loudly, firmly, and without yielding — against what we cannot tolerate.

Josh

weekend with friends. we're happy to see them. when your traditional community is gone, you build new ones. networks still matter, the biological context merely gets erased. ok, more likely: selection pressures have changed. ideology doesn't beat nature still. their name is 592a70e5-77c9-49a9-a4c0-b73c054ab942. congratulations! it's a... homo sapiens 🎉

Josh
[Vice President JD Vance] knows. He doesn't care. Vance’s twisted and wrongheaded view of Christianity has been repudiated by two popes. His Catholicism seems to be little more than a political prop, a tool only for his career ambitions and desire for power.
The vice president's comments justifying the death of Renee Good are a moral stain on the collective witness of our Catholic faith. His repeated attempts to blame Good for her own death are fundamentally incompatible with the Gospel. Our only recourse is to pray for his conversion of heart.

https://www.ncronline.org/opinion/ncr-voices/catholic-vice-president-vance-takes-social-media-justify-killing-renee-good

Josh

explaining to my friends that i didn't build a blog (lame) but that i built a multi-user microblogging platform (believe it or not, even more lame)

Josh

implemented a couple of bugfixes this morning:

  1. bulleted lists should now render properly
  2. the previous fix introduced a minimum height to the body of a post, this has been fixed also

off to the real world ☕

Josh

Paul Krugman here dispels Trump's Venezuelan oil boondoggle: Venezuela's extra-heavy Orinoco crude is only worth extracting if the price per barrel rises above $80. Current business model for American producers requires oil to stay above $62. Trump allegedly wants oil to drop to $50 per barrel. Seeing a math problem? Stated more explicitly: how does a resource that costs $80 per barrel to extract get us to $50 per barrel? It doesn't: at best, Venezuelan oil must appear, from the American perspective as a hedge against high oil prices, for instance those seen during global conflict.

https://paulkrugman.substack.com/p/the-emperors-new-oil-wealth

Josh

¡hola mundo!

as of around 02:25 this morning, this microblog is LIVE. yes, this a place for me to post my thoughts on things, but it is also the test application for the authentication library i'm writing for the Scala/http4s ecosystem, Apollo (https://github.com/joshuakfarrar/apollo)! which, i can confirm here, appears to work kind of alright. i really like the scala programming language, i really don't like the open source tooling available in the scala ecosystem. unlike ruby or javascript, where there's a gem or an npm module for lots of things, especially commoditized workflows like user registration and authentication, Http4s really has no such solution. i imagine every http4s application that has auth has a custom-rolled auth implementation. having build one, i can say with confidence, understanding and trying to sort out issues with the default csrf middleware is enough to drive one mad.

anyway... features! or, at least, upcoming features for apollo:

Apollo

  1. consider migrating from jdbc to skunk
  2. to deploy more easily to this web host, i migrated from sql server, which i was using in development, to postgres
  3. so long as we provide the correct interfaces, it might not be an issue to use doobie for somethings and skunk for pg, but it might be annoying to maintain
  4. purpose of this story is to assess level of effort
  5. https://typelevel.org/skunk
  6. ability to roll apollo's migrations into your applications' migrations
  7. i'm looking at dumbo
  8. https://github.com/rolang/dumbo
  9. ability to roll apollo's Twirl templates into your application, so that your styles can be applied
  10. Maven
  11. i had to monorepo apollo-auth to get this microblogging platform built on the deployment server, i'd prefer to rely on maven instead, or figure out how to get maven to reference and build a dependency from github, e.g. i think gems can do this if you specify a github url to a gem

This Microblog

  1. link previews! image posts!
  2. better error handling!
  3. fediverse?

🎉

Josh

hello pg

  1. user account creation "failed", never received e-mail but confirmation was created in the database
  2. manual confirmation from code in database succeeded
  3. password reset also does not send e-mail, there seems to be a mailgun issue of some kind
  4. the app still allows unverified users to log in?
  5. i think we still need a "resend verification e-mail" link
Josh

everything basically works

error handling could be a bit better, but flash messages will take a few hours to implement from apollo into this application and right now i'm the only person who will see them

also, i have no means by which to have apollo's forms share styling with the front-end, you get what it gives you, that's it

i'll have to do some research to re-familiarize myself with how devise handles this, i remember at least that it creates copies of templates then overrides the defaults with those from your application

link previews and image uploads are coming soon too, link previews will be first because although i'll have to write a fetcher and parse opengraph tags from html, they're easier to store than dealing with uploads and file storage

also todo is to set up a devops pipeline to... somewhere, i haven't decided yet

Josh

today the united states has illegally captured the leader of a sovereign foreign state

it has charged nicolás maduro with crimes that are beyond its jurisdiction to prosecute

it is abundantly clear that national sovereignty is contigent upon u.s. approval

which is not sovereignty at all, but the old logic of imperialism

i condemn the actions of the united states as wrong-headed, destabilizing, and nothing less than a robbery

permanent stability in latin america can only be achieved by meeting the human needs of the people who live there, not by the imposition of an extractive regime

Josh

it has been nearly a year since i deleted all of my personal social media accounts

no facebook, no twitter/x, no instagram

i even canceled my linkedin subscription, which i'd kept for professional purposes, due to their ice ads. spotify too

i doomscroll far less, and spend more time writing code, playing with my son, play bass, or studying

literally any other use of your time is better

this year, you should also unplug from for-profit social media