The gist of your point is 100% correct. I just want to point out that under the common law definition of assault (and i have no idea what definitions are in effect in SF), the fact that the person calmly ignored them points that this might not be assault.
> Assault is generally defined as an intentional act that puts another person in reasonable apprehension of imminent harmful or offensive contact. No physical injury is required, but the actor must have intended to cause a harmful or offensive contact with the victim and the victim must have thereby been put in immediate apprehension of such a contact.
Calmly ignoring the threat is evidence that the person was not "in immediate apprehension of such a contact".
I only bring this up because i think it's interesting, and the underlying point you are making is 100% correct. This kind of thing is not normal nor innocent and not to be tolerated.
Oh, I was definitely apprehensive of imminent harm.
More details: Fairly normal-looking dude walked up next to me and kept pace for a couple minutes, threatening me and calling me "faggot" (which seemed odd, since I was walking with my girlfriend at the time). I didn't see an actual gun so I figured that the safest course of action was to simply ignore him until he presented more of a threat or walked away. I guess I bored him so he walked away.
For sure. I didn't mean to derail the thread or tell you how you feel, just share what I think is an interesting aspect of assault as defined in common law. But your subjective experience here is exactly what the law means to recognize with assault and sounds like it was assault. But who knows. Glad the situation fizzled out (usually best case scenario)
> I just want to point out that under the common law definition of assault (and i have no idea what definitions are in effect in SF), the fact that the person calmly ignored them points that this might not be assault.
This is actually an interesting point of semantics to me. I guess it'd really hinge on how you define "calmly" here - if you saw me walking my dog while a homeless person screamed that he was going to kill me, I would certainly appear calm. Even internally, I suspect my heart rate would increase but not enormously. Still, I would be very alert and mentally prepared for the possibility that this person is going to attack me, because I very much believe that to be possible. Given that, I would say that I have a reasonable apprehension of imminent harm (and I expect a lot of San Franciscans are similar in that regard).
It's a reasonable belief and fear that person will carry out the act. You are probably misinterpreting the reasonable part, especially when people mask their reaction to try to get away or out of shock / instinct. The person making the threats probably gets enjoyment from getting a rise out of random strangers. Also, returning to the original context, there are too many people on the street that have severe mental health crises going on and are freely roaming some cities. They don't necessarily need to go to be convicted of a crime as a solution.
> Last I checked, doing cljs on Clojure Tools wasn't even possible.
I'm not sure what this is referring to here. The "Getting Started" guide for ClojureScript uses deps.edn and the clojure CLI to introduce ClojureScript. You can certainly use figwheel or shadow-cljs with clojure tools.deps and deps.edn. And since the new build.tools allows just running a program, you can of course build clojurescript from a `build.clj` build script. I cannot think of a step in this process that isn't amenable or simplified by the use of the clojure cli, tools.deps, and now build.tools.
A tuple (ordered pair commonly called) is `(x,y)`. The standard set theory definition underpinning this is that `(x,y)` is shorthand for the set of two elements `{ {x}, {x, y} }`. Where the "first coordinate" is the set with one element, and the "second coordinate" is the element in the set with two items that is not in the set with one item.
It's a standard definition that means we can talk about ordered pairs but still ground it in set theory.
I read the article but either missed it or perhaps it was not included, but what is the result of the violation? Just not being invited back in future years? Does it only apply if the same sponsor puts on the conference?
makes it quite simple to leave the tests in. Also, quite easy to raise forms (structurally raise) and reevaluate the form and then undo but not reevaluate the form to have it modified.
I don't use Clojure; I have no idea. If two occurrences of "x" are mapped to the same object, that is interning; maybe what that does is use its own package-like namespace, separately allocated for each call.
The documentation for EDN says that "nil, booleans, strings, characters, and symbols are equal to values of the same type with the same edn representation." The only way two symbol values can be equal is if they are actually same symbol, I would hope.
> The only way two symbol values can be equal is if they are actually same symbol, I would hope.
Why is this important? Specifically, why do symbols need to be interned?
In Clojure, "Two symbols are equal if they have the same namespace and symbol name." In general, "Clojure’s = is true when comparing immutable values that represent the same value, or when comparing mutable objects that are the identical object." [1]
If we read two symbol tokens from a stream, and the lowest-level equality function that is available to us does not distinguish them, then they are interned.
Because symbols are used to refer to things, whether or not they are mutable can be blurry. You can make symbols as immutable as you want, but as soon as you make one of those symbols a key which refers to a mutable object, such as a global environment, then effectively, the symbol appears as a gateway to something mutable, and you can't necessarily tell whether the mutability is in the symbol itself or something beyond it.
For instance, let's consider global variables. The definition of a global variable has an effect which we can inspect if we have a boundp function:
(boundp 'x) -> nil
(defvar x)
(boundp 'x) -> t
That can be made to work by mutating the symbol (the global binding information can be right inside the symbol). Or it could be working by keeping the symbol immutable, but mutating some hash table of bindings.
Either way, the symbol looks interned, because we have mentioned it several times, and those mentions seem to be connected. The (defvar x) has an effect on (boundp 'x) and so they are referring to an x which is somehow the same.
It could work with x actually be a kind of character string, which got separately allocated three times. As long as we can't show any property of the system indicated by x to be different based on which copy of x we are using to enquire (e.g. boundp reports true for one x and false for another), then x looks interned.
In Clojure land, equal but not identical? symbols don't cause any issues; they can be used interchangeably as map keys, etc. It won't impact code correctness, just potentially cause slowdowns.
With that said, I always thought symbols would intern, but that's not the case. It is true with keywords, however.
Objects that can be equal but not identical are not symbols.
They are, at best, cargo culted symbols: character strings with a tag bit which says "read/print me without quotes, so I visually look like something out of Lisp".
You don't use Clojure, but you're willing to jump in and criticize one part of it that, given the context of the rest of the system, could not be less important?
Whether Clojure's object model and equality semantics as a whole make sense is certainly up for debate. It's highly opinionated and no silver bullet.
But once it's in place, the decision of whether to intern symbols is a trivial implementation detail.
I incorrectly assumed they were interned for seven years of using Clojure professionally, it has never made a difference, and I can't come up with a scenario where it plausibly would.
almost every language which has Lisp in its name is using some form of symbol tables for interning, from McCarthy's Lisp 1 implementation onwards. That's one of the defining features of the Lisp s-expression reader.
If the 'reader' reads an s-expression like (EMACS LISP IS A LISP DIALECT) then both occurrences of LISP are the same identical Lisp object, both are the same symbol.
If your language is doing something different, then it's not using symbols like Lisp-like languages usually do since the dawn of time.
I think the characterisation of Clojure is not that unfair here. It's Clojure keywords have the role that Lisp's symbols have (and I think they have better ergonomics), and symbols are mostly only used for source code representation.
In other Lisps the detailed semantics of symbols are more important including the identity/interning thing.
Rich Hickey was a Common Lisp user before making Clojure so there's a fair chance he knew how symbols worked there, so the cargo culting characterisation should be applied only light heartedly :)
That Clojure is keyword heavy is true, but it's so important to note that objects are essentially never checked for reference equality in Clojure, even when e.g. looking up keys in a hash map (see demo).
With this is mind, you could stop interning keywords and damn near every Clojure program would continue to work just fine - but with a noticeable slowdown.
Or, more sensibly and to bring it back to the theme of the thread, for adding a second non-interning Keyword type which can safely be generated while deserializing user input in a long running process, that you can use interchangeably with standard keywords, but will be garbage collected away with the reset of the deserialized data when you're done.
You do pay a hefty penalty here because you're hiding everything behind interfaces and abstractions. It's totally fine to not like the system, or believe it's not worth the performance hit.
But it does mean that a potentially equal but not identical symbol isn't some off brand low quality replacement as GP suggests, it's just... a symbol.
I wouldn't write a config file parsing library for C programs without interning, so == between two pointers could be used to test for keyword equality.
Interning is used outside of LIsp. See the XInternAtom function in the X Window system:
Atom XInternAtom(
Display *display,
char *atom_name,
Bool only_if_exists
);
or RegisterClass in Win32:
ATOM RegisterClassA(
const WNDCLASSA *lpWndClass
);
Though a typical use is in macros, where macros introduce new symbols and these should never clash with any existing symbol and to which there should be no access via the name.
Example: A macro which writes the form, the value and which returns the value. GENSYM generates a named/counted uninterned symbol.
> (defmacro debugit (form &aux (value-symbol (gensym "value")))
`(let ((,value-symbol ,form))
(format t "~%The value of ~a is ~a~%" ',form ,value-symbol)
,value-symbol))
DEBUGIT
If we look at the expanded code of an example, we can see uninterned symbols:
> (pprint (macroexpand-1 '(debugit (sin pi))))
(LET ((#:|value1093| (SIN PI)))
(FORMAT T "~%The value of ~a is ~a~%" '(SIN PI) #:|value1093|)
#:|value1093|)
We can also let the printer show us the identities of these symbols, labelling objects which are used multiple times in an s-expression:
> (setf *print-circle* t)
T
> (pprint (macroexpand-1 '(debugit (sin pi))))
(LET ((#2=#:|value1095| #1=(SIN PI)))
(FORMAT T "~%The value of ~a is ~a~%" '#1# #2#)
#2#)
Thus we can see above that it's just one uninterned symbol used in three places.
Example run:
> (debugit (sin pi))
The value of (SIN PI) is 1.2246063538223773D-16
1.2246063538223773D-16
Keep in mind that this is a guide from a Lisp using company (bought by Google) who wrote specifically two large applications partly, but significantly, in Lisp: a search engine for flight travel and an airline reservation system. Other application teams may have different rules&requirements, given that they may use Lisp in very different ways.
I'm sorry, my question was based on a four day old memory from the main thread that doesn't reflect what the guide says. It just says don't intern symbols at runtime. Presumably you can pass some kind of a flag to the reader to read lisp data structures without interning the symbols that it reads?
I know the story of ITA well, it and PG's writings are what got me interested in lisp in the first place. Which makes me feel old. But not comp.lang.lisp old, it's all relative!
It's interesting that despite this keywords are serialized all the time in Clojure land (eg in the transit format that is commonly used for frontend/backend communication).
I thought I was one of these gatekeepers; and that was before I found out that Clojure doesn't actually have symbols, but just a string type with a quote-free read syntax.
Even AutoCAD's AutoLisp (the old one from the 1980's) has interned symbols.
How symbols work goes back all the way to the original MacCarthy work, and all of its actual (not cargo-culted) descendants.
For what it's worth, I agree with you. Clojure only weakly holds on to its lisp heritage. I'd liken it to the similarity between C# and C++ (without implying any superiority to either side). Superficially quite similar, some parts near identical, others a complete detour.
With that in mind, however, basing your critique of Clojure on the extent to which it carries the lisp tradition is bizarre. Your criticisms are born of an ignorance of the value proposition Clojure provides, which would not be terribly different even if it had eschewed lisp syntax in favor of something else.
If you actually learned Clojure, there is zero chance you'd be complaining about symbol interning. It's just so ridiculous. You'd probably still think the whole thing is a waste of time, and I'm sure you'd have a big long list of actual, meaningful complaints.
I've seen people criticize TXR for its ugly syntax once or twice here on HN (I pay close attention to lisp posts here), and I thought that was dumb at the time. I'm not interested in learning it but I'm glad you're trying something new. It's a shame to see you stoop to the same level of drive by dismissal.
But whatever. Let's flip each other's bozo bits and move on.
Speaking of TXR, and of "holding on weakly", as a result of this discussion, I made a little change.
A remark was made somewhere that interned symbols are held with a non-weak reference. But it occurred to me that this isn't something engraved in stone. A package should be able to hold on to its interned symbols via weak references. This means that if the only reference to a symbol is from within a weak package, that symbol can be removed from the package and relclaimed by the garbage collector.
Since a package uses hash tables, and hash tables support weak keys, it's trivial to put the two together. I added an argument to make-package to specify a weak package.
In the following test, the symbols interned into package foo get reclaimed because it is weak. Those interned into bar don't get reclaimed:
(defun weak-package-test (name weak)
(let ((wp (make-package name weak)))
(let ((*package* wp))
(let ((obj (read "(a b c d e f)")))
(mapcar (op finalize @1 prinl) obj)))))
(weak-package-test "foo" t)
(sys:gc t)
(weak-package-test "bar" nil)
(sys:gc t)
$ ./txr weak-package.tl
foo:a
foo:b
foo:c
foo:d
foo:e
foo:f
You call Clojure a cargo cult descendant, which implies it's failing to achieve what its ancestors did, by copying features haphazardly without understanding the deeper motivations behind them.
Clojure is a shitty substitute for CL, but that's just not what it is trying to be. It is an interesting and worthy system in its own right.
Presumably you would agree that not all of discovery is also invention. So doesn't that restore the original question of asking whether mathematics is an invention or discovery which is not invention?
I would purchase today except there doesn't seem to be any screen options higher than 1080. I can't go back to 1080 after years of 4k monitors and mbp retina for work and x1 carbon 2k screen on personal laptop.
I wish someone else besides Apple would discover the 16:10 ratio. I love my MBP but every company I've worked at has been allergic to OS X. Right now I'm stuck working from home on a 1366x768 screen because it's "business-class".
I have one. It's pretty. But it provides no useful thing other than occasional touch screen use. But it has terrible battery life. 5 hours is good.
Supposedly the fhd (1080p approx) has much better battery life. I regret getting the 4k screen. For OP above, what's your battery life like? Mine is so bad I keep thinking something must be broken. I'm not doing compiling all day either, doing small things in bash, not killing the cpu, web pages.
That depends on use. For working on or reading papers, it's great: I've significantly cut down on the number of drafts and papers I print, as the screen's ppi is high enough that figures will appear at a similar resolution to what most researchers will have on their printers when adjusted to the correct size on the screen.
I used to own the XPS 9550 (15", 1080p non-touch) and the battery life was around 6-7 hours with the Nvidia GPU disabled. I bought it used so it might have been even better new too.
Even Apple gave up on 16:10, for half of their computers. The iMac went 16:9 in 2009. The Cinema Display went 16:10 in 2010, and the recent XDR followed suit. The LG they sold in between was also 16:9. Only the MacBook Air and MacBook Pro remain 16:10.
I'm with you. I much prefer using my older non-Retina 16:10 displays than my newer 16:9 Retina display. Microscopic pixels are nice, but an extra 10% height is huge.
1080p at 14" really isn't bad though. The state of high-DPI in Ubuntu (on which Pop_OS is based) is _okay_ but you're not really missing out on much with the bigger pixels.
I really appreciate with System76 is doing and if I were in the market for a laptop I'd consider this. Their desktops are very cool too as they custom-build the cases themselves. They do seem to be in kind of a "no man's land" market-wise, where a lot of people who would want Linux are technically savvy enough to build their own computer or install it on an existing laptop. But I hope they keep it up and hit their stride!
There’s a lot of stuff that is aesthetically nicer about Apple machines. But a display is only one attribute of a machine. Many people would rather use software and hardware that protects their freedom, which is why a System76 machine would be a better choice for them.
I have a 2018 MacBook Air (Retina) I use for testing. The display is beautiful. I’m very familiar with running and tweaking MacOS. And honestly I don’t like it. I don’t like fighting with how Apple feels you should be allowed to use -their- hardware. I am way more productive in Linux now that I’m used to it.
> 1080p at 14" really isn't bad though. The state of high-DPI in Ubuntu (on which Pop_OS is based) is _okay_ but you're not really missing out on much with the bigger pixels.
I agree. 1080p on a 27" or even a 24" is pretty bad, but on a 14" is essentially "retina" at normal working distances.
Certainly a 4K would be somewhat smoother, but at the cost of battery life, the need to fiddle with display scaling, etc. I just don't see it being worth it. 2K at most for a display of that size.
Now, a 4K at 32" would be a nice external monitor, and would give plenty of screen real estate (and yet would have a lower PPI than a 1080p at 14").
I run 4K at 32" in Ubuntu and it's perfect. Gnome allows you to specify the scaling of individual apps (if you edit their launch shortcuts), so depending on the app I can run 1:1, 125% or 150%. Effectively a choice between comfort or density.
I've run 1080p at 14" on previous laptops and had no issues with 1:1 pixel scaling. Sure, things are a little squinty but I never felt the need to zoom the UI. I also never felt like things were too pixelated. So yeah, 1080p/14" really is the sweet spot.
That's actually quite exciting to hear. I run Ubuntu on a 34" 3440 x 1440, and it's been a major step-up from dual 27" 1080p displays, but it has made me wonder what is the optimal display for programming.
4K at 32" seems to be pretty close to the most pixels you can fit into a display without either a) making the display so big it becomes unwieldy, or b) making the pixels so small that you have to use display scaling to see anything.
> Gnome allows you to specify the scaling of individual apps (if you edit their launch shortcuts), so depending on the app I can run 1:1, 125% or 150%
Oh, that's a useful trick.
> So yeah, 1080p/14" really is the sweet spot.
Yep, in general (i.e. typical home office use as well as programming) I would say that displays with a density between 120-150ppi are probably ideal for desktop use, whereas a density between 140-170 is right for laptops.
Can’t upvote enough! It’s also my main beef with many chromebooks - decent specs and just unacceptable screens for productivity.
Even though Linux may not scale resolution as good as a Mac or Windows yet, being able to fit more text on the screen is huge for productivity.
When you factor in new gaming options like Stadia or Nvidia Now, where you can game high end stuff without the high end hardware locally, FHD is just disappointing.
What DM do you use? I have endless problems with scaling in both Gnome 3 and Cinnamon, compared to Windows where I've really never had a problem except with some very legacy software. The underlying problem is that the scaling setting in the WM tends to only be observed by software built with the same toolkit, so you have to set scaling up in a different way for each GUI toolkit and there's a decent list of them in common use on Linux.
Adder WS also has a 15 inch 4k model. I have one and use it for work. Definitively not the ultimate portable machine but I use it mostly at home and the office plugged in.
I wouldn't say it's the best option for everyone but if you need a machine with discrete GPU and high resolution that you know for sure will run Linux (many gaming laptop have similar spec but non supported RAID setup) then I'd say go for it.
If you want a portable laptop then dell's developer edition got 4k and good specs.
It mentions in the article that Delta investigated the issue:
> "Our top priority continues to be the safety of our employees, which is why we invested in a rigorous toxicology study to determine if there was a universal scientific issue with the uniform," Delta Air Lines (NYSE: DAL) said in a statement in response to the May lawsuit. "The results of the study confirm our uniforms meet the highest textile standards (OEKO-TEX) with the exception of the optional flight attendant apron, which we removed from the collection."
Delta took this seriously and commissioned a toxicology study. The results are that the clothing meets the highest textile standards. What should Delta do at this time?
Investigate more? I mean, apparently a whole bunch of their employees are indicating there's some sort of an issue with these uniforms. A few individuals might be a fluke, but at this point I expect Delta management to be concerned about this supplier damaging their employee performance and thus Delta's bottom line...
>I expect Delta management to be concerned about this supplier damaging their employee performance and thus Delta's bottom line...
there is no "Delta management". Like in any other typical BigCo the VP(s) responsible for supplies like uniforms is different from those VPs who may have any relationship with the employee performance. The supply VP gets his bonus based on KPIs like cost saving, thus the cheapest/etc. uniform even if that uniform causes issues to the employees and significantly impacts their performance. Their performance isn't in the supply VP bonus KPIs. Imagine yourself in the shoes of that poor supply VP - you can provide better uniforms and lose the millions of the bonus, or you can have the bonus ... So far it has been my observation that a VP always chooses his bonus and defends it to the last man standing. Even if some other (exceptional as such things almost never happen) VP tries to push the supply VP, the supply VP provides that "toxicology report meeting highest standards" and that is it, deal with your disgruntled capricious employees yourself.
B2B is different from B2C. With that being said, just checked their B2C site - for example a commodity like women jeans is $25-35 on the low end. The Land's End manufacturing seems to be mostly China, India, Mexico. It is hard to be cheapest than that.
I’ve been involved in purchasing reasonably large quantities of uniforms (because why not also stick facilities and other random stuff under IT so we can exercise our “purchasing acumen”).
Land’s End is mid-range in cost and quality as far as uniforms go. Especially compared with the super-cheap drop-ship-from-Vietnam vendors.
They're letting anyone affected go buy a new uniform of their choosing at whatever store they want at Delta's cost. I'd say that's absolutely doing right by their employees...
The same issue happened to American Airlines and they eventually modified the uniforms. It sounds like testing in the lab didn't cover all the cases that ended up irritating a group of people.
Is there something about being a flight attendant that changes they way you use clothing? Does the air pressure do something? It seems odd that Lands End would run into such an issue when their whole business is making clothes.
The article mentions that they rarely had elements, not that they were rarely used. They might have been tested for membership in lots of hot paths. There's no way to know. And I bet a lazily-instantiated set might take up even more space than a regular set anyways. And if they are often used, even if not added to, it would have made the problem even worse.
> Assault is generally defined as an intentional act that puts another person in reasonable apprehension of imminent harmful or offensive contact. No physical injury is required, but the actor must have intended to cause a harmful or offensive contact with the victim and the victim must have thereby been put in immediate apprehension of such a contact.
Calmly ignoring the threat is evidence that the person was not "in immediate apprehension of such a contact".
I only bring this up because i think it's interesting, and the underlying point you are making is 100% correct. This kind of thing is not normal nor innocent and not to be tolerated.