I suppose you could say such strokes of genius are the outcomes of a lifetime of creative work but that seems different from your example of editing a poem.
1,307 karma · joined December 2, 2019
I also like compost.
and radio.
blog.cofree.coffee www.kpbj.fm www.kchungradio.org
ssbothwell_at_gmail_dot_com
I suppose you could say such strokes of genius are the outcomes of a lifetime of creative work but that seems different from your example of editing a poem.
Sora makes the hard parts easy and the easy parts hard. I don't think any of these content producers will be remembered in the future. :/
If necessary I use a piece of paper for maps.
For music I have an ipod.
I've been using a lightphone for 3 years but i can't stand the touch screen and only having SMS is annoying.
I think I must not be expressing myself well. These tools seem to be optimized for parametric pattern manipulation. You essentially declare patterns, apply transformations to them, and then play them back in loops. The whole paradigm is going to encourage a very specific style of composition where repeating structures and their variations are the primary organizational principle.
Again, I'm not trying to critique the styles of music that lend themselves well to these tools.
> And yet it also constrains and prevents the construction of bad programs in a very strict manner via its type system and compiler.
Looking at the examples in their documentation, all I see are examples like:
d1 $ sound "[[bd [bd bd bd bd]] bd sn:5] [bd sn:3]"
So it definitely isn't leveraging GHC's typechecker for your compositions. Is the TidalCycles runtime doing some kind of runtime typechecking on whatever it parses from these strings?> It's also notable for being probably the only Haskell library used almost exclusively by people with no prior knowledge of Haskell, which is an insane feat in itself.
I think Pandoc or Shellcheck would win on this metric.
I think this format of composition is going to encourage a highly repetitive structure to your music. Good programming languages constrain and prevent the construction of bad programs. Applying that to music is effectively going to give you quantization of every dimension of composition.
I'm sure its possible to break out of that but you are fighting an uphill battle.
Well it would give you a similar final artifact but it wouldn't be doing the exercise at all.
It ended up being harder then writing an ordinary paper but taught us all a ton about citation and originality. It was a really cool exercise.
I imagine something similar could be done to teach students to use AI as a research tool rather then as a plagiarization machine.
This is second hand information and may apply more so to effectful then bluefin. I have just done some pretty minimal test projects with bluefin and effectful but I was told:
""" It's not too hard to make segfault if you organize your higher order effects just right.
It's been a while but i think you just return a continuation with the effect you just handled, and then all of a sudden it's not in scope and yet you need to still handle it.
And the tricks they use to make things go fast don't work in this case and things go boom """
that said, your library is really cool. : )
`eff` is based on delimited continuations (which Alexis had to build into GHC), it is not using `Freer`. If you want to look at an effect system in Haskell that actually has been used in production AND is based on this paper then look at `freer-simple`: https://hackage.haskell.org/package/freer-simple
No it is not high performance, but neither are any other Haskell effect systems and performance is relative to your problem domain. It also has the benefit of being implemented very similarly to Oleg's paper making it a lot easier to learn from then most other options.
From wikipedia:
> Business is the practice of making one's living or making money by producing or buying and selling products (such as goods and services). It is also "any activity or enterprise entered into for profit."
So a business is an activity or enterprise engaged in by people for profit.
If a business exists to generate profit for its participants, it should maximize profit distribution to everyone involved in that business. This implies salary limits that maintain business sustainability. Otherwise, excessive compensation would eliminate profit for all participants.
My point wasn't about how to balance salaries between different employees. I'm arguing that companies should maximize compensation for all employees (at every level) to the extent that doing so doesn't threaten the business's viability. Without this, you get companies hoarding excessive capital reserves that sit idle rather than circulating through the economy.
not : Type -> Type
not P = P -> ⊥
modus-ponens : P -> ((f : P -> Q) -> Q)
modus-ponens p = λf. f p
-- p implies not-not-p
not-not : P -> ((f : P -> ⊥) -> ⊥)
not-not p = λf. f p
-- not-p implies not-not-not-p
not-not-not : (P -> ⊥) -> (((P -> ⊥) -> ⊥) -> ⊥)
not-not-not np = λf. f np
-- not-not-not-p implies not-p
not-p : (((P -> ⊥) -> ⊥) -> ⊥) -> (P -> ⊥)
not-p nnnp = λp. nnnp (not-not p)
Now it all just turns into function application :)https://blog.cofree.coffee/2025-03-05-chat-bots-revisited/
I did some light integration experiments with the OpenAI API but I never got around to building a full agent. Alas..
As other commenters have stated the techno-futurist vision that comes out of the Whole Earth Catalog was radically utopian and far grander then "I get to watch low value consumer media whenever I want."
It is a bit sad to see where we have landed after all that.
I was only able to do this because I had some prior programming experience but I would imagine that if AI coding tools get a bit better they would enable a larger cohort of people to build a personal tool like I did.
myCoolSubroutine = do
now <- getCurrentTime
users <- getUsers
forM users (sendEmail now)
sendEmail now user =
if user.expiry <= now
then sendExpiryEmail user
else sendNonExpiryEmail user
The whole pipeline thing is a red herring IMO. data List a = Nil | Cons a (List a)
You can define its recursion principle by building a higher-order function that receives an element of your type and, for each constructor, receives a function that takes all the parameters of that constructor (with any recursive parameters replaced by `r`) and returns `r`.For `List` this becomes:
foldr :: (() -> r) -> (a -> r -> r) -> List a -> r
The eliminator for `Nil` can be simplified to `r` as `() -> r` is isomorphic to `r`: foldr :: r -> (a -> r -> r) -> List a -> r
foldr z f Nil = z
foldr z f (List a xs) = f a (foldr f z xs)
For `Bool`: data Bool = True | False
We get: bool :: a -> a -> Bool -> a
bool p q True = q
bool p q False = p
Which is precisely an If statement as a function!:D