> It took me thirty minutes with Codex and GPT-Sol. The thing is fast, it does not ask me for anything, and it does the one job I wanted: it launches applications.
This is quite funny, actually. When I wanted something similar (just play MP3s, without playlists, special indexes, etc), it also took me 30 minutes.
In 2002.
I still use it daily - a wish application displays entries matching the filter using the locatedb to get a list of all MP3s to find them and mpg123 to play them. This is the application that I have used the longest in my life, unchanged and unmodified from day 1, and it still tickles me that it took 30m.
I'm pretty certain, had LLMs not existed, that I can make an application finder using locatedb (perhaps store a private index as well) and a GUI in about 30m using wish as the front-end.
(Just for reference, here's my no-frills MP3 player) ---------------------------------------------
#!/usr/bin/wish
# Copyright Lelanthran K. Manickum 2002, provided under BSD license
#
set version "1.0"
proc playSong {songname} {
set rc [catch { exec killall -9 mpg123 }]
if {$songname=="\[Stop Playback]"} {
.midFrame.lblPlaying configure -text "Stopped"
return 0;
}
set rc [catch { exec mpg123 --loop -1 "$songname" & }]
if {$rc==0} {
.midFrame.lblPlaying configure -text "Playing: $songname"
}
}
proc locateSongs {pattern} {
.lstResults delete 0 999999999
set tmpvar [split [exec locate -i "*$pattern*.mp3"] "\n"]
.lstResults insert 0 "\[Stop Playback]"
foreach title $tmpvar {
.lstResults insert 1 $title
}
}
frame .topFrame
frame .midFrame
entry .topFrame.entSearchString -text "Search String"
button .topFrame.btnSearch -text "Search" -command {locateSongs [.topFrame.entSearchString get]}
listbox .lstResults -yscrollcommand {.sby set} -xscrollcommand {.sbx set}
scrollbar .sby -orien vert -command {.lstResults yview}
scrollbar .sbx -orien horiz -command {.lstResults xview}
label .midFrame.lblPlaying -text "Stopped"
locateSongs ""
focus .topFrame.entSearchString
bind .topFrame.entSearchString <Return> ".topFrame.btnSearch invoke"
bind .lstResults <Double-B1-ButtonRelease> {playSong [.lstResults get active]}
bind .lstResults <Return> {playSong [.lstResults get active]}
grid .topFrame -row 0 -column 0 -sticky nsew
grid .topFrame.entSearchString -column 0 -row 0 -sticky nsew
grid .topFrame.btnSearch -column 1 -row 0 -sticky nsew
grid .midFrame -column 0 -row 1 -sticky nsew
grid .midFrame.lblPlaying -column 0 -row 0 -sticky nsew
grid .lstResults -column 0 -row 2 -sticky nsew
grid .sby -column 1 -row 2 -sticky nsew
grid .sbx -column 0 -row 3 -sticky nsew
grid rowconfigure .topFrame 0 -weight 1
grid columnconfigure .topFrame 0 -weight 1
grid rowconfigure . 2 -weight 2
grid columnconfigure . 0 -weight 2
wm protocol . WM_DELETE_WINDOW {
set rc [catch { exec killall -9 mpg123 } ]
destroy .
}
wm title . "Simple Music Player - v$version"
wm geometry . 700x500
I assume the 30 minutes didn't involve learning how to use wish.
There are tons of apps I could build in 30 minutes using a development environment I'm familiar and productive with already, but LLMs don't have that restriction.