Compare commits
No commits in common. "2921474eb4959afb89e9853f72d81f4e2e40e8a2" and "70a1460e8c9e1d63f71f61757d226e615fecaf7d" have entirely different histories.
2921474eb4
...
70a1460e8c
5 changed files with 0 additions and 120 deletions
|
|
@ -1,25 +0,0 @@
|
||||||
id: ai
|
|
||||||
title: AI
|
|
||||||
date_created: 2024-08-08
|
|
||||||
date_last_updated: 2024-08-08
|
|
||||||
description: How I use AI.
|
|
||||||
---
|
|
||||||
<h2>AI</h2>
|
|
||||||
<p>
|
|
||||||
Common page I am seeing start to show up is an AI page explaining how creators use AI in their writing.
|
|
||||||
Along with some general thoughts on the topic.
|
|
||||||
Especially these days it seems like a useful page to have so here goes.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
I don't use AI in my research, coding, or in any of my writing.
|
|
||||||
I am not against AI in principle, just this incarnation of it with LLMs.
|
|
||||||
The way that the models were created, trained on so many people's work without permission.
|
|
||||||
The massive amount of computation and therefore energy, water, etc. that they use.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
That is why I don't use them in general.
|
|
||||||
I could see in the future if these issues were addressed.
|
|
||||||
If we had fairly trained models that were unbelievably more efficient and economical to run.
|
|
||||||
I may use them for work, but I don't see them ever touching this website or personal projects.
|
|
||||||
I do these things for the joy of doing them, and I don't want to give up any of that process.
|
|
||||||
</p>
|
|
||||||
|
|
@ -1,89 +0,0 @@
|
||||||
use crate::database::PsqlData;
|
|
||||||
use futures_util::TryStreamExt;
|
|
||||||
use serde::{Deserialize, Serialize};
|
|
||||||
use sqlx::{self, postgres::PgPool};
|
|
||||||
use std::error::Error;
|
|
||||||
use time::Date;
|
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize, PartialEq, PartialOrd, Clone, sqlx::Type)]
|
|
||||||
#[sqlx(type_name = "link_type", rename_all = "lowercase")]
|
|
||||||
pub enum LinkType {
|
|
||||||
ARTICLE,
|
|
||||||
BLOG,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize, PartialEq, Clone, sqlx::FromRow)]
|
|
||||||
pub struct Link {
|
|
||||||
pub id: i32,
|
|
||||||
pub url: String,
|
|
||||||
pub description: Option<String>,
|
|
||||||
pub title: Option<String>,
|
|
||||||
pub author: String,
|
|
||||||
pub link_type: LinkType,
|
|
||||||
pub date_added: Date,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl PsqlData for Link {
|
|
||||||
async fn read_all(pool: &PgPool) -> Result<Vec<Box<Self>>, Box<dyn Error>> {
|
|
||||||
let mut results = sqlx::query_as!(Link, "SELECT id,url,title,author,date_added,link_type AS \"link_type!: LinkType\",description FROM links;")
|
|
||||||
.fetch(pool);
|
|
||||||
|
|
||||||
let mut output = Vec::<Box<Link>>::new();
|
|
||||||
|
|
||||||
while let Some(result) = results.try_next().await? {
|
|
||||||
output.push(Box::new(result));
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(output)
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn read(pool: &PgPool, id: i32) -> Result<Box<Self>, Box<dyn Error>> {
|
|
||||||
let result = sqlx::query_as!(
|
|
||||||
Link,
|
|
||||||
"SELECT id,url,title,author,date_added,link_type AS \"link_type!: LinkType\",description FROM links WHERE id = $1",
|
|
||||||
id
|
|
||||||
)
|
|
||||||
.fetch_one(pool)
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
Ok(Box::new(result))
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn insert(&self, pool: &PgPool) -> Result<(), Box<dyn Error>> {
|
|
||||||
sqlx::query!(
|
|
||||||
"INSERT INTO links (url, title, author, date_added, link_type, description) VALUES ($1, $2, $3, $4, $5, $6) RETURNING id,url,title,author,date_added,link_type AS \"link_type!: LinkType\", description",
|
|
||||||
self.url,
|
|
||||||
self.title,
|
|
||||||
self.author,
|
|
||||||
self.date_added,
|
|
||||||
self.link_type.clone() as LinkType,
|
|
||||||
self.description,
|
|
||||||
)
|
|
||||||
.fetch_one(pool)
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn update(&self, pool: &PgPool) -> Result<(), Box<dyn Error>> {
|
|
||||||
sqlx::query!(
|
|
||||||
"UPDATE links SET url=$1, title=$2, author=$3, date_added=$4, link_type=$5, description=$6 WHERE id=$7",
|
|
||||||
self.url,
|
|
||||||
self.title,
|
|
||||||
self.author,
|
|
||||||
self.date_added,
|
|
||||||
self.link_type.clone() as LinkType,
|
|
||||||
self.description,
|
|
||||||
self.id,
|
|
||||||
)
|
|
||||||
.execute(pool)
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn delete(&self, pool: &PgPool) -> Result<(), Box<dyn Error>> {
|
|
||||||
let id = &self.id;
|
|
||||||
crate::psql_delete!(id, pool, "links")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -9,7 +9,6 @@ use std::{
|
||||||
|
|
||||||
pub mod article;
|
pub mod article;
|
||||||
pub mod page;
|
pub mod page;
|
||||||
pub mod link;
|
|
||||||
|
|
||||||
pub async fn establish_connection() -> Result<PgPool, Box<dyn Error>> {
|
pub async fn establish_connection() -> Result<PgPool, Box<dyn Error>> {
|
||||||
let db_url = match env::var("DATABASE_URL") {
|
let db_url = match env::var("DATABASE_URL") {
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,6 @@ pub fn get_router(pool: PgPool) -> Router {
|
||||||
.route("/about", get(about))
|
.route("/about", get(about))
|
||||||
.route("/contact", get(contact))
|
.route("/contact", get(contact))
|
||||||
.route("/uses", get(uses))
|
.route("/uses", get(uses))
|
||||||
.route("/ai", get(ai))
|
|
||||||
.route(
|
.route(
|
||||||
"/robots.txt",
|
"/robots.txt",
|
||||||
get(|| async { Redirect::permanent("/assets/robots.txt") }),
|
get(|| async { Redirect::permanent("/assets/robots.txt") }),
|
||||||
|
|
@ -53,7 +52,3 @@ async fn contact(state: Extension<AppState>) -> Result<impl IntoResponse, Status
|
||||||
async fn uses(state: Extension<AppState>) -> Result<impl IntoResponse, StatusCode> {
|
async fn uses(state: Extension<AppState>) -> Result<impl IntoResponse, StatusCode> {
|
||||||
get_page(&state.db, "uses").await
|
get_page(&state.db, "uses").await
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn ai(state: Extension<AppState>) -> Result<impl IntoResponse, StatusCode> {
|
|
||||||
get_page(&state.db, "ai").await
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue