Personally, having read the manual and PIL, I don’t think I ever had those problems. I seem to have understood from the start that ...
etc. are “their own thing”, i.e. a special kind of syntax with specific semantics. This article’s tone makes me think it’s a result of accidentally attaching a mental model of some other construct from other language to ...
, and not fact-checking it with the manual, and then being outraged at the difference. For a calmer tone I’d consider rephrasing this article to something to the effect of:
Lua has a special syntax related to ...
, that is not commonly found in other currently popular languages. Some interestingly differentiating features of it (see also chapters X, Y and Z of the manual and PIL) are: […etc…]
Also, as a side note, I don’t think dynamic scoping is what the article seems to suggest - or am I missing something?
Thanks for your comments on the tone of the article. I definitely didn’t intend for this to be a rant or to be taken as a criticism of Lua as a whole. I’ll see if I can soften the language to make it more clear that I’m trying to warn about potential gotchas rather than just criticizing the language generally.
Could you elaborate more on how my explanation of dynamic scoping is wrong? I definitely don’t want to mislead people there.
You can still understand where the contents of ...
is coming from by just looking at the program’s source code, so AFAIU this is still lexical scope. For an example how dynamic scoping in Lua could be implented, see e.g. here: https://leafo.net/guides/dynamic-scoping-in-lua.html
Truth said, I’m not really sure in what way you suggest ...
results in a dynamic scope. I’m kinda guessing you’re maybe trying to convey that writing local a, b, c = ...
makes a & b & have “dynamically scoped” values? But IIUC, scoping is all about resolving names, and here the “visibility” of all the names is clearly resolved purely by analyzing the text (i.e. source code) of the program; values is something different than scoping, e.g. writing local x = t[777]
doesn’t make x nor t dynamically scoped either.
Though I personally still find dynamic scoping quite confusing, so I full well may be missing something; happy to learn if that’s so!
Also, I’m even less certain about it, but I think manipulating _ENV
in modern Lua is kinda how you might maybe simulate dynamic scope. But maybe that is not even it either. I think Lisp is the language where you most (in)famously get dynamic scoping. I believe in #define FOO(x)
in C, x could maybe be seen as dynamically scoped? But again not 100% sure :/ That’s really why I inserted the “am I missing something?” in my initial comment, I’m still struggling with the concept myself :/
Cutoff Multivals
The one that that kills me a little in lua comes from this: It’s impossible to set an assert message on a function that returns multiple values.
> function getthings() return 5, 4 end
> assert(getthings())
5 4
That all works fine, but what if I want my assert to have more details about where I was when that function failed?
> assert(getthings(), "no things when $FOO")
5 no things when $FOO
:/
That’s frustrating, I hadn’t run into that with assert
specifically! Thanks for providing that example. It’s a good instance of a case where multivals contribute to the large number of tradeoffs when determining argument order for your Lua functions.
Please note that the “opposite” way of using assert is intended: somewhat resembling Go, it’s a common idiom for a failed function to return 2 values: nil, "some error message"
. You can then plug it straight into assert like below (as shown in “PIL”):
local f = assert(io.open(filename))
and expect assert to print the error message in case of a problem.
As a side note, the freely available old edition of PIL is for a super ancient version of Lua, but I’d still resoundingly recommend reading it for all the tricks and ideas it communicates.
Yep, for sure. I was thinking of exactly that when I mentioned adding more context.
I’ve got the 5.3 ed of PIL and also highly reccomend it. It’s actually one of my favorite books. It’s one of the only books I’ve ever read that manages to not be overly verbose, but also doesn’t have big gaps leaving you confused.
If anyone else is interested in picking it up Feisty Duck has a DRM free ebook version of it.
What do you think of this?
assertm = function(x, ...)
assert(unpack(arg), x)
return unpack(arg)
end
Oh, interesting, message first. Yeah, that definitely seems to work. Thanks for the tip!
(Sidenote, that code needs a s/arg/.../g
.)
It’s not a problem unless you try to do something like this:
a, b = assert(getthings(), "no things when $FOO")
and then you can just do that instead:
a, b = getthings()
assert(a, "no things when $FOO")
Oh, for sure, that’s why it only kills me a little. I didn’t mean that it was impossible to write it in a way that accomplished what I want, it was more just an example of the problem in the article that I had run into. (And that took me far too long to realize what was happening, before having a blinding realization that it simply couldn’t work the way I wanted it to.)
Wow! Of all the complaints I’ve seen about Lua, I haven’t seen this one. “Multi-values” just aren’t a thing in Lua. This is not a data structure [1]. Lua allows a function to return multiple values, not all of which need be used. The way to use multiple return values is to assign them to variables:
function foo()
return 1,2,3
end
local a = foo() -- 2nd, 3rd ignored
local b,c = foo() -- 3rd ignored
local d,e,f = foo() -- all assigned
local g,h,i,j = foo() -- j is nil
There are two exceptions to this—if the function call is wrapped in parenthesis, only the first value is used:
local a,b,c = (foo())
print(a)
The second is when the function is followed by a second value, only the first value is used:
local a,b = foo(),4
print(a,b)
Lua also allows a function a variable number of parameters (like in C) and to access these, you need the select()
function (it’s clunky, I admit, and it comes up from time to time on the Lua mailing list). The first parameter to select is the index of which value you want from the rest of the values given to select, and it returns values starting from that index:
print(select(2,1,2,3,4,5))
If the index is negative, it starts from the end, so this will print the last two values:
print(select(-2,1,2,3,4,5))
And if the index is the special value ‘#’, it will return the number of additional parameters given to select:
print(select'#',1,2,3,4,5))
Lua also restricts the number of parameters to 255. Again, this is not a data structure per se.
Your example of a tail call isn’t one. A proper tail call just returns the result of a single function call. Here’s a function that is a proper example of a tail call:
function tablen(t,n)
n = n or 1 -- in case we don't specify n initially
if not t[n] then
return n-1
else
return tablen(t,n+1) -- TAIL CALL!
end
end
Add an additional value to that return statement, and now it’s just a recursive call that consumes stack space. And tall calls don’t have to be in a recursive situation—any return of a single function call becomes a tall call:
function foo()
return 1,2,3
end
function bar()
return foo() -- this is also a TAIL CALL!
end
Tail calls effectively become a form of GOTO.
Returning multiple values from a function used to be an uncommon feature of programming languages, but it’s not like it’s new—one could always return multiple values in assembly; Forth has had it from the start (late 60s), so did Perl (late 80s). I don’t know enough of Smalltalk but I suspect it too, supported multiple return values (70s). And more languages today support it (Go, Ruby and Rust for example).
[1] In the traditional sense of the word. It may look like a data structure, but it’s an annoying one to use, and I think it hampers development to even think this is a data structure.
Thanks for reading the post and replying to it! While I did cover some
of what you mention here, I also completely missed some stuff, like
how wrapping a function call with parentheses limits its return values
to 1 or how you can pass negative values to select
to get values
from the end of the multival. I’ll add those to the post - thanks so
much for pointing them out!
Please do note that this post is not intended to be an anti-Lua rant. I’m a frequent Lua user and my motivation is to help people get a better sense for how Lua will behave in certain edge cases, not to criticize the language as a whole. Perhaps I could make this clearer in the post.
I do have some responses to your comment:
“Multi-values” just aren’t a thing in Lua. This is not a data structure [1].
While it’s convenient not to think of them as a data structure while programming Lua, that’s actually not the case. They are a datastructure in my opinion, just a second-class one with extra rules surrounding them. They have a length, they have a maximum size, and they have contents which can be addressed by index. This is the thesis of my post.
Lua also restricts the number of parameters to 255. Again, this is not a data structure per se.
Again - while it’s convenient to think of this as not a data
structure, it absolutely is - it’s an array of items limited to 255
elements (in practice, this limit appears to actually be at 253 for
some reason). Also note that this restriction applies to both
arguments and return values, but only applies to literal values -
this is why, for instance, you can pass a ...
that contains 255
items to a function successfully, but you can’t pass the same 255
items by writing them out literally in a Lua file. See the following
code for an example:
local function range1(tab, acc, n)
if n < 1 then return tab
else
tab[acc] = acc
return range1(tab, acc+1, n-1)
end
end
local function range(n)
if n < 1 then error("n must be >= 1") end
return range1({}, 1, n)
end
local function increment_each_value(first, ...)
if first then
return first + 1, increment_each_value(...)
end
end
local x = range(1000)
local y = function(...)
return increment_each_value(...)
end
print(y(table.unpack(x)))
Your example of a tail call isn’t one. A proper tail call just returns the result of a single function call.
This is the whole point of the section you’re referring to. Maybe I
can be clearer that I don’t actually think the first example of
range
is a tail call - I already demonstrate it blowing the stack to
show that it is not tail recursive. This is intended to demonstrate
one of the places where the understanding that “multivals are not a
data structure” would trip someone up - if multivals really weren’t
a data structure, why would a call at the end of a multival not be a
tail call? The reason it’s not a tail call is because it’s not
actually in tail position - it’s inside a data structure that just
happens to not have delimiters, instead being represented by multiple
adjacent values separated by commas.
You might argue that this is all obvious, but it tripped me up the
first time I ran into it. Thinking about it for a bit made it make
sense, but my initial instinct was that the initial implementation of
range
was tail recursive. Finding out that it wasn’t was part of the
motivation for writing this post.
Note that the second implementation of range
in the post is
properly tail recursive, and the distinction between the two
implementations is what I’m trying to illustrate there.
Imagine that the syntax to return a multival looked like <<<1, 2, 3>>>
instead of 1, 2, 3
. (I’m not actually proposing this! It’s just
a thought experiment.) It would then be immediately obvious that
calling a function at the end of the multival was not in tail position:
local function range1(acc, n)
if n < 1 then return
elseif n == 1 then return acc
else return <<<acc, range1(acc+1, n-1)>>>
end
end
local function range(n)
if n < 1 then error("n must be >= 1") end
return range1(1, n)
end
You make a good point that tail calls do not require recursion, just returning a single function call. I’ll try to see if there’s a way to add this to the post that fits well.
Returning multiple values from a function used to be an uncommon feature of programming languages, but it’s not like it’s new…
I didn’t mean to imply that this was a recent feature in programming languages, just that it was a relatively unusual one.
Thanks again for your detailed critique of my article!
What I find unfathomable (but it may just be me) is that anyone would think to use function parameter passing as a data structure. In over 30 years of programming experience, you are the second person I’ve come across to do so [1]. Perhaps I’ve been programming for too long, or involved way too much in low level details (my second computer language I learned was 6809 Assembly, followed by 8088, then 68000 and MIPS).
Yes, parameters can be passed around in a data structure, but these days, compiled languages on x86_64 (and some other RISC based systems—I’m also thinking of the SPARC architecture here) pass as much as possible in registers so there’s no data structure backing them. I think that’s why I find it weird to think of the “multi-values” as a data structure.
First off, the limit I mentioned, 250? That’s the upvalues (used in closures) limit, not the paramter limit (I was mistaken there). The Lua parser might impose a limit on the number of literal parameters one can specify, but there’s no effective limit on the number of parameters a function can have. I did construct a table with 2,048 elements, and was easily able to do this:
print(table.unpack(t))
and end up with 2,048 items printed to the screen. And in am empirical test I did, I was able to construct a Lua function (in C) that returned 999,990 values (and that’s probably due to a limitation on the system than a hard-coded limit in the Lua VM).
Also, there’s one other language I’m aware of that uses ‘…’, and uses it in the same context—C. C allows a variable number of arguments (but the restriction in C is that there has to be at least one named paramter). The declaration of printf()
is (per the standard):
extern int printf(const char *fmt, ... );
And like Lua, there’s a special function you have to call to retrieve the unnamed parameters (actually, three functions that work in tandem). The function hides how the parameters are actually passed (via the stack, or maybe in X number of registers, or a mixture of the two).
[1] The first one also used Lua, five years ago.
…data structures don’t have to live in memory. A data structure lives in the programmer’s head and the code that is an approximation of it. Something doesn’t stop being a data structure just ’cause a compiler decides to pass it in registers, or may optimize it out of a particular piece of code entirely.
There’s languages out there that let you very specifically treat function args as a tuple; the main one I’m familiar with is SML. Simple Lisp’s often pass them as a list. My understanding is that it’s just not common because having function args be a special case is useful. More common are languages that return a tuple to implement “multi-values”, such as Rust, pretty much any ML, sometimes Python, etc.
I never thought of subroutine [1] parameters as a distinct “data structure”. At best, one could say that it forms an ad-hoc struct [2], and I think I might be too … something (I’m not sure what) to accept “data structures don’t have to live in memory.” There are implementations of a data structure (a stack can be an array, or a linked list, for instance), but that statement is just too “nothing there” for me to accept it.
So what is an array, a structure, and a tuple?
[1] And I’m using that word very deliberately.
[2] The VAX has two forms of a CALL
instruction—one passes the parameters on the stack; the other in a pointer to some memory. The called subroutine doesn’t care which was used to call it, it just gets a pointer to memory containing the input. The layout will be the same in either case.
It’s late, so, the simplest counter-argument I can think of is: does an array stop being an array if it lives entirely in registers? Sure you’re going to have a hard time indexing it with a pointer, but you could certainly write code to index it with an integer, which is just a pointer without context anyway, and I wouldn’t be surprised if some CPU somewhere even had instructions to make it easy. Structs get passed in registers all the time, in C now as well as Rust and whatever else. What about a floating point matrix that is loaded, stored, passed and manipulated entirely in SIMD registers, is that a data structures or not? Just ‘cause you can’t aim a pointer to it in main memory doesn’t mean it doesn’t exist.
Sure, registers are just specialized memory though. Then take it a step further and ask yourself, if the compiler optimizes the matrix math entirely at compile time down to a single output number, is the matrix still there? It’s not in the binary output, but it’s in the source code, you can go in and change the math and it gives you a different result. So, which version is “real”? Depends on what you want; if you want to know what the machine is actually doing then your “matrix” doesn’t exist, it’s been reduced to just some number sitting in the binary’s data segment somewhere. If you want to be able to logically manipulate the math, then you probably care a lot more about the functions and values in the program than what the compiler does with it, at least until you start optimizing. What about if I do the compiler’s job and do all the math myself, write the algorithm down in the program comments, and stick the constant result in the code? We start edging into the Chinese Room problem.
Guess I’m feeling existentialist tonight. Anyway, you probably know all this. I’ve just been messing around with Haskell too much lately, where “data structure” and “function that produces a data structure” are basically the same thing.
It may look like a data structure, but it’s an annoying one to use
I think this is part of the point of the article; multivals are troublesome because it has many properties of a data structure, (the ...
expression is a compound thing that contains other things) but it’s not first-class in a way that allows it to be used in the ways you would expect to be able to use data structures.
Edit: Ruby doesn’t support multiple values, but it does have syntactic sugar for returning an array which appears like it’s returning multiple values. Smalltalk doesn’t support it either. Forth doesn’t support returning any amount of values, only pushing values onto the stack, which is loosely analogous but a different thing.
Forth doesn’t support returning any amount of values, only pushing values onto the stack, which is loosely analogous but a different thing.
Not so different. Returning multiple values from a function in Lua is exactly that: pushing multiple values on the stack.
That’s why I’m strongly in the “not a datastructure” camp: it’s all just syntactic sugar to manipulate the stack, which is the underlying “data structure”.
Even if you don’t write bindings, if you write a significant amount of Lua, you should at least look at the C API calling convention to understand things like this.
Returning multiple values from a function in Lua is exactly that: pushing multiple values on the stack.
Sure, but in Lua the stack is an implementation detail, whereas in Forth it’s The Whole Point; no one can use the language without thinking about the stack every step of the way.
you should at least look at the C API calling convention to understand things like this.
I agree but IMO the fact that you have to read about the C API to really understand this feature even when you have no interest in ever using C is a red flag.
Resist the urge to get to deep into someone else’s configuration files: you are likely to pull in too much and confuse yourself. At least that’s what happens to me :)
Start with your .emacs
and I’d suggest really getting into use-package. As you start to need to bring in Emacs modes, you can add use-package
stanzas for the modes you are bringing.
As an example, this invocation will go grab the latest PlantUML mode and install it (the :ensure-t
) and set up initialization info.
:ensure t
:init
(setq plantuml-jar-path "~/plantuml.jar"
plantuml-default-exec-mode 'jar)
(add-to-list 'auto-mode-alist '("\\.plantuml\\'" . plantuml-mode)))
use-package is really a killer way to build your Emacs config up.
You’ll find as many opinions as people on this, but I’ve found use-package encourage a form of cargo cult configuration among newcomers. I personally fell into the trap of having a huge init file and knowing nothing about how it worked, because it was all implemented through the nice, declarative, high-level use-package.
Only when I took a step back and ported it to vanilla Emacs did I start to understand. Ran that for a year or two, and recently went back to use-package, confident in knowing what low-level steps it compiles to.
(Oh, and by the way, use-package has a keyword for setting up auto mode based on file name, so you don’t have to set that up manually!)
For newcomers? Maybe, but use-package really cleans up the init.el or if you’re a weirdo like me org mode files compiled into->init.el.
Note I’ve used .emacs/.emacs.d/init.el route for a long time before I found use-package, having done it the hard way i’ve no real desire to go back to raw elisp with all the setq/add-to-alist stuff.
It does abstract incredibly nicely over common patterns, but as a new user it’s hard to get a grasp on how it does this, which means it’s great while it works well but really difficult to diagnose when it does not. Unless, of course, one has done this manually before, in which case it is obvious what happens under the bonnet.
I agree with this approach, and I’ve set up a very minimal self-bootstrapping config for using use-package with quelpa and quelpa-use-package. This gives you a couple benefits:
init.el
using use-package
, and the use-package
forms are also what install the packages.quelpa-stable-p
, you can install from MELPA Stable by default, but still install packages that aren’t available on MELPA Stable when necessary. This is really hard to achieve with the normal Emacs package interface.This is what it looks like to set up a package from MELPA Stable with this setup:
(use-package fsbot-data-browser :quelpa)
And this is what it looks like to set up a package using regular MELPA:
(use-package gruvbox-theme :quelpa (:stable nil))
You can also install things that aren’t on MELPA at all using the same setup:
(use-package ac-php :quelpa
(:stable nil :fetcher github :repo "xcwen/ac-php"
:files ("ac-php.el" "company-php.el")))
I’ve written a blog post about it, and the GitHub repo with the config file and a description of how to use it is at https://github.com/Benaiah/quelpa-use-package-bootstrap-config.
While Fennel does use other files for tests, fennelview, and the CLI tool, the compiler itself is a single Lua file.
ziglang.org is a static site with no JavaScript and no server-side code. The home page is 22 KB data transferred with cold cache. The biggest service that CloudFlare offers is caching large files such as:
These are downloaded by the CI server for every master branch push and used to build & run tests. In addition to that, binaries are provided on the download page. These are considerably smaller, but as the number of users grows (and it is growing super-linearly), the cost of data transferred was increasing fast. My AWS bill was up to $20/month and doubling every month.
Now these assets are cached by CloudFlare and my AWS bill stays at ~$15/month. Given that I live on donations, this is a big deal for me.
You might consider having a Cloudflare subdomain for these larger binaries so that connections to your main website are not MITM’d. Then you could host the main website wherever you please, and keep the two concerns separable, allowing you to change hosting for the binaries as necessary.
If I were in this situation I would be tempted to rent a number of cheap (~€2.99/month) instances from somewhere like Scaleway each with Mbps bandwidth caps rather than x GB per billing period and have a service on my main server that would redirect requests to mirror-1.domain or mirror-2.domain, etc depending on how much bandwidth they had available that second.
Fastly does: https://www.fastly.com/open-source
Amazon also has grant offerings for CloudFront.
Avoid bloating your project’s website, and use www. Put all services on separate subdomains so you can segregate things in case one of them gets attacked. If you must use large media, load them from a separate subdomain.
edit: Based on the reply above, maybe IPFS and BitTorrent to help offload distributing binaries?
I use Dreamhost for all of oilshell.org and it costs a few dollars a month, certainly less than a $15/month AWS bill.
I don’t host any 300 MB binaries, but I’d be surprised if Dreamhost couldn’t handle them at the level of traffic of Zig (and 10x or 100x that).
10 or 15 years ago shared hosting might not be able to handle it, but computers and networks got a lot faster. I don’t know the details, but they have caches in front of all their machines, etc. The sys admin generally seems very competent.
If I hosted large binaries that they couldn’t handle, I would either try Bittorrent distribution, or maybe create a subdomain so I could easily move only those binaries somewhere to another box.
But I would bet their caches can handle the spikes upon release, etc. They have tons of customers so I think by now the industry learned to average out the traffic over all of them.
BTW they advertise their bandwidth as unmetered / unlimited, and I don’t believe that’s a lie, as it was in the 90’s. I think they can basically handle all reasonable use cases and Zig certainly falls within that. The only thing you can’t do is start YouTube or YouPorn on top of Dreamhost, etc.
FWIW I really like rsync’ing to a single, low latency, bare metal box and rather than using whatever “cloud tools” are currently in fashion. A single box seems to have about the same uptime as the cloud too.
A single box seems to have about the same uptime as the cloud too.
That’s… unpleasantly true. Getting reliability out of ‘the cloud’ requires getting an awful lot of things exactly right, in ways that are easy to get wrong.
I’ll add I was a DreamHost customer because they fight for their users in court. The VPS’s are relatively new. The customer service is hit and miss according to reviews.
Prgmr.com I recommend for being honest, having great service, and hosting Lobsters.
One can combine such hosts with other service providers. The important stuff remains on hosts dedicated to their users more than average.
Free just means you aren’t paying for it. This means someone else is paying the cost for you. Chances are their $$$‘s spent is going to do something good for them, and not so good for you. Perhaps the trade off is worth it, perhaps it isn’t.
Assuming the poster is accurate, and Cloudfare is a front for US intelligence, does it matter for what you are using it for?
Of course, should the US Government be able to spy on people through companies like this is an entirely different question, and one that should see the light of day and not hide in some backroom somewhere.
Free just means you aren’t paying for it. This means someone else is paying the cost for you. Chances are their $$$‘s spent is going to do something good for them, and not so good for you. Perhaps the trade off is worth it, perhaps it isn’t.
In Cloudflare’s case, one fairly well documented note is that free accounts are the crash test dummies:
https://blog.cloudflare.com/details-of-the-cloudflare-outage-on-july-2-2019/
The DOG PoP is a Cloudflare PoP (just like any of our cities worldwide) but it is used only by Cloudflare employees. This dogfooding PoP enables us to catch problems early before any customer traffic has touched the code. And it frequently does.
If the DOG test passes successfully code goes to PIG (as in “Guinea Pig”). This is a Cloudflare PoP where a small subset of customer traffic from non-paying customers passes through the new code.
I’d be curious if those customers are rebalanced and how often!
Using free tier customers as limited guinea pigs is honestly a brilliant way to make them an asset without having to sell them to someone else. Whatever else cloudflare is doing with them, that one’s a really cool idea.
Netlify is an option if your site is static, and it offers free pro accounts for open source projects (there’s also a tier that’s free for any project, open source or not, which has fewer features).
Disclaimer: I work there.
Not free, but Digital Ocean Spaces (like S3) is 5$/month for up to something like 5GB, and includes free CDN.
Something like this has been on my todo list for a long time. My idea was to rebuild dwm using Racket and the Racket FFI, but I like this approach far better. The author seems to be shipping the barest of functionality, with the hope of users building their own experiences. Not sure how many will take that on – kind of a small community of people who work in scheme and want this level of customization of their window managers, I’d guess.
There’s a sizeable community of users that use similar setups (see vhodges’ comment, although these setups are usually configured with multiple programs and shell scripts).
Considering AwesomeWM has a sizeable user base (and it’s configured in Lua), I think Xlambda has a place to exist :D
And I hope it becomes good enough that it leads people to be interested in Scheme, like sometimes Awesome helps people get interested in Lua, or like Emacs got some people started with Lisp. I think that may be a bit too much of a tall order, but I think that with enough persistence at making Xlambda more and more versatile, I think such a community might start growing.
If you want to use AwesomeWM but still want to use a lisp, you can use Fennel to write lisp that compiles to Lua!
I’ve been suggested that before, but I have other goals that don’t exactly match with lua interop.
Thanks for the suggestion, though!
Considering AwesomeWM has a sizeable user base (and it’s configured in Lua), I think Xlambda has a place to exist :D
I, of course, believe it can exist. The question is really “how many of these users are unhappy enough to make a switch?”
And I hope it becomes good enough that it leads people to be interested in Scheme, like sometimes Awesome helps people get interested in Lua, or like Emacs got some people started with Lisp.
I hope you are successful! It’d be great to grow a larger scheme community.
You might be interested in WindowChef (https://github.com/tudurom/windowchef) A scriptable window manager. It needs a few pieces to make it work:
I’ve got it setup with multiple desktops (ie one for each topic/task) each with one or more windows stacked at the same position and size - kind of a psuedo monocle mode.
Control tab cycles through the stack and Control-Left and Right take me to the previous and next desktop respectively (I generally only use 3-4 desktops).
Right now I use a hotkey to set the location and size of new windows (Control Home) but want to install and configure ruler to do that automatically.
I think being a developer in a blooming sector can actually mean that one has less protection. The tech industry has pretty much no established union, as far as I am aware.
Seconding this - tech workers must organize to protect our own labour rights, to help and stand in solidarity with less privileged labour groups that don’t have the same level of bargaining power, and to provide a desperately needed ethical check on an industry run amok.
The Tech Worker’s Coalition is a great group for learning how to do so and connecting with others who are also interested. I’ve been going to local meetings for a couple months and it’s been incredibly refreshing to meet other tech workers who feel similarly. There is an online Slack community as well as locals in a number of US cities. Note that while the Tech Worker’s Coalition is an explicitly pro-labour and pro-union group, it is not itself a union, and has very little formal structure. You can find out more or join at https://techworkerscoalition.org/
One US exception I know of has recently been kickstarter (somewhat ironically, I guess).
I live in Sweden, where nearly every job has a collective agreement with a union and most are members of a union.
Except in tech. In tech, you can only count on having collective agreement if you work at a non-tech company such as a bank.
I’ve never been part of a union/unionised agreement in the Netherlands either, but on the other hand I never felt it was particularly necessary as the worker protections under law are already pretty good (too good if anything, as it’s almost impossible to fire people). Additionally, firing a programmer (even if you could at a whim) comes with real costs to your company. A lot of knowledge gets lost, and training a new person is an investment.
I agree that you can only count on it if you are on a non-tech company. In tech you have to make an active choice whether you want to work in a workplace connected to the union or not.
I’m sitting right next to a union representative right now at a product company in tech. Among consultancies there both those which have a collective agreement, those who don’t and a third category who don’t but who claim to have equivalent agreements and protections as those which are.
This third category is the most hurtful. When you have a collective agreement, you get rights and protections and benefits, and you know about them. When you don’t have one, you don’t get those rights and protections and benefits, and this is obvious.
But when an employer says “oh, we don’t have a collective agreement, but we follow what’s written in this one” you get some of the benefits, but none of the rights and protections, and you’re not really sure which you get and which you don’t and it’s very vague and hand waivey.
Protection from abusive management practices, get us benefits that management always gets, and a bit of an equalizer in power. Due process is my favorite union benefit. Management can’t fire us if we’re doing our jobs the way they say. If they do, there’s a sizeable amount of unemployment to cover our time seeking a job. That small detail has kept them from firing workers in majority of cases companies would lay people off. They cut back pay/hours, transfer people, etc to meet their goals. Those people still have a job with health and dental. Two benefits that are uncommon for lots of production workers down here but that their management always have.
get us benefits that management always gets,
This is envy. If we lived in an alternate timeline where management doesn’t get these benefits, you would be content?
Due process is my favorite union benefit.
Due process? How is that applicable here? The argument is that if i gave you money last month I need to keep giving you money in perpetuity unless I prove I should not have to?
Due process for criminal law makes sense, because it involves violating a person’s natural (negative) rights.
In employment it makes no sense, because an employment is a mutually beneficial arrangement. The idea that one side (the employer) has to continue this arrangement indefinitely even if the circumstance changes is clearly unfair to him. Also, employee always has to power to terminate because he can plausible-deniably do a terrible job, which the employer cannot plasible-deniably pay less than the agreed amount.
If they do, there’s a sizeable amount of unemployment to cover our time seeking a job.
A person should be responsible for his own risk management, including the risk of not being continously employed. This should not be pushed onto the employer.
Those people still have a job with health and dental.
While it’s good to have, I don’t thing healthcare and dental care are not human rights because provision of these things require the labour of others and it would be an injustice to force those labourers to work for free or to take money from another third party to compensate them.
I don’t thing healthcare and dental care are not human rights
Perhaps not human rights, but it’s downright dumb for a society not to give these basic forms of health care for free for everyone. Because fixing the ensuing problems is way more expensive.
give us money, or you will have to give us more money later
You can see why game-theoretically, giving in to these demands is not advantageous.
Theoretically speaking, I see your point, but it doesn’t seem to work quite like that in the scale of societies in real life. We’re clearly saving money when we remove health/mental/other problems when they’re just burgeoning. People who get basic health care are not demanding “more basic health care”, whatever that means. They don’t generally like to go to doctors, or especially dentists.
I could expand this to other things you hate (presuming from your nick): public schools, speed limits, mandatory seat belt laws, tobacco prohibition…
Collective bargaining makes it possible to negotiate for desired changes to the treatment of workers which would otherwise be impossible as a powerless individual.
Your reply seems to pretend that
A: companies never treat workers unfairly
B: there are no economic pressures that may cause someone to require to remain in a job, even if they are being treated unfairly
It really does not take a great deal of critical thought to see that neither of these are true.
I’m one of the lead devs for Fennel; been working on it for about a year now and having a ton of fun.
We’ve got a free 1-day conference in Portland next month: https://conf.fennel-lang.org/2019
Ask me anything!
I was curious why it was built on top of Lua specifically. Is that so Fennel can leverage its JIT’d VM and embedding? Or did you all also value Lua libraries wanting them? The latter I wonder about given Id guess there be lot more libraries for Pythkn, Ruby, etc.
Good question. For me personally it started because I was using the Love2D framework for games, and I became very impressed by the speed and conceptual simplicity of Lua.
But there were still a few remaining annoyances despite its simplicity; the statement/expression distinction, the ease with which you can accidentally create a global, and the lack of arity checks in particular were the only complaints I had with it.
It wasn’t enough for me to do anything about, but when I found Fennel, I realized that creating a compiler that targets Lua doesn’t need to be a big deal. The source for the compiler is under 2kloc. Fennel introduces virtually zero runtime overhead, and the compiler output (with a few exceptions like pattern matching) looks very close to the input.
Thanks for response. 2kloc? That’s impressive! That’s in bootstrapper territory.
Love2D looks neat. The first thing that jumped out is it runs on every major platform. Examples look easier than some GUI toolkits from long ago. So, my first thought is: “Could someone use this as a cross-platform, GUI toolkit with simple language to make great-looking interfaces?”
Yeah, actually 2k isn’t just the compiler; it includes the stock macros and the repl.
Love2D is much easier than any other GUI work I’ve done on any platform, yeah. If you don’t need native widgets or the ability to display more than one window it could certainly be used for non-games. In fact, I created a text editor in about 1.2kloc which is a mix of Fennel and Lua: https://git.sr.ht/~technomancy/polywell
It’s loosely based on Emacs and has syntax highlighting, a buffer switcher, support for repl buffers, completion, tetris, etc.
I’ve also had some success using imgui using the love2d bindings. It’s got a lot of handy UI widgets - I used it for game debug UI, but I could see it being used for non-game apps as well.
Yep, that’s me!
I’m sorry to bring this up, and it’s probably considered off-topic here on Lobsters, so feel free to flag this.
I know that OpenBSD and SQLite and lots of great pieces of software have been funded by the US military, and computing and military have a long and complicated relationship, but where do we as developers draw the line as to whom we are willing to accept contributions from?
This is from Palantir, the company providing the technology for Trump’s deportation machine. I don’t think that this is a black/white issue, and I guess it may be possible to work at a seedy company and still do good stuff. But the docs include a FlightSearch
example; is that really appropriate given the context?
Regardless, thanks for releasing this as free software.
Thank you very much for saying it. I think making sure these ethical topics aren’t ignored is the very least we all have a responsibility to do. It’s also entirely possible that there are people here who didn’t know about it, so it’s always worth saying.
Thank you for saying this. I’m troubled by the cavalier attitude of techies toward ethics lately, and it’s nice to know I’m not alone.
I don’t think a forum where this response is off-topic is worth participating in. The tech industry spends too little time thinking about the ethical implications of it’s products.
Even today, we debate the ethics of using the data gathered from unethical experiments in WW2.
I agree that there is a massive ethical issue working for Palatir - and I am not sure it’s ethical to use the work they have produced. Particularly if it’s a Swagger-like clone not yielding substantive value to humanity.
While we’re at it, you probably typed that on a machine made by highly-exploited workers in a corrupt country that does far worse, added to the lake in the process, probably paid a surveillance-enabling company in a police state to send it over the network, and possibly wearing clothes made by kids in a sweatshop. And you did all this to get online suggesting moral folks maybe shouldn’t contribute to a HTTP/JSON thing that’s open source since a bad company might misuse [more] open source. Seems hypocritical to me.
Where to we draw the line on how our consumption and contribution harms or helps others? And do you regularly do that for every product and service you buy? Most of them? Have you been active in government on laws, treaties, court cases, etc? The stuff that stops things like you describe. Or just some quick, social signaling on Lobsters getting feel-good points? If you care, I encourage you to put time into legal reform or bootstrapping alternatives to each of the things I mentioned. Maybe make for better opportunities for immigrants in whatever your country is, too. Maybe host some coding bootcamps or something for those in the slums. What you’re doing here is adding to the noise but not helping Trump’s victims or your country’s immigrants in any way.
I feel like this is a great example of whataboutism.
I think that if this approach was applied to tech, we’d never fix a bug because “what about the other bugs that could crash the app, this is just virtue signaling because physical compromise means game over”. Why fix a bug when you can say “What about the terrible state of security education in general, why fix a security bug when developers are just adding more?”
It’s ok to make a judgement call and improve one thing in this messy world. It’s ok to try and reduce your footprint/total harm while hypocritically still participating in the system that feeds you. In fact that’s sort of core to improving those systems in a democracy.
Sorry if I misinterpreted your statement, I greatly enjoy your comments across the internet.
Whataboutism is a common reply on HN or Lobsters when a popular group decries their outgroup’s activities, third party points out their actions are contrary to their own beliefs, adds that the biases indicate they’re scoring political points rather than really care, and someone pops in to say third party is whataboutism to silence those views. Thing is, whatever 3rd party brings up is almost never on these forums, getting crowd support, or whatever. Always absent. Rather than likely-intended purpose, the whataboutism claim just reinforces specific types of people supporting/rejecting specific activities by silencing dissenters. I mean, if commenter really cares about Trump’s horrors or not contributing to evil organizations, why the hell are they funding evil, slaving companies to buy toys to spend so much time on the programming projects? So, they probably don’t care or are acting like it now. Then, I do to them as they do to others.
Far as what I’m doing, I’ll tell you straight up. There’s been an increase over time of political comments that are about shaming people into behaving certain ways for a perceived, social good. Almost all of them are coming from hypocrits and/or slactivists. I mean, they’re talking on a forum no politician reads with low views. It’s not going to change Palantir’s or Trump’s practices. They know they avoiding stuff that can get results to spend time on Internet forums. So, they’re just getting an emotional high off attacking their opponents, looking like they’re responsible, or getting meaningless votes from people that agree with them. They also tie up our threads with that shit. So, as a real activist doing real-world work, I just call out their selfish, hypocritical bullshit to (a) deter more comments like that here and/or (b) encourage them to actually work on the causes they claim to work on.
Disclaimer: In fairness, people could (and do) call me out for not putting more time into actually building and deploying secure goods rather than high-level designs posted online. Although I defended my choice, I’m probably guilty of screwing up on a reasonable ratio between the two. Anything above zero code might be better. I plan to work on that more next year after I change circumstances.
Disclaimer 2: I say “almost all” cuz a few people here are legit activists or doing things at a loss to address the causes they’re talking about. I respect them a lot.
“It’s ok to make a judgement call and improve one thing in this messy world. It’s ok to try and reduce your footprint/total harm while hypocritically still participating in the system that feeds you. “
I totally agree with you. That’s not what the person was doing, though. It won’t stop Palantir’s contracts, it won’t stop the government’s activities, and proliferation of HTTP/JSON libraries will continue. The latter will even be FOSS so anyone, including Palantir, can use them. Maybe person complaining should start an alternative to Palantir that’s more ethical, organize boycotts of their products, get in a HR office poaching all their smartest talent (or delivering idiots), make enough money to pay off politicians to change government policies, and so on. Stuff that actually affects Palantir or Trump’s agencies.
“I greatly enjoy your comments across the internet.”
Thanks and same to you. :)
Maybe person complaining should start an alternative to Palantir that’s more ethical, organize boycotts of their products, get in a HR office poaching all their smartest talent (or delivering idiots), make enough money to pay off politicians to change government policies, and so on.
This objection is absurd on its face. You can’t ethically compete in a market for unethical services. An ethical alternative to Palantir is an oxymoron, because Palantir’s ethical issues are fundamental to the things that Palantir sells. You also can’t “organize a boycott” of a defense contractor. Your final two points are literally “just have enough money to fix the problem”.
How does starting a company which sells the same thing as Palantir to the same customers Palantir sells to, hires the same people as Palantir, has the same wealth as Palantir, and bribes politicians the way Palantir does, stop the problem of companies that behave like Palantir? You’re objecting to someone criticizing the status quo by telling them they should instead… further reinforce the status quo?
I think you misapprehend what is going on here. This is a forum for highly technical people; by raising the serious ethical space Palantir exists in, it directly bears on creating difficulty in recruiting, along with decreasing retention.
You, of all people, should understand the power of words on an internet screen to influence readers: you’ve been writing long & grammatically correct essays on security across multiple major internet fora for years. I’ve seen you on Schnier and HN, :) Communication, persuasion, and discussion are an essential activist activity. (And for my money, it is substantially more effective than picketing and marching 95% of the time…)
“by raising the serious ethical space Palantir exists in, it directly bears on creating difficulty in recruiting, along with decreasing retention.”
I agree with you. I actively do that in real life every day for customers and coworkers wanting something better in a lot of areas. I have plenty of results to show for it. That’s because I put the time in where it gets results and consistently do it rather than one-off’s we sometimes see here. Companies like Palantir use recruiting practices that cast a wide net. Anyone wanting to disrupt their recruiting should be posting such comments on sites with massive numbers of page views that are mostly developers. Big, social media sites like Twitter, Facebook, Reddit, and Hacker News. LinkedIn, too, if you can do it that way but I haven’t been on in long time. That’s why I encourage them to put political efforts in front of literally millions of developers instead of a hundred or less participating here if aiming for a big wave of change.
“You, of all people, should understand the power of words on an internet screen to influence readers: you’ve been writing long & grammatically correct essays on security across multiple major internet fora for years. I’ve seen you on Schnier and HN, :) “
You said long and grammatically correct. You gotta be messing with me on second half lmao. I agree with the power of words and persuasion as stated above. Hell, you had to have seen me do it there, esp to “Skeptical” (troll or near-perfect DOD apologist) before I left. That’s why I tell them to use that power where it gets results instead of Lobsters. Then, we keep Lobsters focused on deep, technical stuff with low noise. Anyone wanting to achieve political action can ping Lobsters, via dedicated threads or private messages, to go where the action is to get actual, Palantir-scale results.
““It is what it is”, which is what your comment & Nick’s comment promote, simply promotes apathy; history provides many examples of change taking place. I encourage people to shake off the belief that things will always stay the same.”
That’s not true at all. I’ve just followed something like several lifetimes worth of history on the U.S. military and government under both left- and right-leaning leaders finding the military-industrial-complex just got more powerful over time. The politicians of both sides support it. The right supports companies like Palantir overtly. The left’s politicians will support the defense contractors for both payouts and to bring jobs to their districts. So, to change the situation voronoipotato describes, you have to get millions of people to vote out scumbags that take money to improve chances of elections to combat defense industry or get an anti-war, pro-immigration President in office with Congress willing to roll-back legislation.
The last election surprised most lefter-than-I liberals that were trying to make people say the correct things on forums, etc in ways we see in some threads here. I doubt they’re capable of achieving that 180 directly if keeping same practices that failed before so hard they didn’t even see what was coming. Fingers crossed that we just get lucky that Trump does so much damage and embarrassment that a reversal happens in swing states after the Democrats get on top of their shit this time. Or we centrists get a President. Fat chance on that one since few listen to moderates. ;)
The person you’re talking to likely doesn’t even think that Defense Contracting is unethical. Being said palantir is going to keep existing, boycotting doesn’t mean anything here because we don’t even buy their products. Even under a proper organized effort if we got a different defense contractor absolutely nothing would be different. The only tactics I’m aware we can do are mitigation tactics of not giving our labor to defense contractors, but this drives up the wages to the point where someone would. You can if you work there do a labor slowdown, but your ability to act in that way is limited, and useless if it’s not a group effort.
Palantir is a bad thing but our ability to affect it is extremely limited. Electoral politics is mostly useless here. Their lobbying power affects both parties pretty evenly. IMHO it’s better to put energy into mitigation tactics into problems where it’s easier to have traction. One group has been for example paying for bail bonds for refugees.
Defense contractor spending isn’t a symptom of capitalism but rather attached to the heart, a swollen vestigial organ from mercantilism and much like the appendix may kill you if you remove it unskillfully.
I think it’s natural to see the biggest problem and try and lock horns with it, but sometimes a smaller problem you can solve is genuinely better than a larger problem you can’t. Obviously don’t work for them, there’s plenty of other places that pay you well and you won’t even have to think about all the bodies when you go to sleep.
The person you’re talking to likely doesn’t even think that Defense Contracting is unethical.
Yes, but the person they’re suggesting this in response to does, which was the context of nickpsecurity’s original suggestion to compete with Palantir.
The only tactics I’m aware we can do are mitigation tactics of not giving our labor to defense contractors, but this drives up the wages to the point where someone would.
I don’t know what your point is. Driving up wage costs for unethical corporations is the point of organizing an effort to boycott employment at specific corporations. The goal is making things like human rights violations untenable to corporations by making them unprofitable. Yes, this is a half measure - but it’s not nothing, either.
Defense contractor spending isn’t a symptom of capitalism but rather attached to the heart, a swollen vestigial organ from mercantilism and much like the appendix may kill you if you remove it unskillfully.
So your point is, we should leave it alone?
I think it’s natural to see the biggest problem and try and lock horns with it, but sometimes a smaller problem you can solve is genuinely better than a larger problem you can’t.
On the contrary - refusing to work for companies like Palantir and encouraging my fellow tech workers to do the same is one of my most fruitful opportunities to fight against systemic injustices at the moment. Each of us in the tech industry have far more influence on an our industry’s actions than on the actions of things like the federal government - there are less than four million programmers in the entire US, as opposed to the vastly higher number of voters. We should be adamant about using our privileged place as one of the few labor pools left with real negotiating power to prevent our industry from committing acts of evil, not conveniently defeatist whenever someone dares to suggest the small personal sacrifice of choosing not to directly build the tools of human misery.
Fundamental changes are achieved by many people choosing to not accept what is, and coming together to push towards a major change in the status quo.
“It is what it is”, which is what your comment & Nick’s comment promote, simply promotes apathy; history provides many examples of change taking place. I encourage people to shake off the belief that things will always stay the same.
Whataboutism is a common reply on HN or Lobsters when a popular group decries their outgroup’s activities, third party points out their actions are contrary to their own beliefs, adds that the biases indicate they’re scoring political points rather than really care, and someone pops in to say third party is whataboutism to silence those views. Thing is, whatever 3rd party brings up is almost never on these forums, getting crowd support, or whatever.
No it’s a common reply when you distract from the discussion at hand to go ‘oh but what about these other unrelated issues?’ Your response is literally at the level of ‘capitalism made your iPhone you’re using to have this conversation so checkmate’ in a discussion about economic systems.
There is no ‘popular group’ here, there’s no ‘outgroup’, nobody is decrying anyone’s activities. You haven’t ‘pointed out’ any actions that are contrary to anyone’s beliefs or exposed any biases or virtue signalling. All you’ve done is responded to a post pointing out that Palantir might be an unethical company, accusing them of virtue signalling! They didn’t even say ‘Palantir is bad’. They suggested that it might be, and that it was worth thinking about and discussion. Did you then discuss it? Did you think about it? No, you just launched into an attack, said that their post was social signalling and accused them of hypocrisy.
Imagine for a moment the discussion was oil companies, and the person you were responding to had said ‘I think oil companies often act unethically and I think we should consider whether we want to be working with them and contributing to their open source software’. Your response was the equivalent of ‘you don’t have an electric car so you’re not allowed to discuss this’. I hope you can see that that is nonsense.
I totally agree with you. That’s not what the person was doing, though. It won’t stop Palantir’s contracts, it won’t stop the government’s activities, and proliferation of HTTP/JSON libraries will continue. The latter will even be FOSS so anyone, including Palantir, can use them. Maybe person complaining should start an alternative to Palantir that’s more ethical, organize boycotts of their products, get in a HR office poaching all their smartest talent (or delivering idiots), make enough money to pay off politicians to change government policies, and so on. Stuff that actually affects Palantir or Trump’s agencies.
When someone says ‘where do we as developers draw the line as to whom we are willing to accept contributions from?’ they are opening up a discussion. Maybe the result of that discussion would have been ‘anyone actually’. Suggesting that the first thing you should do is start boycotting companies before the issue has even been discussed is ridiculous. Discussions are fine. Discussions are not slacktivism. Posting ‘#stoppalantir #metoo #stoptrump’ at the end of your tweets and doing nothing else in your life is virtue signalling. Discussing issues is not.
There is no ‘popular group’ here, there’s no ‘outgroup’, nobody is decrying anyone’s activities.
A person submitted a HTTP/JSON toolchain that they were open-sourcing. A versatile, general-purpose tool that can be used for good if someone wants to. The comment I replied to ignored the software submission entirely to tell them they’re unethical for working at Palantir since other parts of the company uses its tech to serve an unethical customer. That’s decrying activities. Such reasoning also applies to companies like Google (or other surveillance companies), Apple/Foxconn, VC-funded companies aiming for lock-in, and so on since buying their stuff or contributing to their FOSS might support all kinds of evil. Some people supporting the decrying comment even work at such companies despite other jobs being available for people with that kind of talent. Strange.
The fact that this accusation and suggestion to quit their job got 60 votes vs 7 about the submission… on Lobsters with lower numbers of votes to begin with… definitely says it’s popular. The marked difference between the people who support or question that tangent supports the existence of an outgroup relationship. I can’t say as much about what it means here since the outgroup receives more support on a lot of political divides. Lots of folks here hate companies like Palantir regardless of other beliefs. That’s what I’m leaning toward.
It’s been an interesting thread to observe, though.
People can disagree with you without being part of a conspiracy to silence or shame you. Maybe a less emotional response would be more informative.
One of nick’s pastimes seems to be railing against liberal “hypocrisy” on this website, mostly by deflecting into muddy tangential arguments just like so.
Please don’t post ad-hominem attacks here. If you disagree with the argument, pick it apart politely.
Lord knows you should have enough practice by now to do so.
If you disagree with the argument, pick it apart politely.
That only works if both sides are arguing in good faith though which definitely doesn’t appear to be the case with some commenters on here.
If that’s the case, then arguing further with somebody in bad faith is just going to create noise and antagonize other lobsters. Best just to ignore the posts then.
I do but it ruins the lobsters experience for me to see people arguing in bad faith without any censure. Some of them even seem to be encouraged as a kind of clickbait/outrage generator. It’s disheartening.
Leaving whataboutism aside, I think you cannot conflate the (delusional) idea of ethical consumption with active usage and contribution of open source software.
Ethical consumption doesn’t work for the structure of the market, where the contribution of the individual gives no perceivable feedback to the system.
The Open Source world and software engineering are a much smaller world. It is a realistic goal to radicalize enough software engineers inside and outside of Palantir in order to halt their production. Your target audience has contract leverage, money and is highly connected and easily reachable.
This is a much easier and realistic goal than convince the management of some big corporation to reduce their exploitation just because a small minority of consumers is unhappy. When they realize this, instead of reducing exploitation, they invest in more marketing to wash their brand, or they simply start a new one. Much cheaper.
Don’t conflate your power as a consumer with your power as a producer, because they very different.
I used to work for Nokia. They did everything in their power to ethically source all their materials. It was the only phone company that did that. Other companies don’t do that because nobody demands it from them. While there is no ethical consumption under capitalism, there is slightly less terrible consumption. So where do we draw the line? As deep into their pocket books as it can go.
Now, keep in mind the new Nokia phones are made by a different company that just licenses the brand. I’m not sure if care as much.
[…] the lake […]
That is horrible.
Seems hypocritical to me.
Ok.
Where would you draw the line personally? Do I understand your opinion correctly as suggesting that if you use a computer, then you shouldn’t be discussing unethical behaviour, e.g. racism? It is not my intention to judge here; just genuinely curious.
Maybe make for better opportunities for immigrants in whatever your country is, too.
I agree with this very much, and this is something that I aspire to do. Additionally I do have friends that have been deported, and worry a bit about my own not so distant post-Brexit situation in the UK.
Im glad you’re doing real work on this issue. I commend that.
Writing it here likely isn’t is the thrust of my point. Instead, it’s just adding noise to the forum plus sending a jab at one of only folks we know in Palantir doing something possibly beneficial (eg open-sourcing software for data analysis). The people here that would agree with your position already dont work for Palantir, use their services, or vote for folks that support horrible policies on immigration.
Those that do these thing are (a) mostly not on Lobsters where your comments bave about lowest ROI you can get and (b) usually disagree with you with no intent to change their mind based on your comment that states the obvious. So, you’re not reaching them. Goes for similar comments aiming for political impact on government-level stuff in non-political, Lobsters threads. So, I push for people not to introduce them.
Im at work now so responses might be delayed.
mostly not on Lobsters where your comments bave about lowest ROI you can get
Yes, you are probably correct in that observation.
I wasn’t really sharing my thoughts here expecting any impact, but rather because I’m interested in hearing what other people think. And you are right that I’m being hypocritical here, because I doubt I’d react the same to an IBM project even though they have a shameful past; and even worse, I used to work on this phone app promoting some agrochem from DOW. At first I just kept my eyes on the code, but I couldn’t justify it to myself after reading about their role in the Vietnam War and the Bhopal Disaster and all that.
So, it was intended more of an open question about where people here draw the line.
Well, you seem to be speaking out of the heart on things you’ve been close to personally. I respect that. I still say low-ROI with better results elsewhere. You were bringing it up for good reasons, though. The community response also strongly favored your comment in a way consistent with prior threads on politics showing a shift in what Lobsters wants as a community. I’ll write on that in the future.
And it’s still cool you’re another person reusing older computers with the LiveCD tests and such. Off-topic a bit, but I was wondering if the hardware vulnerabilities they probably won’t patch on 5-10 year old machines have you considering new stuff? I always knew they were there. Now, they’re coming quickly with many eyeballs on them. Might be best reason I ever heard to get the latest and greatest from Purism, Raptor, or whoever. And then most have backdoors for (insert group) but fewer hardware 0-days for (more groups). Wait, I thought this tangent-tangent could lighten things up with easier choices… Looks just as hard… ;)
Off-topic a bit, but I was wondering if the hardware vulnerabilities they probably won’t patch on 5-10 year old machines have you considering new stuff?
I don’t know enough about this; what hardware vulns are we talking about here, and how easy are they to exploit? Although it’s not really about hardware, there’s that whole Intel Management Engine issue that is avoided by using somewhat old WinXP-era 32-bit laptops, so newer is not always more secure.
And it’s still cool you’re another person reusing older computers with the LiveCD tests and such.
Oh yes that thread! At least it’s a bit less harmful if we can use computers for longer. A friend of mine has a Mac that can’t get more OS X updates now, so she’s stuck with insecure versions of Firefox and all that. Gonna put Debian on it later this week, hopefully!
Do you know of any somewhat more ethical laptop producers?
re hardware attacks.
Essentially, the hardware has always been secure with only elite pro’s focusing on it. Now, due to Meltdown/Spectre, hardware attacks have gone really mainstream with all kinds of university research, private research, folks describing stuff on blogs, and so on. All the CPU’s that were highly optimized (esp Intel/AMD) are vulnerable to them needing patches. They’re doing the attacks over the network now. Older systems used to be safer but now they’re not since attacks will get more numerous and effective over time.
About the only things that are immune were simpler, embedded CPU’s. They’re not designed for security, though, with far less attention by defenders. So, that could reduce the hardware risk adding to the software risk. Simpler boards that can run modern, security-updated OS’s might help. I’m not sure. At lot of stuff is piling in.
re put Debian on it.
Ok, you’re already using that strategy. Good thinking and being helpful! :)
re ethical producers
I can’t remember since I was buying used ones like you. The one I see in media most with good things going for it is Purism. They try to disable the ME with software changes, too. Some folks pushing high freedom were using MiniFree to get ME-less, FOSS-firmware laptops. It had downsides. My own Core Duo 2 still handles stuff nicely outside games, highest-def content, and worst of web apps. Here’s a Guardian article I just found with some recommendations. Another said iFixit can help keep things going.
So, not a lot of options for new hardware minimizing harm to self and others. There are options in both reuse and new categories that help us reduce harm. We can at least do that. I stay dedicating slices of my research to solving this problem. Tracking whatever can help for whoever can do it. Maybe something will shake out eventually.
Additionally I do have friends that have been deported
Sorry but are we now living in a world where the ‘standard’ left-wing political view in the Anglosphere is that any kind of deportation is bad? Because that’s how I’m reading this comment.
Immigration policy exists for very good reasons. The American political dichotomy that either there should be zero immigration or completely unchecked immigration is, for lack of a better word, moronic.
I think it’s fair to assume that the poster could be criticising the particular immigration policy that led to these deportations, instead of all immigration policy.
It could be fair, if the poster denounced similar and almost identical policies under the previous President. As it stands, the poster is mostly just criticizing immigration policies that seemed totally reasonable and main stream just eight short years ago.
You can’t make perfect the enemy of good. Your argument essentially seems to be that if you can’t live perfectly you shouldn’t try living better at all.
It’s virtually impossible to operate in the modern world without using the internet, without having and using a computer. If it were possible to, for a reasonable price that I can afford but knowing I’d have to pay somewhat of a premium, buy a computer that I knew wasn’t made using exploitation of those in the third world, then of course I would buy one. But I don’t know that it is. And there are other competing priorities too, like getting a computer that is free of binary blobs and proprietary software.
I certainly don’t pay a ‘surveillance-enabling company in a police state’ to send anything over the internet. I pay an ISP for internet access, but I don’t live in a police state and as far as I know my ISP doesn’t enable surveillance.
In the same way that I think it’s perfectly reasonable for someone to say ‘I can’t afford to be vegan’ even though being vegan is morally important, I think it’s perfectly acceptable to say ‘I can’t afford to buy ethically produced clothes’. Plus there’s significant evidence that manufacturing things in third world countries has improving their living standards and wages considerably.
Where to we draw the line on how our consumption and contribution harms or helps others? And do you regularly do that for every product and service you buy? Most of them?
I like to have an idea, at least, of what goes into the things I buy, yes. It’s hard to do it with absolutely everything though, because there’s just so much different stuff.
Have you been active in government on laws, treaties, court cases, etc? The stuff that stops things like you describe.
That’s absolutely ridiculous. You do not have to be a member of government to have a political view. You do not have to negotiate an international treaty to have a political view. You do not have to sue someone to have a political view. Your standards are ridiculous.
Or just some quick, social signaling on Lobsters getting feel-good points?
Discussing important issues is not ‘virtue signalling’.
If you care, I encourage you to put time into legal reform or bootstrapping alternatives to each of the things I mentioned. Maybe make for better opportunities for immigrants in whatever your country is, too. Maybe host some coding bootcamps or something for those in the slums. What you’re doing here is adding to the noise but not helping Trump’s victims or your country’s immigrants in any way.
This has nothing to do with immigrants and everything to do with Palantir being a company that operates in an unethical manner. It’s a surveillance company. There’s absolutely nothing problematic about a company producing software on contract for a government that has immigration policies. The issue is that Trump’s policies are violating human rights in how they’re enforcing those laws.
You don’t solve this problem by creating ‘coding bootcamps’ for immigrants LOL.
I guess it may be possible to work at a seedy company and still do good stuff.
Regardless, thanks for releasing this as free software.
Every field of endeavor is welcome here. Every field of endeavor is welcome here for technical discussion, free of (without expectation of) moralizing, guilt, or shame.
I personally already draw the line at technology coming from uber for ethical reasons, so I will not touch palantir things at all. Thanks for bringing that up!
Planning on hacking on ces.fnl and the game I’m slowly building with it.
I’m Benaiah, and I blog occasionally about JS, Lisps, Emacs, and other things at https://benaiah.me.
Atreus with clicky switches and the stock firmware for a little over a year (IIRC). I only use it at my desk, but I’ve been very happy with it so far - it’s one of the least expensive and most easily available of the small, staggered-column keyboards. I have to stave off wrist pain/finger numbness which keeps recurring (I switched from a mouse to a trackball recently as well), and one of my hard requirements for a full-time-use keyboard is that it can’t have staggered rows, as the side-to-side motions make the pain flare up much more quickly. My only complaints are that I wish I’d remembered where I put the rubber footies it came with, as it’s very slidy with just the screws on the bottom and a couple of them have loosened and gone missing due to sliding on the desk.
It’s worth noting that static sites and CMSs are not mutually incompatible - I work on one, Netlify CMS, which connects to a hosted Git repo and edits the content within it, which triggers a rebuild of the site if you have a CI pipeline set up. There’s other ways to do it as well, such as using a CMS which serves content through an API API (GraphQL is typical for this kind of CMS) which your static site generator pulls from to build the site, and having the CMS ping a service which rebuilds the site when changes are made. The term for these kind of CMSs is “headless CMS” - it’s only involved in editing your content, and the actual building, deployment, and hosting of the site is totally orthogonal. There’s a list of headless CMSs at https://headlesscms.org/ (disclaimer: this site is run by Netlify, though it’s an open-source project with a repo at https://github.com/netlify/headlesscms.org/).
Awesome! I didn’t know this existed. I’m a huge fan of Netlify and use it for a lot of projects. Didn’t realize y’all have a CMS that works like that – I will investigate this fully.
Your service is fantastic. Super clean + useful.
There are a couple CMS options around. I’ve also been working on one: https://github.com/usetint
I’ve believe Gatsby also supports this via its WordPress plugin. I don’t know how well it works, but lot of people (especially non-developers) are comfortable with the WordPress UI, so it could be a nice combo.
Trying to iron bugs out of my work-in-progress Component-Entity-System library in time for the Lisp Game Jam that starts Thursday. It’s written in fennel, a new lisp that compiles to Lua. (s/o to #fennel and #lispgames on freenode!) Writing/drawing a bunch of game design notes as well.
The software here sounds like it could be Dragon with the Verbal Vim commands? It sounds almost identical to this 2013 PyCon talk by Tavis Rudd: https://www.youtube.com/watch?v=8SkdfdXWYaI
From the article:
“The silver bullet” came when Moyher found a video presentation by developer and coder Travis Rudd, which appeared online in 2013 shortly after his diagnosis, that took viewers step-by-step through Rudd’s own RSI experience. The 28-minute video shows Rudd breaking down exactly how he customized Dragon NaturallySpeaking, a voice-recognition software suite, to write code in the Python language using nothing other than his voice. This countered the wisdom Moyher had seen in forums about RSI and coding, declaring that Dragon’s usefulness in coding was limited. “Don’t do it, it’s impossible,” was the common wisdom, Moyher said.
I know this post will sound really bad no matter how I say it, but I wonder how much of sexism, in the present (unlikely) or future (more likely) will be more fear than misogyny.
Womens are becoming a touchy subjects and, in today’s world where a trial is decided by the public before it goes to court, a false rape accusation does more damage than the trial itself (at least imo). If I were an employer I’d be worried of female employees, not out of hatred or anything, but because they would hold so much power to screw me over.
I personally don’t care what gender you are or religion or species.. I even like talking to assholes as long as they have something interesting to say. (Sadly I tend to be a bit of an asshole myself) But I would still be scared of talking to random women in a context like a conference because I might say something that puts me in a really bad place. It feels like I would be talking to someone with a loaded gun in my face.
I think the best friends I have are those who made me notice my mistakes instead of assuming the worst of me, while the tech scene today seems more like a witch-hunting marathon to me.
On that subject, why does the world have to work with cues and aggressive stances? Why can’t we be honest with each other? I see it every day, someone above me expects everyone to catch on her cues, if they don’t, they’re the bad guys, without even letting the other end knowing anything.
Most angry tweets and blog posts about this topic are from people who just kept everything in or bursted out in anger at them and they got defensive or responded just as aggressively (kinda to be expected, honestly). I would love to see examples of people who were made aware of their behavior and everything went fine after that.
a false rape accusation does more damage than the trial itself (at least imo).
A genuine rape accusation also does more damage than the trial itself. In both cases, the victim is affected. It’s only how we perceive it that’s different.
I think somewhere along the line communities started to encourage angry reactions as a way of maximising engagement. Somewhere along the line, we forgot to be kind by default, in a way we weren’t offline. I meet people who spend a lot of time in online communities, and you can see (amongst some people) that their online behaviour leaks into their personal offline behaviour, but rarely the other way.
I think the recent furore over Equifax’s CSO having a music degree is a good example of this. Nobody should care about someone’s degree, but a marketwatch piece designed to provoke angry responses, provoked angry responses on the Internet. The Twitter algorithms designed to increase engagement increased engagement and the Internet went twitter crazy.
There has to be a way to use a combo of the tools we use for engagement to promote de-escalation and de-engagement. Deprioritising inflammatory content to make the world a better place is not losing out. It’s winning.
That’s what I really love about lobsters. People may have issues misinterpreting context and social cues here, but generally people are kind to each other.
a false rape accusation does more damage than the trial itself
That sort of accusation could, for example, prevent you from winning an Oscar. Or become elected US President.
[Note: Before reading this, readers should probably know I have PTSD from a head injury. The side effects of nervous eyes, mumbly voice, and shaky hands apparently make me look like an easy target for male and female predators alike. I’m like a magnet for assholes who I usually deal with patiently, dismiss, or stand ground. Mostly ignore them. This issue required special treatment, though, since I was always treated very differently when it as something like this.]
Far as scenario you’re worried about, it’s a real thing that’s happened to me multiple times. Not rape claims fortunately but sexual harassment or discrimination. I think I was getting false claims to managers two or three times a year with dozens making them to me directly as a warning or rebuke but not to my bosses. They just wanted me to worry that they could or would destroy me. Aside from the random ones, it was usually women who wanted a discount on something, wanted to be served ahead of other customers, or (with employees) not wanting to do the task they were given since it was beneath them or “man’s work.” Saying no to any of that was all it took…
However, I was in a service position dealing with thousands of people plus dozens of workers due to high turnover. With all those people, just a few claims a year plus dozens of threats shows how rare this specific kind of bully is. Those that will fully push a false, gender-oriented claim are rare but highly damaging: each claim led people [that didn’t know me well] to assume I was guilty by default since I was male, interrogations by multiple supervisors or managers, and a waiting period for final results where I wondered if I’d loose my job and house with no work reference. Employment gaps on resumes make it harder to get new jobs in the U.S.. I got through those thanks to what I think were coworker’s testimony (mostly women) and managers’ judgment that the good and bad of me they’ve seen versus straight-up evil stuff a tiny number of women were claiming didn’t match up.
Quick example: As a team supervisor, I always gave jobs to people in a semi-random way to try to be equal in what people had to do. Some supervisors seemed to cave in if a worker claimed the work was better for another gender, esp labor vs clerical vs people-focused work. When giving an assignment, the most shocking reply I got was from a beautiful, racially-mixed woman who had been a model and so on. A typically-good, funny worker who had a big ego. She said the specific task was a man’s job. I told her “I enforce equality like in the 19th Amendment here: women get equal rights, equal responsibilities.” She gave me a snobby look then said “I didn’t ask for that Amendment. Keep it, get rid of it, I don’t care. (Smirked and gestured about her appearance) I don’t need it. And I’m not doing man’s work.” I was a little stunned but kept insisting. She grudgingly did the job but poorly on purpose to disrupt our workflow. I had to correct that bias in my head where I assumed no woman would ever counter law’s or policies giving them equality outside maybe the religious. I was wrong…
Back to false claims. That they defaulted against males, including other men who got hit with this, maybe for image reasons or just gender bias led me to change my behavior. Like I do in INFOSEC, I systematically looked for all the types of false claims people made esp what gave them believability. I then came up with mitigations even down to how I walk past attractive women on camera or go around them if off-camera. The specific words to use or avoid is important, esp consistency. I was pretty paranoid but supporting a house of five people when lots of layoffs were happening. The methods worked with a huge drop in threats and claims. Maybe the bullies had less superficial actions to use as leverage. So, I kept at it.
This problem is one reason I work on teams with at least two people who are minorities that won’t lie for me. The latter ensures their credibility as witnesses. Main reason I like mixed teams is I like meeting and learning from new kinds of people. :) It’s a nice side benefit, though, that false claims dropped or ceased entirely when I’m on them for whatever reason. I’m still not sure given I don’t have enough data on that one. I also push for no-nonsense women, especially older with plenty of experience, to get management roles (a) since I’ve always promoted women in the workplace on principle and because mixed teams are more interesting; (b) side benefit that a woman whose dealt with and countered bullshit for years will be more likely to dismiss a false claim by a woman. When I finally got a female boss, esp who fought sexism to get there, the false claims that took serious investigation were handled usually in minutes by her. There was just one problem while she was there with a Hispanic woman… highly attractive with excellent ability to work crowds… that wanted my position launching a smear campaign. It almost worked but she had previously tried something on same manager she needed to convince. Her ego was so strong she didn’t think it would matter because she’d win her over too. Unbelievable lol. She left in a few months.
So, yeah, I’d not go to one of these conferences at all probably. If I do, I’m bringing at least two women, one non-white, who barely like me but support the cause. If they leave me, I’m either going outside or doing something on my computer/phone against a wall or something. I’m not going to be in there alone at all given this specific type of bully or claim will likely win by default in such a place. Normally, though, I don’t mind being alone with women if there’s witnesses around that’s a mixed crowd, I’ve gotten to know them (trust them), or they’re one of the personalities that never pull stuff like this. I’ve gotten good at spotting those thanks to the jobs I did working with strangers all day. I get to relax more than you’d think from this comment, though, since vast majority of females on my team, other teams, and customers’ like me or at least neutral. The risk reducing behaviors are so habitual after years of doing them I barely notice I’m doing them until I see a post like this.
Not funny note: There was also real sexism and harassment against women, esp from younger crowd. We had to deal with that, too. On rare events, some physical assault and stalkers that required police and other actions to deal with. One of the problems in many organizations is people will say the woman is making it up. Then, justice won’t happen. Our women were honest enough and male assholes brazen enough that we usually knew who was lying. Similarly when the women were bullshitting about harassment. In many other places or in trials, the defense was the woman might have been making it all up to spite the male. The reason that defense often works is because of the kind of bullies and lies I describe above. I get so pissed about false claims not just since they impacted me but because a steady stream of them in the media is used to prevent justice for real victims. That combination is why I write longer and fight harder on this issue.
a false rape accusation does more damage than the trial itself (at least imo)
In our society, a woman reporting a rape has to deal with a lot of shit from a lot of different people. Stuff like victim blaming, “What did you wear?”, “Oh you must’ve been reckless” make it already very hard for women to report rape when it happens. If anything we should be more concerned with women not reporting rape cases rather than false reports – especially since the latter is very small compared to the former. Sorry for not providing any sources, I’m on mobile right now.
I know this post will sound really bad no matter how I say it,
It does sound really bad. My favorite part is when you use the phrase “witch hunting” to somehow excuse the fear of women being around.
but I wonder how much of sexism, in the present (unlikely) or future (more likely) will be more fear than misogyny.
Oh so very little. Do not fear for mysoginy, it will be around forever.
My favorite part is when you use the phrase “witch hunting” to somehow excuse the fear of women being around.
I could not find a gender-neutral term that carried a similar meaning. This is definitely a fault on my part (my english dictionary is not that rich) but I was referring to the act of persecution by one or more individuals to the intended result of ruining someone’s life, humiliating them etc.
Oh so very little. Do not fear for mysoginy, it will be around forever.
What little hope for humanity and its self-improvement you seem to have. I understand the feeling.
My point was not whether misogyny will go away (it won’t), but how much of the perceived misogyny will be out of outright hatred rather than fear of consequences. Someone who doesn’t interact with women will be perceived as misogynous, but maybe he might just want to stay safe from ending up in a really bad situation? My “gun pointed at your head” analogy still stands. It feels uncomfortable and you can’t expect people to behave normally in those situations.
You seem to be the exact type of person I’m talking about, all going on the aggressive thinking I’m your worst enemy, not giving me the benefit of the doubt. I personally find it really hard to express my thoughts (it’s not just a language barrier, sadly), and getting attacked like that makes me really demoralized and demotivated to even talk. When I am not allowed to talk my mind without people instantly getting so aggressive at me, how am I supposed to not fear doing it?
I personally find it really hard to express my thoughts (it’s not just a language barrier, sadly), and getting attacked like that makes me really demoralized and demotivated to even talk. When I am not allowed to talk my mind without people instantly getting so aggressive at me, how am I supposed to not fear doing it?
Thanks for saying this.
I’m sorry that I sounded aggressive, because I was not trying to. I’m still not angry, nor replying out of spite or hate. :) I’m not a native english speaker (either?), so it can be that. Oh, and I also never thought of you as my worst enemy.
I could probably hug your right now, seriously, although I’m a little unsure how to understand your analogy that interacting with women is like having a gun pointed at your head.
As far as I can tell, we agree that misogyny will not go away – try to destroy an idea… – but we kinda disagree about how we should deal with it. I am not in a position to lecture anyone on the topic, and deeply nested threads tend to go off-topic easily, so I’ll happily reply to your emails if you’d like to.
Thank you for your kind words, I’m sorry I misinterpreted your reply then!
I hate to link to it but I think that what best describes my analogy is a scenario like what ESR described. With no proof (even though the source claimed there had been attempts already) either back then or now, that was ruled as “unlikely” at best, but the fact that it doesn’t sound completely ridiculous and could be actually be put to action by a malicious group worries me.
I honestly don’t think most women are like that at all, and as you said, this is going a bit off topic.
About “how to deal with it”, I’m not proposing a solution, I do wonder if being more straightforward with people and less “I’ll totally blogpost this unacceptable behavior” would make anything easier though.
For example, the author quotes Berry’s paragraph about not giving anything for granted, yet instantly assumes that assuming that females are less technical is a big drag for women in tech. What about a little understanding? With so many women in sales and PR positions, the guy might be just tired as hell of having to deal with marketers (although the CTO title should have spoken for itself.)
Not denying that some people are just sexist jerks, though.
Both literal witch hunts and the more recent metaphorical sense were frequently directed at men. The notion that “witch” is female is an ahistorical modern one and simply not part of what the word means in the context of a “witch hunt”.
…So? Are you reading that Internet comment in the 1700s when historical witch hunts were actually happening?
The witches arrested during the Salem Witch Trials (in 1692-3, around 150 being arrested) and killed (24, 20 executed, 4 died in jail) weren’t all women. A cursory scan of the accused show plenty of male names (although it does seem to bias towards women).
The post content here is a man relating his experience of seeing his cofounder get talked over and ignored because she is a woman, so you immediately comment about… how bothersome it is that a woman might one day accuse you of sexual assault?
What the actual fuck is wrong with you? You should be thoroughly ashamed of yourself. Delete your account.
What the actual fuck is wrong with you? You should be thoroughly ashamed of yourself. Delete your account.
I generally avoid these topics like the plague, but this is the exact reason why. It’s absolutely appalling to me that anyone thinks this is a good response to any comment ever. If you are trying to persuade people or this person, then you have completely failed in backing up your comments with anything but insults. If you aren’t trying to persuade anyone, then you are just a troll who enjoys yelling at someone who is clearly (based on the other comments in this thread) is trying to genuinely learn. You took a teaching moment and made it a display of hatred.
If you are trying to persuade people or this person, then you have completely failed in backing up your comments with anything but insults
This assertion is completely absurd. I’ve been this asshole, been told off and/or beaten up, and learned better. Violent complaint is precisely how signalling to people that their behavior is utterly abhorrent works in society.
How should I signal to you that your behavior here, in this thread, is utterly abhorrent? Should I threaten to beat you up? Tell you to delete your account? Scream aggressive obscenities at you?
Whatever it is you think you need to hear to stop behaving this way, pretend that I said it.
I’ve been this asshole, been told off and/or beaten up, and learned better.
I’ll just say that I find this comment immensely more helpful than your previous comment. If you’d like to expound on how specifically you’ve “been this asshole” in the past, and what you’ve learned from the experience I’d wager that’s much more likely to convince Hamcha (and the rest of us) to change their mind and behavior.
I questioned the reason she was ignored and proposed a motivation for which people might fear dealing with women. I also questioned what would have happened if the guy would have put any effort in making the issue clear to the people he’s talking shit about other than vague clues before making accusations with circumstantial evidence.
What is there to be ashamed of?
Normal people can have conversions with members of the opposite or same gender without constantly panicking about rape allegations. Do you specifically avoid female waiters at restaurants or cashiers at supermarkets? Is this somehow different to taking to a woman in a nontechnical role? If not, why do you think it is reasonable to pretend a woman who codes is any different? Hell, how on earth can you pretend the possibility of rape allegations is a valid reason to pretend that a person does not exist while in a meeting with multiple participants?
Your regurgitation of sexist crap is shameful. Your lack of thought about it is bewildering. Delete your account.
Some beliefs are horrendously evil. Your freedom to believe harmful crap does not constitute immunity from being yelled at for spouting it in public.
I’ve been highly interested in Lua after following the performance of Lua Jit, and seeing how a higher level scripting language can get perf results on par with C. Now I really want to know what all of you are using Lua for! Work, games, embedded?
I mostly use it as a host language for Fennel. I use that to write games in LÖVE. I’ve also done some experimenting with web programming using OpenResty.