freenode/#lisp - IRC Chatlog
Search
9:52:43
makomo
speaking of talks, another nice lisp-related video, from the guy who made cl-6502 https://vimeo.com/47364930
9:59:16
elderK
Unless it's for stories - I have a real problem of starting technical books, reading half way, then moving on. It's different for references like say the Intel manuals or CLtL2 - as I refer to them over and over and over, random access almost.
10:25:28
elderK
You know, the more I read, the more I realize the same concepts seem to be discovered again and again but each time with different names.
10:25:45
elderK
As I read this stuff about "meta-level architecture", I find myself constantly thinking of "policy-based design" in C++ template metaprogramming.
10:26:43
elderK
I wonder how much is just a simple case of being influenced by say, Lisp or Smalltalk.
10:27:34
fiddlerwoaroof
And the similarities aren't entirely accidental: for example, Guy Steele was part of the group that made Java
10:32:52
elderK
Still - and maybe I'm just getting jaded - I wonder how much of it is NIH and people kind of build their own version of hte SAME thing and give it a new name
10:33:25
elderK
But often time these days, at least in the web sphere - there seems to be a lot of churn.
10:33:46
elderK
Granted, I am not exactly knowledgable when it comes to the "web sphere" so what I say could be absolute, total foobar.
10:37:42
elderK
Out of curiosity - and this is aimed at many in the room: How did you like, come up to speed with CL? How long did it take you? What was your learning path? Did you spend a lot of time reading the usual texts, doing exercizes? Did you simply create some small projects and hack away, slowly getting more and more complex and more comfortable?
10:59:26
pjb
beach: we've seen nothing yet. The first generation of programmers is retired and dying, but they were just a few. Soon, a lot more will disappear, and this will be felt direly. Given that half of the programmers are newbies with less than 5 years of experience…
11:02:36
pjb
elderK: it's independent rediscovery, given that the number of programmers double every 5 years, and not all of them have been "formally educated" far from it.
11:18:09
elderK
Like, I have met people without formal educations, who independently research and read into things heavily, say.
11:18:21
elderK
And then I've met those with formal educations who have stuck only to what they were taught, never exploring further.
11:22:05
jackdaniel
formal education is not a necessity, but lack of thereof spins a considerable amount of ignorant people (and it is very easy to spot an ignorant). so even if 90% of uneducated people are not ignorants, 10% is very much visible hence the availability bias leads to a simplistic correlation: uneducated -> ignorant
11:24:07
elderK
I guess as always, it depends on the person in particular. Some people, whether they have been formally educated or not, are compelled to learn more, to dig. Driven to refine their abilities.
11:24:22
elderK
And then there are some, who seem happy to rest on what they've learned, whether it's enough or not.
11:24:25
jackdaniel
another thing is that "modern" univeristy purpose is to meet market demands. market demands now high volume of programmers who will follow directions and many universities just align lowering education standards (to have more students, and money follows a student)
13:33:57
dim
AdventOfCode is very fun to do in CL! (https://adventofcode.com/) — the funniest part is when you read how much effort is spent in other languages to write code that runs in an acceptable time & space where in CL usually the first crappy idea you have is good enough
13:34:33
dim
I just wrote a stupid quadratic algorithm just in case it would be ok, took 16,059 microseconds (0.016059 seconds) to run, 38,608 bytes of memory allocated, with CCL
13:49:18
tumdum
it depends on value of "other languages" - as much as I like CL, my Go and Rust solutions are as easy to write yet always faster. If you compare CL to Ruby you might be right, but that's not surprising
13:50:39
jackdaniel
ACTION would be interested in seeing dim's code and tumdum's code solving the same problem (with similar amount of work)
13:53:35
shka_
wouldn't be a good idea for open for write to provide restart for superseeding or overwriting existing file? I supposed there is a reason why this wasn't done, but this reason eludes me.
13:57:46
pjb
shka_: also, between the time you test and the time you get the answer, the situation may have changed. This is why it wouldn't work.
13:59:34
shka_
_death: no, but it would be silly to offer such restart always as it would probably create more bugs
13:59:35
pjb
Well, the fact is indeed, that no CL function has any internal restart point specified, apart from a few such as check-type, assert, or the various C-something.
14:00:36
pjb
For example (ASIN 42) could provide a restart to give a valid argument (all functions could have it).
14:01:06
pjb
(said otherwise, no CL function is specified to use check-type, at most, to signal a type-error, that's all).
14:01:52
_death
shka: the restart would be supplied when there's an error.. so if :if-exists :error errors a restart taking a new :if-exist value could be provided
14:04:37
shka_
_death: yes, but my point is that restarts such like this we would leak control of internals to the user which may be harmful
14:05:56
_death
shka: the point of restarts is to allow making a decision somewhere else, not to hide things from the user.. for that you can just not provide the option
14:07:34
_death
the error could include more information that gives context about the OPEN.. but yes, it may be too little context to be useful except when developing
14:10:37
_death
there could be a ROBUST-CL that specifies much more comprehensive behavior with regards to errors
14:12:27
tumdum
jackdaniel: e.g. http://tilde.cat/~t/tmp/day2.go vs https://git.sr.ht/%7Ettt/aoc18/tree/fe45caaf00bb487dde683cee552d19611fa0de37/day2.lisp
14:13:40
jackdaniel
tumdum: important point was to see code produced by two different people (who seem to favour other languages)
14:14:21
jackdaniel
what may be a hint, that you have more experience with these languages (than with cl)
14:14:28
tumdum
sure, I'm just sharing *my* solutions. You can compare them with whatever you want :)
14:17:21
dim
well it's the same approach in tumdum Go's implementation and my CL one, so I would guess it takes about the same time
14:18:31
dim
my puzzle takes about 8ms to solve in CL; then again we might have large differences in the number of iterations required to find a solution in our respective puzzles, so…
14:20:43
tumdum
'cat day2.input | time -v ./day2 2>&1 | grep "User time"' results in "User time (seconds): 0.00" ;)
14:20:55
_death
anyway, here is mine https://gist.github.com/death/df37a5f5218eaef229f9358412b54f33 .. I just spend a few minutes after brushing my teeth in the morning :d
14:21:55
jackdaniel
I had a benchmarking game today (against myself though): https://files.mastodon.social/media_attachments/files/008/350/509/original/09baa41f5212cffd.png
14:23:16
jackdaniel
(here is some more information: https://mastodon.social/@jackdaniel/101171161106313135)
14:24:21
dim
_death: I kind of like the simplicity of (some (lambda (letter) (= (count letter str) n)) str), even though it's O(n²)
14:28:28
dim
that's what I like with CL in those puzzle, you can be pretty stupid and have no issues out of it
14:41:01
_death
I think every year there's one day with a problem that's not so trivial, around the 20th day
14:56:03
tumdum
_death: for me the hardest problem last year was day3: https://adventofcode.com/2017/day/3 :D
14:59:49
tumdum
afair I constructed actual 'grid', you can check it here: https://github.com/tumdum/aoc2017/blob/master/03/main.rs
15:03:30
makomo
after it wasn't going quite according to plan, i went on to do something else and forgot about aoc
16:09:44
dim
well from reading the article about Taxicab geometry on Wikipedia, it seems that a solution for AOC/2017/d3 would be to generate the coordinates of the number on thr grid and then take the sum of the absolute values of them, that's it (with e.g. 3 being at (1,1) and 21 being at (-2,-2))
16:10:24
dim
maybe I'm missing something, but it doesn't look like you need to actually traverse the spiral, only to obtain the coordinates of 1 and the number in argument
17:01:07
sindan
I'm using slime on emacs; I wonder if it's possible to declare a function/macro with &rest, that when written on the repl does not show its signature in the minibuffer, namely &rest forms, but a custom string that better reminds me of what the function expects in reality
17:09:45
flip214
sindan: then name the &rest parameter so it makes sense? "list-of-key/value-pairs"?
17:11:02
sindan
but then the parameter gets a stupid name and the parameter list can be much more complex than a plist
17:14:51
sindan
putting that info in a specially formatted line in the docstring and retrieving it in elisp could be a start
17:15:35
ggole
elisp itself allows arg-list formatting hints in the docstring, but I don't think slime has that
17:17:57
sindan
if I ever want to get to know emacs/slime that's a project. Sadly I need to resort to &rest when the combination of other param types is so awkward
17:20:52
sindan
even with allow-other-keys, combining &rest with &key can avoid parameters in key position to be keywords, but the number of parameters must be even if &key is present, which is not general enough
17:34:14
_death
I guess that's why there are two parts.. the second can sometimes disagree with the first one's approach and the programmer has to scramble to solve it quickly
17:35:28
dim
I was already contemplating that you only need to keep 2 rows of the spiral and have 5 cells to look at max at each turn
17:46:26
_death
interesting that so many solutions used letter->frequency mapping.. I didn't even get to think of it because I thought the my inefficient was sufficient ;)
17:49:10
alandipert
Afterward I realized I was worrying too much about perf and it definitely interfered with my flow. Tomorrow: KISS
18:26:56
dim
I think I could now easily have a spiral builder that takes a thunk as a parameter and apply it to both the puzzles, but I'm not that interested into it
18:28:29
dim
and 2017/d03/p2 took 334 microseconds (0.000334 seconds) to run, with 10,544 bytes of memory allocated.
18:33:58
_death
hmm, (measure-run-time (neighbors-sum 265149)) => (38 :MICROSECONDS 115 :NANOSECONDS) and (measure-run-time (compute-first-square-larger-than 265194)) => (34 :MICROSECONDS 924 :NANOSECONDS)
18:36:51
dim
SBCL reports that Evaluation took: 0.000 seconds of real time 0.000152 seconds of total run time (0.000151 user, 0.000001 system) 100.00% CPU 458,782 processor cycles 32,768 bytes consed
18:39:57
dim
I just was somewhat proud of my trick where I can do a single incf for a whole spiral side at a time rather than moving only one step per loop
18:44:11
dim
oh I use that all the d03p1 puzzle doesn't use that, that's the second puzzle where I did it, and I think it's very badly written too
18:46:00
_death
if-do-else-do would make that clearer (different semantics, but correct in this case), if you insist on loop ;)
18:49:55
dim
_death: https://github.com/dimitri/AdventOfCode/commit/af3b178bd903d3dee2a715bd30df352f5b8511b8
18:52:40
tumdum
Xach: is it possible to get http://verisimilitudes.net/acute-terminal-control.asd into quicklisp?
19:54:47
jcowan
beach: As usual, the mundane world is only now catching up to what the Lisp world has had for years
20:01:39
jcowan
Frankly, what you have hold of for Sicl is genuinely groundbreaking for a HLL. If I believed in software patents, and if you hadn't disclosed all over the Internet already, I'd say: patent it.
20:53:24
jackdaniel
point being made is that such patents are obstacles to getting things better (but may be a good idea to get wealthy) and I'm quite sure beach pursues better software and not a patent portfolio
20:55:12
jackdaniel
and as of 20y, it is enough to skip whole generation of people to work on something, so from a lifetime perspective it isn't "nope :)"
21:04:44
no-defun-allowed
jackdaniel: private property and personal property are distinct, usually disjoint sets though
21:05:43
no-defun-allowed
and well they call it intellectual property and put property laws on ideas quits often
21:11:57
jcowan
I said "if I believed in patents", which I don't. I mean that beach's idea is both original and useful, and it's not surprising that nothing like it appears in the literature
21:12:47
jcowan
(Actually, I believe that people who want patents and copyrights should pay heavily for them, preferably an annual fee.)
21:14:12
p_l
jcowan: a good patent system is a boon to innovation, but a certain patent system backed by significant military was designed more for stealing ideas and mercantilist blocking of foreign companies
21:15:56
jcowan
Patents are monopolies, and monopolists should pay for what they are (for sound economic reasons) allowed to deprive the rest of us of, to wit, the market value of the monopolized article.
21:16:59
p_l
jcowan: patent system origins in Europe were for monopoly-breaking by putting incentiving people to use patents rather than keeping things secret
21:17:34
p_l
because a proper patent should have all the details necessary to reproduce the invention patented + a reasonable time limit
21:20:52
p_l
beach: what was the "fast module"? I looked at scrollback but I'm missing some context and it seems interesting
21:21:57
no-defun-allowed
p_l: I think it’s not taking time to consider better solutions and going with whatever comes to mind first
21:23:35
jcowan
When I raised the idea of generic functions based on general (pure) predicates, he immediately raised the efficiency argument.
21:24:05
jcowan
In truth, people prefer and find intuitive, flexible, and efficient, what they are used to
21:24:10
p_l
as in, code that is too generic for the scope of the problem, causing increased complexity and thus loss of *human* performance in dealing with it
21:25:38
p_l
In general, my memory seems to recall mostly one somewhat common use case for defstruct in normal code (not implementation-code)