1. 1

    Got the website for my buddy’s fishing boat in a launchable state (still needs media content but we needed to get it up in the meantime), now drinking someone wine and will be working on my side project.

    1. 1

      wow…I’m actually surprised at how slow a lot of things are. interesting

      1. 4

        Big-O time complexity really doesn’t paint a full picture of how data structures and algorithms perform in production software.

        Details like cache lines, data locality, branch prediction and boxed terms do a great job of making for very surprising benchmarks where implementations with poorer Big-O complexity perform faster than implementations with better Big-O complexity.

        The HAMT-based maps in Erlang/Elixir were definitely welcomed when they were introduced, but plenty of software was written in Erlang and run in production for years, without O(lg n) or O(1) random access into sets of KV pairs.

        1. 2

          Which of the data structures do you think are “slow”?

          List performance is as expected for singly-linked lists, tuples as for fixed-sized arrays, etc.

          1. 1

            It’s like you shouldn’t use ‘slow’ software to write performance sensitive things like globally distributed chat software… Or something.

            1. 1

              I should be clear, I love Elixir. I’m not disparaging it. I was surprised by the time complexity of some things is all – and I’m aware it doesn’t really translate to much IRL.

            2. 1

              It is not unusual to have a sorting algorithm that switches to different sorting algorithms depending on information about the argument… Python does it

              In practice algorithms with super linear complexity can behave very well under small inputs

            1. 4

              One note / useful tip: the article mentions Reykjavik may be affected. Not just bad for Iceland; the Reykjavik time zone is a good choice if you want UTC but whatever software you’re using doesn’t understand a non-geographic timezone like UTC. Iceland has been UTC+0:00 without daylight savings time since 1967. I’d be a little sad if this option disappeared from software.

              Looking at the patches it looks like Reykjavik time will be listed as an alias with Africa/Abidjan. Côte d’Ivoire apparently hasn’t had DST since 1912.

              1. 5

                the Reykjavik time zone is a good choice if you want UTC but whatever software you’re using doesn’t understand a non-geographic timezone like UTC.

                What horrible software is this?

                We can’t rely on Iceland never instituting DST, so our software shouldn’t either.

                The same goes to Africa/Abidjan too, but at least there there’s no geographical reason to use DST. However, if Côte d’Ivoire develops significant economic ties with Europe it could conceivably implement DST to “track” timezones there.

                1. 2

                  What horrible software is this?

                  I haven’t checked lately, but a few years ago I had my Chromebook and MacBook running on Iceland time because you weren’t allowed to set your user time to UTC (the system time was in UTC, not the user time).

                  (Edit: I looked this up and can confirm that on a recent version of macOS UTC - United Kingdom is available when typed into the timezone picker).

                  I changed it back because some sites (specifically Yelp) checked whether a store was open based on browser time, not necessarily the time at the store’s location. This meant that every store I looked at was “closed” during normal business hours, since Yelp was trying to determine if a store in California was open or not using Iceland time.

                  1. 1

                    Wow, just wow (that linked article, and also the uncertainty involved in tying “UTC” to a specific location).

                    Here’s a discussion using the command line, the discussion is also confused https://gist.github.com/nick-desteffen/1126771

                    (Because I’ve recently messed around with this on a systemd-enabled Linux, you should use timedatectl there, not directly symlink to /etc/localtime as in the example).

                    At least on Windows 10, you do get the bare “UTC” option, no confusion as to location.

                2. 1

                  Africa/Abidjan satisfies both of those conditions, which has never had DST

                  1. 2

                    Thanks, and apologies; I think you responded to an earlier version of my comment before I figured out Abidjan would work.

                    I combed through the whole database and here’s all the options for modern UTC-like timezones: Africa/Abidjan, Africa/Bissau, Africa/Monrovia, Africa/Sao_Tome, Atlantic/Reykjavik, America/Danmarkshavn.

                    1. 3

                      A lot of zones already link to Africa/Abidjan: Africa/Bamako (Mali), Africa/Banjul (Gambia), Africa/Conakry (Guinea), Africa/Dakar (Senegal), Africa/Freetown (Sierra Leone), Africa/Lome (Togo), Africa/Nouakchott (Mauritania), Africa/Ouagadougou (Burkina Faso), Africa/Timbuktu (Mali). So presumably that’s why it was chosen. I don’t know why it was chosen as the target in the first place, but it seems like it’s been like this for a number of years, a lot of changes were made in 2014.

                      Similarly, a lot of zones already link to Africa/Lagos (UTC +1, “West Africa time”), Africa/Maputo (UTC +2, “Central Africa Time”) and Africa/Nairobi (UTC +3). All of Africa has 20 timezones in the current database (excluding aliases) for 56 regions, all with various real differences (DST, changed after 1970). The only linking being done for Europe now is the various British crown dependencies (Jersey etc.) to Europe/London and countries of former Yugoslavia linking to Europe/Belgrade, as well as some other minor things (e.g. Europe/Liechtenstein → Europe/Zurich).

                      For users nothing changes. You can still keep using Atlantic/Reykjavik if you want. It’s just an internal linking thing that happens, and the only area where it really exposes if you want times before 1970, in which case you need the full TZ database. It’s really not a big deal.

                      If people in the most ethnically sensitive part of Europe with literal genocides not all that long ago can avoid throwing a hissy fit over the internal structuring of some database then surely some bloke from London can…

                      1. 1

                        I noticed your edit right after I submitted my comment haha. Left it there anyways :)

                  1. 8

                    Unfortunately, he is currently ignoring all objections to an action only he seems intent on making to solve an invented problem that only he sees as important.

                    I’ve been following the thread(s) and this is a horrible exaggeration at best. Making it seem like Prof. Eggert is going at it alone and claiming that these are issues only important to him is a blatant misrepresentation of the facts.

                    There have been a lot of fair points made from both directions, but at the same time more than a few of the loud opponents have demonstrated that they do not know nearly as much as they think they do, and have resorted to throwing tantrums when they don’t get their way.

                    What’s more is the over-exaggeration of how many people are actually opposed to these changes in principle (and can actually string together a coherent reason why!). It seems that once the drama kicked off, all sorts of people came out from the woodwork for no other reason than to make noise.

                    Paul Eggert has put in a tremendous amount of unpaid / thankless time and effort into maintaining this project, and has generally been a decent steward in that regard.

                    Stay tuned as I try and work out how best to resolve this completely unecessary drama.

                    I can’t take this seriously. I don’t even know what to say to that.

                      1. 2

                        This is very neat too, thanks for sharing!

                      1. 10

                        Wow! This is the sort of thing that where when I come across it I’m reminded of why I love computers and the people who tinker around with them.

                        The ideas presented here are not fundamentally complicated, but the result is something beautiful.

                        I’ve felt sort of burnt out / uninspired as of late but this has given me some ideas to play with!

                        1. 14

                          This is pretty light on the specific details of what Matthias Felleisen said that constituted what the author asserts to have been bullying and abuse. I’m very cognizant of how public accusations of bullying and abuse, uttered with the intention of bringing social consequences to the accused, can themselves be forms of bullying and abuse. If Felleisen did in fact say things to Matthew Butt­erick that people can widely agree are unfairly hostile, I would like to know what those things are before passing judgment on Felleisen (I’ve only barely used Racket myself and don’t know of either person by name or reputation).

                          1. 55

                            I think it’s purposefully light on the details. It’s inconsequential whether or not you (or I, or anyone else) “passes judgment” on Felleisen, and I don’t think the point of the post was to have that happen from what I gather here and elsewhere in the post.

                            The author is explaining why they’ve more or less disappeared from the Racket community, from their own perspective, because people have asked.

                            1. 11

                              Agreed - I thought the article was well written and carefully avoided calling for any kind of public judgement.

                              If there is a call to action, it’s for the people in the community who work with Felleisen to take a look at his behaviour and consider whether they should pick him up on it - which is a reasonable request for anyone in a position of influence.

                              1. 3

                                If there is a call to action, it’s for the people in the community who work with Felleisen to take a look at his behaviour and consider whether they should pick him up on it - which is a reasonable request for anyone in a position of influence.

                                Totally agree, I was going to say something along these lines as well.

                                1. 2

                                  carefully avoided calling for any kind of public judgement

                                  Then why mention his name at all? Then, why mention his name repeatedly?

                                  1. 2

                                    I think there’s a difference between saying “person X behaved badly” and calling them out for a public stoning.

                                    Giving the author the benefit of the doubt and assuming they don’t intend to libel Felleisen, should they be banned from mentioning his name in connection with anything negative?

                                    Perhaps it’s a fine line but personally, I thought the author trod it well.

                              2. 27

                                I’m very cognizant of how public accusations of bullying and abuse, uttered with the intention of bringing social consequences to the accused, can themselves be forms of bullying and abuse.

                                I’ve only barely used Racket myself and don’t know of either person by name or reputation

                                before passing judgment on Felleisen

                                I would ask, then, why you feel the need to pass judgement at all? It seems to me that the uninvolved masses that decide they need to take sides or make some judgement from the sidelines are a big part of why that problem exists.

                                1. 2

                                  Issues of toxicity that impact communities frequently manifest as collective action problems. Everyone in the community is impoverished at varying amounts by the toxicity. But speaking up individually about the impact also has a negative cost to the individual. Like many collective action problems you need a critical mass of individuals speaking up and potentially lowering their own status in the community as a result.

                                  Your comment is an example of why these issues manifest as collective action problems for the community. And like many collective action problems they most often degenerate into a tragedy of the commons. This is a sad result for a community and the individuals who buck the trend are usually a communities only hope of not ending tragically.

                                  1. 1

                                    Am I not understanding your point, was this not meant to be a reply to me? Or are you actually advocating that right people to take collective action are those who aren’t members of the community in question and have no knowledge of the parties involved, the situation, nor the history and background beyond what they’ve read in a blog post?

                                    I’d like to give a more charitable interpretation, but after re-reading this several times that’s all I can come away with from your response.

                                    1. 4

                                      After re-reading my own comment I realize why it came off differently than I intended. I meant to say that discouraging members of the community from speaking up is detrimental. But it did not at all come off that way. My apologies.

                                      1. 1

                                        Thanks for the clarification, and totally agree on that point. For the record, all I intended to point out was that there’s not often much value in people who are not involved doing the internet dogpiling on this type of thing. It’s absolutely valuable for people to speak out like Matthew did.

                                        I am glad that this was made public, and though his contributions will be missed, hope Matthew is more happy with less direct involvement.

                                2. 22

                                  I would like to know what those things are before passing judgment on Felleisen

                                  Well perhaps you don’t have to pass judgement on him.

                                  Reading the article (which by the way made me sad, even as a semi-outsider it is clear that Matthew did a lot for Racket. Beautiful Racket and Pollen are great), I got the impression that it was both a public explanation and a call to the Racket core team (not the public at large) to maybe take action.

                                  After all, I think we’ve all had to rely on people we trust to make us understand when we overstep our bounds. So, the main thing to ask might be why the rest of the Racket core team apparently did nothing, or more probably didn’t do enough.

                                  1. 6

                                    a call … (not to the public at large) to maybe take action.

                                    But it’s published as a blog post though, so that implies that the call to action is meant to have the weight of its readership behind it. Public judgment is baked into the medium, so it’s reasonable to ask if it’s justified.

                                    1. 11

                                      Nah, you are still not asked to provide a judgement. First of all a public blog post is a public record which can be referenced if others also share experience on Felleisen. So-to-speak it is a request to Racket contributors to share their stories, and then for the core-team to discuss something that wasn’t systematically discussed.

                                      From the reactions I read the description of Felleisen seems to be fairly accurate. Let’s wait for a bit how the community sorts stuff out.

                                      There was an instance of a prominent member of the Python community in recent years wich got started by a blog post pointing out problematic behaviour, which lead to others sharing their negative experiences as well and eventually it was for the better.

                                      1. 5

                                        I don’t think it’s possible to separate public debate from public judgment for open-source/open-governance projects. Anything that’s published, even if it’s for instance just intended for the circle of contributors, will usually attract a far larger circle of users or even spectators, and those do have impact on the decision in various indirect ways. So it’s less that I’m being asked to judge as that the format cannot avoid inciting judgment, and I’d expect this to be priced into the decision to make a blogpost to begin with.

                                  2. 4

                                    It mentions that the claims are undisputed.

                                    I don’t know any of this people, but seriously… WTF… On an open source project… Where people contribute mostly out of good will. Very disappointing.

                                  1. 64

                                    This was incredibly sad to read, and relatable on so many points. It’s unfortunate that this sort of thing has gone un/under-addressed to the point where someone who is clearly very passionate about the language is driven away from making contributions.

                                    1. 13

                                      this was really neat, and a cool bite-sized history lesson too! I had no idea of the connection between em and metal typesetting.

                                      1. 5

                                        Slavery was bad. That doesn’t necessarily mean that all slave owners (like George Washington) were complete monsters, nor does it mean the word “master” had any negative connotation back then.

                                        Any shred of positive intent that I was trying to assume on behalf of the author was immediately thrown out the window here. They might as well have written #notallslaveowners

                                        1. 6

                                          Maybe Felipe just wants to say that dismantling all the positive contributions of people that also have bad ones is a failing strategy for society as a whole. Or at least that’s how I interpret what he said.

                                          I don’t think that jumping straight to vilifying and name calling is a good way to further the discussion.

                                        1. 8

                                          I like it! Some quick comments:

                                          For example, a structure with a commutativity law … permits an implementation for ⊕ or integer multiplication but rejects matrix multiplication.

                                          There’s a good intuition here. Matrices are representations of linear functions on vector spaces, and matrix multiplication is just function composition, which is noncommutative.

                                          closed⁵ binary⁵ associative operation that acts on that type

                                          These both point to the same footnote.

                                          we typically use <> (or even +) to denote this operation.

                                          Is this that common? I thought people reserved + for operations that are both associative and commutative.

                                          The power of an identity is that there always exists a default or a known empty. Monoids let us “drop the option”:

                                          There’s a small tradeoff here: since empty ∈ T, there’s no way of knowing whether the operation was invalid or if it was a valid operation that resolved to empty. Depending on what you’re doing you may want to keep those separate.

                                          Monoids are the building blocks of composition. And composition leads to clean, simple, and expressive code.

                                          Everybody talks about semigroups and monoids but nobody talks about poor ol’ groups!

                                          (I mean there’s reasons for that, groups are much less common in practice, but still. Groups are cool)

                                          1. 3

                                            Thanks!

                                            I didn’t know that + typically implies commutativity. I’ll update the post!

                                            I find that groups don’t materialize too often when I’m writing software. The only time I came across an interesting group: Styling (think atomic css classes). StartButton := FinishButton <> (-Round) <> Green. You can model it with a pair of sets of your base styles acting like a sort of “free commutative group”. The only issue with this is (-Round) only really has meaning as a way to annihilate the roundness of some style, it can’t really stand on its own. Regardless, I have used the styling group on a web project and I have to say being able to subtract out styles is useful!

                                            1. 2

                                              Offhandedly (read: easily subject to counterexamples) I’m wondering if truly isolated transactions could be modeled as a group, regardless of whether there would be any gains in doing so. Unlike the general case of state transitions in a random-access machine, the context of a transaction has reversion to the prior state as a default, so within an uncommitted transaction every operation has an inverse in the form of “cancel this statement.”

                                              1. 1

                                                And, embarrassingly, on immediate consideration, associativity can’t be guaranteed, so scratch that!

                                              2. 1

                                                There’s a small tradeoff here: since empty ∈ T, there’s no way of knowing whether the operation was invalid or if it was a valid operation that resolved to empty. Depending on what you’re doing you may want to keep those separate.

                                                A.k.a., the semipredicate problem.

                                                1. 1
                                                  we typically use <> (or even +) to denote this operation.
                                                  

                                                  Is this that common? I thought people reserved + for operations that are both associative and commutative.

                                                  +1

                                                1. 1

                                                  it was a good source of information if you had the ambition to become a compiler

                                                  1. 6

                                                    a software for manipulating math equations with drag and drop and also can define your own algebraic rules like group theory.

                                                    1. 1

                                                      Can you expand in this?

                                                      1. 3

                                                        like A/B = C then I can drag B over to RHS and it becomes A = BC.

                                                        Say I can define BC= Z and if I select BC then I can choose to substitute BC with Z yielding A= Z.

                                                        The rules of the algebra are intricate in systems like tensor algebra etc, so the use should be able to define rules for algebraic manipulation. all of them can be access via drag and drop.

                                                        E.g in matrix

                                                        Ax + b = y

                                                        you can do

                                                        vcat(A, 1) * vcat(x, b) = y

                                                        Now newA*newb = y

                                                        newA’ newA*newb = newA’y

                                                        and we can say that newA’ newA is invertible then

                                                        newb = (newA’ newA)^-1 newA’y

                                                        Normally this can be done in non-matrix algebra. But in matrix algebra you need additional rules. But all of that can be done via a GUI!

                                                        1. 2

                                                          very interesting! Might play around with this idea

                                                    1. 2

                                                      great article! I think it would have been pretty cool to also have mentioned the Open3 module, which is a lot more robust / versatile than just using the backtick commands.

                                                      1. 6

                                                        Just came across this and am going through your previous posts. A coupe of comments:

                                                        • nitpicky comment but the underlying set for the field doesn’t necessarily have to be a set of numbers

                                                        • The example you gave for the set {1, 0, -1} is not closed under addition like you mentioned: 1 + 1 = 2 and 2 is not in the set

                                                        • It’s actually the case that the additive and multiplicative groups of the field are abelian, and this is quite an important property that you’ve left out.

                                                        • for your definition of multiplicative inverses, you’re missing a - in the exponent at the beginning of the line

                                                        • for multiplicative inverses, it is also required that a is not the multiplicative identity

                                                        • it is not true that finite fields always have prime order.

                                                        • You reference fields with the naming convention F_p and I assume you are implying fields defined under modular arithmetic but you don’t mention it until later so I think it might be a bit confusing to some people

                                                        • I’m not sure if the section on division is helping or hurting. “division” in a finite field is just multiplication by an element that is an inverse – i.e. it’s just multiplication by another element in the field that happens to have the property that it is an inverse of some other element. It’s not a separate operation, and I actually think that the normal intuition behind division is harmful in the case of fields modulo N (we’re not “dividing” anything into smaller parts, among other reasons).

                                                        I’ll keep reading through. Definitely an interesting topic!

                                                        1. 1

                                                          Just as a note, I’m not the author of the series. Just thought it was pretty interesting. That said, those are interesting notes!

                                                          1. 1

                                                            edit

                                                            for multiplicative inverses, it is also required that a is not the multiplicative identity

                                                            I should have proofread myself. It is required that a is not the ADDITIVE identity.

                                                          1. 1

                                                            I enjoyed your article, and I appreciate the work that you put into writing it.

                                                            I wrote a response to it and planned to share it as a link on the site for further discussion, but since I am a new user on Lobsters, I cannot share it (it’s a “new domain”).

                                                            Here is the response: https://blog.antfeedr.com/posts/fizzbuzz.html

                                                            I wanted to write about so much more but I had already written a lot, perhaps in the future.

                                                            On that note, if someone else is willing to share it as a story here I would appreciate that. I would love to see some more discussion surrounding this topic, and if it’s just a comment in this thread I fear that will never happen.

                                                            1. 2

                                                              Hm, thank you! I started reading it but I’ll need to go back to it.

                                                              It’s certainly true that I don’t feel like I had a “proof” for the more general formula; I had a hunch that it would work (and it worked where I tested it)… so, thank you for reading and writing this up, I’m looking forward to working through it. :D

                                                              1. 1

                                                                Of course! I was really excited to be able to participate in this sort of discussion, so I thank you for writing the original post that inspired mine!

                                                                1. 1

                                                                  Also if you find that you would be willing to share it as a story on this site I would appreciate that as well :x I’d like to get as much feedback as possible, but unfortunately I have a ~70 day countdown of being a new user before I can start sharing new urls it appears.

                                                              1. 1

                                                                It will be interesting to see how some of these go. Video recording yourself can be a lot harder and awkward than folks think. Going to start watching these!