1. 38

    As a trans woman who recently discovered that my photos are being used without my consent to train facial recognition to identify trans women, I heartily suggest that cis and straight engineers read this and then consider whether tracking data points like gender are actually necessary.

    1. 5

      Firstly, that sucks. I think questioning what data points are really necessary is a good idea and may help this and other problems. The people who worked on this are absolute monsters and whoever built this deserves whatever ruin they have coming. I am not a lawyer and this does not constitute legal advice, nor do you necessarily have the interest or ability to fight it. I’m not recommending you spend months or years in court fighting this out. All being said this may be a violation of personality rights, they may have broken the law.

      California, Kentucky, Utah, and Wisconsin; hold both Statute and Common law on the subject. Each of these states had this article linked on wikipedia. https://web.archive.org/web/20161015041919/http://www.vjolt.net/vol6/issue1/v6i1a03-Carpenter.html

      Wisconsin had an additional citation on wikipedia for this. http://rightofpublicity.com/statutes/wisconsin

      Personality rights probably don’t just apply to celebrities, and in some states they appear to specifically apply to non-celebrities.I’m mostly soothing my anger with a power fantasy of justice, but maybe someone will absolutely wreck their trash idea with an “all your money” lawsuit. I’m not a lawyer, and this was for entertainment, a fleeting joy of imagining their trash idea getting absolutely wrecked.

      Sorry you went through that, and I’m sorry the best I can offer is a story.

      1. 10

        I appreciate the links! I’ve looked into a few legal avenues that all seemed extremely dubious and expensive, but perhaps I should look again.

        I think questioning what data points are really necessary is a good idea and may help this and other problems.

        I’ve had a number of good conversations about this, on Lobsters and elsewhere, and my understanding is basically that recording gender is useful mainly for advertising. Sometimes one has to record sex when working with healthcare data, which is a slightly different matter, but I’m basically of the opinion that if a piece of software asks for gender information without a very obvious reason (dating app, etc), it shouldn’t be trusted regardless of what you think about your own gender.

        1. 7

          As a trans person who spent nearly five years working on advertising privacy at Google, I can confirm that advertising is essentially the only factor in favor of having gender fields, not just for Google but for every tech company.

          1. 1

            “and my understanding is basically that recording gender is useful mainly for advertising”

            “but I’m basically of the opinion that if a piece of software asks for gender information without a very obvious reason (dating app, etc), it shouldn’t be trusted regardless of what you think about your own gender.”

            The first quote is why what you want will not happen. Very much the opposite. The second quote is true for reasons similar to the first: the uses originate from human greed and primitive emotions. Any data going into something like that will get abused or just wasted eventually.

            1. 10

              Yes, unfortunately. I’m aware of this, but as my North Carolinian grandma used to say, “That don’t make it right.”

            2. 1

              Interestingly, as a guy that has had girlfriends that have introduced me to a lot of interesting products that aren’t generally considered “guy products” (skincare crap seems to work as well for me as for most humans), I just find it funny that I think some ad networks now have me pegged as a woman.

              Just thought you may find that amusing, that said cerave is worth getting misidentified. One of these days I’m sure I’ll buy some of those rando products they keep trying to pawn off on me. >.<

              1. 1

                Heh, yeah. As somone who tends to block ads whenever possible, I have no idea how they have me down, except as someone who watches a lot of technical talks on YouTube.

                There are always stories about ad networks being too clever for their own good (see: the story of Target identifying someone as pregnant before anyone, including her, knew about it), but they can also be pretty stupid.

                1. 2

                  I block ads a ton too, but if i throw the youtube app on my tv on to watch things I get…. interesting ads. While I’m flattered to get ads for “guy soap, ugh, seriously something that doesn’t need to be gendered is soap even if it smells like unicorn farts”, I also get ads for maybelien (sp?) lipstick.

                  I’d buy the lipstick before the guy soap though, those ads piss me off and make me happy youtube-dl exists. But every time I browse the web without an ad blocker I have to laugh a bit internally at how stupid ML/AI/BIG DATA is. Hell give me ads for stuff like diswasher tablets, thats useful crap I didn’t know existed and I needed.

                  And if I were in your shoes I’d be worried about all this data collection as well, we saw in Germany how stuff like this can get used for rather horrid end results later on by the likes of say IBM. Hell I bet someone could use the fact that I buy moisturizer etc… as a way to keep me in line for being an errant nail not of the traditional macho man ilk.

                  1. 0

                    Absolutely. Look at the current Supreme Court docket; if things come out wrong, you could be fired for not using that man soap!

          2. 8

            As a person working on a system that involves face recognition: well then don’t complain when it doesn’t work. I hear so much talking about “discriminatory” algorithms, when you just need the data to be there, but the groups calling the algorithms “discriminatory” just don’t give it.

            1. 25

              I think perhaps you misunderstand - I specifically object to people developing software that identifies faces as “trans” or “not trans”, not the inclusion of trans people in facial recognition datasets in general, and especially the lack of any way to remove my data from that dataset.

              Edit: Furthermore, this demonstrates a lack of understanding of the power of monopoly. For instance, I could not possibly care less if some jackass writes millimeter wave scanner software that consistently identifies me as a threat because my body doesn’t conform to their ideas of what a body should look like (because I’m either a man with odd chest protrusions or a woman with an oddly shaped crotch.) It starts to matter a hell of a lot when that software decides whether or not I get patted down whenever I fly.

              If your software is going to be used in a situation where people have no choice but to interact with it, and there are consequences for it failing to classify them right, it is your responsibility to make it work right, for everyone, or make it right to them. You don’t get to shift that off onto them.

              1. 9

                About the lack of ability to remove your face from a dataset: yes, that is not acceptable. But in your first comment you said:

                consider whether tracking data points like gender are actually necessary.

                But being able to tell the gender from a photo is surprisingly useful. And queer people don’t like being miscalled about their gender. So it is insanely useful to check if a person is queer to make sure not to miscall them, knowing how important their gender is to them.

                1. 13

                  So it is insanely useful to check if a person is queer to make sure not to miscall them, knowing how important their gender is to them.

                  Maybe just don’t assume gender at all based on someone’s face? This article is about how the act of doing so perpetuates administrative violence. You can’t detect it based on any visible features for some people. If you make any decision about what pronouns to use based on your software, you are going to cause some people distress. You are assigning probability distributions about how safe it might be to assume, but doing so at all is harmful.

                  In some ways I see this as a caste system being dissolved.

                  1. 1

                    In my specific case gender isn’t assumed from a photo, we already know what user says. Here the gender is used for more as a checkup, and filtering queer people would remove a lot of false negatives.

                    1. 9

                      I know English isn’t your first language but the words you’re using sound utterly horrifying. The application you are working on also sounds like it can be used for some very nefarious purposes. It’s probably just a misunderstanding on my part, but if I, as a white straight male, feel chilled by the work you’re describing, imagine what someone not in that position would feel.

                      “This machine can see if I’m queer”. It’s positively Orwellian.

                      1. 10

                        Yeah, my wording could’ve been better. The point is, we need to check the persons gender as part of a security process, and we have the users photo(uploaded with full consent for processing), which can serve as an adittional factor. Knowing that it is difficult to identify queer people’s gender, it is beneficial to filter them out of that check.

                        1. 6

                          Oh this makes total sense! I’m sorry I misunderstood, and thank you for clarifying.

                          I do still think that the idea of this software existing is pretty scary, but I’m glad you’re at least using it for good :)

                          1. 2

                            Thanks for clarifying!

                    2. 10

                      being able to tell the gender from a photo is surprisingly useful

                      I am very interested to hear about your use case, actually. Other than advertising, I really can’t think of any.

                      queer people don’t like being miscalled about their gender

                      Nobody does, really. Call a big dude “miss” in a bar a few times and see how that goes for you.

                      1. 6

                        I am very interested to hear about your use case, actually. Other than advertising, I really can’t think of any.

                        I’m affraid I cannot tell, confidential work stuff. But it definetly isn’t advertising. It would allow us to avoid a lot of manual work asociated with gender misidentification.

                        Nobody does, really. Call a big dude “miss” in a bar a few times and see how that goes for you.

                        Yes, getting miscalled several times is anoying. But while most binary gender people which are suceptable to miscalling, will correct you after the first time and don’t really care about it, trans people often get angry right after the first miscall. I understand that they probably have to deal with this problem more often and that is why they are so annoyed.

                        1. 10

                          Super fair. I guess I just don’t see why it’s necessary to identify people’s gender at all, most of the time, and if you do need to identify what to call them, why not just have a dropdown/box on a form/question in your interview:

                          “How would you like to be addressed? {Ms., Mr., Mx.}?”

                          I just… I hope you recognize that there are so many absolutely terrifying uses of “gender nonconfirming recognition” technology that I feel pretty uncomfortable about it unless there’s a really good reason for it. Imagine a Uganda empowered by automated facial recognition that tags gender nonconforming people (trans people, effeminate gay men, butch women, etc) in photos and submits their names for arrest in accordance with their new death penalty for being gay.

                          1. 7

                            But while most binary gender people which are suceptable to miscalling, will correct you after the first time and don’t really care about it, trans people often get angry right after the first miscall.

                            I don’t think that’s universal. In my (admittedly somewhat limited) experience, transgender people are generally understanding regarding how cis people slip up or don’t know what words to use or use the wrong gender, as long as we try our best and don’t intentionally misgender people.

                            Maybe the transgender people I’ve been around are different from the kind you’ve been around though.

                            1. 9

                              I’m affraid I cannot tell, confidential work stuff. But it definetly isn’t advertising. It would allow us to avoid a lot of manual work asociated with gender misidentification.

                              That really doesn’t inspire a legitimate use case, if it’s confidential.

                              1. 4

                                It is confidential for “trade secret” reasons, not for some secrecy against the public. Images there are uploaded with fully explicit consent for them to be processed and used in training.

                            2. 1

                              queer people don’t like being miscalled about their gender

                              Nobody does, really. Call a big dude “miss” in a bar a few times and see how that goes for you.

                              The previous commenter recognises that it’s important to use inclusive and correct gender/form of address for everyone. So why are you still giving them shit for it?

                              1. 14

                                The idea that queer people are somehow uniquely sensitive about being misgendered is not supported by my experience - and, in fact, is pretty harmful. I tend to go out of my way to be extremely respectful to people, even people who are clearly misgendering me on purpose, so I don’t get labeled as an “angry trans person”/“it’s MA’AM” type of stereotype.

                                In addition, they were using it to support the idea that identifying people as transgender was necessary to not misgender them, which is… odd to say the least. Just include trans women in your female data set. (Or stop using machines to sort people into socially constructed gender categories, but it’s clear that’s not an option, for some undisclosed reason.)

                                1. 2

                                  So why are you still giving them shit for it?

                                  You’re reframing it. The original commenter is actually giving them and everyone else doing that kind of work shit for doing it. Then, the accused responded with justifications for the work. ignaloidas eventually argues that making sure our AI’s properly classify and speak toward trans people is consistent with the rule that humans do. There’s also people doing things such as inclusive hiring that brings in trans people that start with identifying that they’re trans in the first place.

                                  NoraCodes effectively is arguing that humans should recognize trans identity but AI visions systems shouldn’t for ethical reason. It’s her line of argument. ignaloidas is just reacting to it.

                                  1. 11

                                    NoraCodes effectively is arguing that humans should recognize trans identity but AI visions systems shouldn’t for ethical reason.

                                    In much the same way that we shouldn’t build computer vision systems to sort people into other socially constructed categories, yeah. If someone constructs a CV system that sorts people into “white” or “not white” (or “black” or “not black”), that’s going to be hard to make work, because as humans, our understanding of who is white and not white is muddled. No matter how closely you make it mirror one person’s understanding, it’ll never mirror everyone’s, and you need such a large data set you probably can’t even do that.

                                    I guarantee that you’ve met trans people you had no idea were trans. Almost everyone has. Do those people get encoded as cisgender while others don’t? Probably. In that case, what’s the point? If not - if you interview every person in your dataset, for instance - you’re making something that can identify certain characteristics common in trans people better than any one person. If it’s a black-box system like a neural net, you’ll likely never know what it’s telling you it thinks is “trans”, so it’s both scary and not very useful for legit purposes.

                                    The use case ignaloidas is talking about is actually pretty interesting - identity verification, but if the person looks trans don’t harass them about their gender - but it makes me think that maybe we just shouldn’t use gender to identify people.

                          2. 3

                            It sounds like you really should read the article. Your suggestion is explicitly argued against. (Not saying that that’s “right”, but you might present your argument a bit differently given the context?)

                            1. 1

                              The article assumes that even with more data the algorythms will be used in a discriminatory way and I find this such assumption highly misleading and appealing to victimising of queer people.

                        1. 7

                          I like some of the ideas, probably a move in the right direction. Some thoughts:

                          • nix channels did suck, I never used them at all.
                          • The move to a more distributed system does seem smart considering how overwhelming nixpkgs can be.
                          • To do some bike shedding, the flake name irritates me, probably because it reminds me of dandruff and things not working well.
                          • It also does seem pretty complicated to me at first glance.
                          1. 1

                            Nix channels aren’t TOO bad, they’re clunky though.

                            I use them on macos all the time to test out new checkouts of nixpkgs.

                            And yes, flake is a horrible name for this feature.

                            1. 2

                              I tend to just checkout nixpkgs from git, but I can see why some people wouldn’t want to do that.

                              1. 1

                                I do too, but have had times where certain things didn’t work so I have multiple “channels” of git worktrees that are at different points in time to cobble together a working nix setup on macos.

                          1. 3

                            I am not sure how I feel about this, just because I tend to have a server config, a local config, and a pairing config. I had some homegrown scripts to manage it but then after many years of iterating, I landed on gnu stow where I can easily swap things around. It isn’t completely perfect but so far, the best I have found.

                            1. 1

                              It isn’t completely perfect but so far, the best I have found.

                              I use home-manager to manage software and configuration jointly in declarative manner. On a new machine, I check out my home-manager configuration, run home-manager switch and I have my configuration + all the software.

                              1. 1

                                I still need to try this out after I looked at John Wiegleys setup. Right now I do something similar in that I use org-mode and babel to export/compile my dotfiles and then rsync them to wherever they need to go.

                                Bonus is this means I can “compile” my dotfiles with whatever setup I want and sync them to wherever without needing the source inputs. I’m just worried about portability for nix stuff on os’s like openbsd etc…

                            1. 6

                              Fun fact: NEXTSTEP came with zsh, but not as the default shell. I guess this change has been overdue for decades.

                              1. 6

                                If bash was still on GPLv2, they would not have done this change.

                                1. 0

                                  I wish they’d take off their tin foil gpl hats.

                                  1. 7

                                    From 1990 to 1995, the FSF boycotted Apple over their intellectual property activities. At the time, the hot issue was the copyright lawsuits which ultimately led to the look-and-feel doctrine which is still in place today. When the GPLv3 was published in 2005, it included substantial new provisions related to patents, since use of patents was at the time one of the largest ways the free software community felt mistreated by large corporations, and indeed Apple was among the companies that had been criticized in that regard. I’m sure Apple’s lawyers feel that to some extent these provisions are targeted at them, and I think there’s some truth to that.

                                    As an individual, I support the FSF’s position here, but I understand why Apple as a corporation is wary of it, and I don’t think they’re being irrational. Both Apple and the FSF are focused on the long-term, so their actions do seem a little silly when we look at the day-to-day, but they’re each acting in accordance with their purpose and incentives.

                                  2. -1

                                    zsh was the default shell for 10.2 or 10.3 iirc, so in a way this is just switching back to zsh as the default shell.

                                    1. 5

                                      tcsh was the original default shell prior to bash, not zsh. Wilfredo Sanchez, former tcsh dev, was Lead of the Unix Technologies team at Apple during that era

                                      1. 1

                                        Could be, been a long time since I ran 10.2 so maybe my brain is just having an old person fart.

                                  3. 2

                                    NEXTSTEP was so ahead of its time in Sooo many ways.

                                  1. 21

                                    It’s super impressive how much good sofware /u/SirCmpwn has been pushing out lately.

                                    1. 10

                                      I would love him to sit down and explain how he is able to do all this, or his thought process or something. I cannot believe his level of productivity.

                                      1. 5

                                        This is the work of 16 authors over the course of 2 years […]

                                      2. 2

                                        I came here to say the same… guys hammering out projects like there’s no tomorrow.

                                        1. 20

                                          In the long run, there isn’t.

                                          1. 2

                                            Not sure how to interpret this; either you’re just humble and don’t realize how many people really like the work you and the people contributing to them are doing, or you know something about the end of days and when they’re coming.

                                            I’m off-contract at the moment, so I’m going to try aerc with the protonmail bridge and see how it goes and possibly see if I can contribute some code if I can tackle some of the low-hanging fruit as I’ve been waiting for a terminal mail client that’s non-intrusive for a long time and even had a couple half-hearted starts at building my own.

                                            1. 5

                                              If he’s taking a stoic bent, memento mori, or always remember that you may die tomorrow.

                                            2. 1

                                              “How do you write like you’re running out of time” - Line from the musical “Hamilton”

                                          2. 1

                                            Yes, it’s truly impressive. I go to work full time, play in a sports league, and college part time and I think I’d have to quit all three activities to match his output.

                                            Even then, I’m doubtful.

                                          1. 8

                                            Interesting, I’d also like to be less reliant on Google, but apparently my use case is near 100% different.

                                            • Google App Engine - nope
                                            • Google Analytics - nope
                                            • Google Fonts - nope
                                            • YouTube - nope
                                            • GMail as main account - nope (I have one, but only check it every few weeks)

                                            But here’s the kicker, I am an Android user and I don’t see myself switching to Apple in the near future - I usually pay ~300 EUR for a decent new mobile phone, and I refuse to pay 600-1000.

                                            So while I’d usually say I’m kind of not relying on Google, not using the services on mobile is too much to ask for me. But apart from the photos part (which get backuped to Google Photos) and location history (which I really, really love) my online life is decoupled from Google quite a bit.

                                            I’ve also tried using DuckDuckGo at times, but the search results always make me cry. Maybe I’m holding it wrong.

                                            TLDR: Depending on how exactly you use a service and how good the alternatives are, it’s either easy or hard to change. Bah :)

                                            1. 13

                                              I’ve also tried using DuckDuckGo at times, but the search results always make me cry. Maybe I’m holding it wrong.

                                              My experience is that Google search got a lot worse, so DDG doesn’t seem so bad anymore nowadays. Until very recently I used !g a lot with DDG, but no longer.

                                              1. 11

                                                Unasked-for pro tip: g! is the same thing as !g, which is super nice for us using DDG on mobile while also having the “insert space after punctuation marks” setting turned on (i.e. trying to write !g becomes “! g”, try to find that space, and then backspace…)

                                                1. 2

                                                  Also note, you can put the g! or !g anywhere in the search, doesn’t need to be at the front, its nice to just go g! to have a quick look at what google finds if you’re not finding anything of note.

                                                  And to the tree parent’s post, I find google search less and less useful every year for finding technical things personally. I rarely have to use the bang operator for google in ddg lately.

                                                2. 2

                                                  Agree.

                                                  It’s almost as if Google has been actively lowering the bar for competitors the last few years.

                                                3. 10

                                                  I’ve gone from all-in Google fanboi to using almost none of their services, including on Android. I’m running LineageOS without Play Services. Things are surprisingly good, except:

                                                  • OSM is OK but has nothing on Google Maps, and other location-based apps (eg Uber) seem to not work
                                                  • Push notifications don’t work for a lot of apps
                                                  • I still use GCal, and setting it up (with DavDroid) is possible but frustrating, especially when you have a lot of calendars (I have about 8)

                                                  Despite that I’m happy with the move. It’s a bit like the early Android days - not exactly polished but usable and a bit of a challenge.

                                                  1. 5

                                                    Have you installed MicroG? That ought to solve your problems with other location-based apps by letting them use another location provider (like Mozilla’s). I think it also includes a push notification shim of some kind.

                                                    Davdroid works really, really well with NextCloud calendars, and while setup is not super-easy, it doesn’t get any harder with lots of calendars than with one.

                                                    1. 3

                                                      I’ve been meaning to try MicroG, but haven’t yet. Thanks for the reminder.

                                                      I’m somewhat tied to GCal until I migrate my wife off it (and G Suite in general).

                                                  2. 7

                                                    and I refuse to pay 600-1000

                                                    Used to be in the same boat, but I see it differently now. You either buy a $300 phone from a Chinese company with pretty flagship-like specs, but it mines all your data or you pay $600 - $1000 and you buy a phone with flagship-like specs and it doesn’t mine your data. That’s what Apple’s biggest selling point is to me. You get privacy, but it doesn’t make everything unpolished or near unusable.

                                                    You’re paying the 600-1000 price tag, just not upfront.

                                                    1. 1

                                                      I love LG from S.Korea… (have both LG5 and LG v20) . I changed battery recently ($9 bucks for a new from e-bay) added an SD card. Getting updates. Love video/sound/photo capabilities (may be not as ‘flashy’ as Samsung, but core quality is very good).

                                                      Having a very thin phone, that slides into a pocket of my tight-fitting jeans –> is not something I value (not that age group, or body type :-) )

                                                      1. 1

                                                        I might be misunderstanding your hint about the Chinese company. I use a Nexus 5X now (sure, it might be manufactured in China.) but in this case I see Google as the only company, no other one. Also not sure about my two HTC ones before that. They were all under 300 EUR.

                                                        1. 1

                                                          It was just the worst-case scenario. A Nexus 5X is a bit better, but using Google services on an Android phone is still pretty bad from privacy perspective. Maybe you should still reconsider and ask yourself if the extra money isn’t worth the privacy. Like I said, you’re just paying with you data right now instead of with your money. That’s Google’s MO.

                                                          1. 4

                                                            The extra cost for the Apple route is not just monetary; you’re also paying by giving up the ability to run the software of your choice on it.

                                                            1. 1

                                                              I got an Android to develop software on.

                                                              Have not done so a single time.

                                                      2. 5

                                                        Duck Duck Go finds what I’m looking for most of the time, but I agree that Google is far better. If you care about privacy, consider installing the Tor browser. Google searches via Tor are more private, and this also lets you do Google searches outside of your personal Google filter bubble. Sometimes Google’s filter bubble prevents me from getting the results I need. The differences in search results can sometimes be astonishing and revelatory, so I recommend trying it.

                                                        1. 3

                                                          Just use StartPage if you want Google’s quality but (more) private queries.

                                                          1. 2

                                                            Yeah I absolutely agree, but Google has learned my interests (programming and games) good enough that it gives me good results. DDG is usually clicking 3 pages, then going to Google - every time I try it :(

                                                          2. 7

                                                            Google App Engine - nope

                                                            https://en.wikipedia.org/wiki/AppScale

                                                            Google Analytics - nope

                                                            Piwik

                                                            Google Fonts - nope

                                                            Just, uh, host the fonts?

                                                            YouTube - nope

                                                            For consuming video yep, for uploading you might try Vimeo

                                                            GMail as main account - nope (I have one, but only check it every few weeks)

                                                            I have just been slowly moving each and each service off gmail to my own domain.

                                                            1. 11

                                                              Not sure wink was asking for alternatives to the five services they don’t use…

                                                            2. 4

                                                              I’ve found DDG frustrating at times, too. I’m slowly learning how to better leverage it, though. i.e. I’ve automatically started changing my search queries in ways that help it figure out what I mean more easily: quoting certain words or including additional words that I wouldn’t normally include when doing a Google search.

                                                              1. 2

                                                                The quotes, added words, and using - to remove results improves any search engine. Including Google.

                                                                1. 6

                                                                  I realize that. My point was that although the results from Google were better w/o those additions, you can work around DDG’s inadequacies by doing the things I listed.

                                                                  1. 2

                                                                    With Google you can’t be sure anymore. Sometimes it works, sometimes not it seems.

                                                                2. 3

                                                                  I’ve also tried using DuckDuckGo at times, but the search results always make me cry. Maybe I’m holding it wrong.

                                                                  DDG results range from better than Google to absolute garbage, but on average I find them workable.

                                                                  However, I realized to started to depend on all kinds of Google search features that are not available in DDG. For example, when I type the name of an establishment in Google, I automatically get the hours and a real time graph with waiting time.

                                                                  I wouldn’t have thought that trivial things like that would be important for me, but apparently they are, and I switched back to Google search.

                                                                  1. 3

                                                                    I’ve found mainly that DDG is ok in general but really terrible at certain specific kinds of searches. If you’re searching for an error message, specific line of code, bug report for a program, that sort of thing… Google is far better. For most other things DDG does just fine, and the ! shortcuts are real handy.

                                                                    1. 2

                                                                      It’s interesting that you love Location History so much; what do you like about it?

                                                                      1. 3

                                                                        Well, for example looking up trip routes from a vacation. “When did I do home office 2 weeks ago? Monday or Tuesday?” “How long was this bike ride?”

                                                                        Nothing critical, just stuff I like to know and look up.

                                                                        1. 3

                                                                          Interesting, I also love the idea of having that data, but I hate the idea of other people also having my data, especially of a theoretically sensitive nature.

                                                                      2. 1

                                                                        You can get a used, but perfect condition, iPhone 8 for less than 400 GBP, so maybe ~300 EUR is possible. The resale value is much higher, so I think the long term cost is comparable.

                                                                        1. 3

                                                                          But you’re still locked into Apple’s walled garden that way.

                                                                          1. 2

                                                                            I wish people would not parrot out thought terminating cliches like this. Locked into what exactly?

                                                                            1. 6

                                                                              I’m not the GP but I wouldn’t buy an iPhone because the only way to install apps on the phone is from the App Store, which makes something like F-Droid impossible. AFAIK the only way to install ‘non-official’ apps is to buy a Mac, sign up for a developer account, and then compile and self-sign apps.

                                                                              1. 2

                                                                                So you can install whatever you want; it just costs $300 (mac) + $99/yr (in true Apple fashion).

                                                                                Alternatively you could write a script that refreshes your certificates every night and do it for free!! (+the cost of a used Mac)

                                                                                Alternatively alternatively you could buy one of those sketchy “signing services” that force you to install a VPN so that they don’t get caught and use that.

                                                                                (Observation: Closed source software on non apple platforms is often worse than their open source counterparts. Practically no open source software exists for apple platforms, but the software quality is generally higher with some notable exceptions. I don’t know where I’m going with this, so it’s just an observation.)

                                                                              2. 4

                                                                                Locked into what exactly?

                                                                                Locked into not being able to run your own OS, and not being able to run your own programs without paying more (I understand you can install your own apps for 30 or 90 days, but you still have to pay for a developer license, IIRC).

                                                                              3. 1

                                                                                I use Dropbox for file storage, Gmail and Office365 for mail, OmniFocus for TODO, OneNote and Keep for notes, WhatsApp, Slack and Teams for chats, CrashPlan for backup, Google, Amazon and Apple for books, feed.ly for news, 1Password for secure info. where am I locked in?

                                                                                1. 4

                                                                                  Yes, you are quite free to choose from any of the flowers Apple permits in the garden — but you are not free to choose something Apple does not permit.

                                                                            2. 1

                                                                              You don’t need to use Google services with Android. I’ve flashed LineageOS on my touch phone with FDroid software and I’m pretty happy with it. Edit: haven’t noticed this already got mentioned.

                                                                            1. 1

                                                                              Didn’t realize CERN had it’s own TLD…

                                                                              1. 2

                                                                                Well, the Web was invented there…

                                                                                1. 1

                                                                                  The .ch tld is the country code for Switzerland.

                                                                                1. 6

                                                                                  Am I the only one who happily uses both Macs and GNU/Linux computers?

                                                                                  1. 10

                                                                                    Nope, one MUST use one or the other, never both, or even a third at the same time. Can only ever be either/or!

                                                                                    /s obviously but most of these posts are starting to get tiring

                                                                                    1. 2

                                                                                      It is not like there are no benefits to using a single platform. For example I use Linux, NixOS specifically, just so I can configure everything–from kernel to user packages to development projects–in declarative fashion. Good luck doing that with OSX (which I use solely for building iOS projects).

                                                                                      1. 1

                                                                                        I use nix on OS X, its not that different to be honest, not sure I agree with this overall sentiment even as a nixos and macos (amongst others) user.

                                                                                        1. 1

                                                                                          nix + nix-darwin?

                                                                                      2. 2

                                                                                        I live out of a suitcase, so I don’t want to carry two machines around with me. I also don’t want to run two operating systems, because disk space is at a premium already on my MacBook Air. I have to garbage collect my Nix store and rebuild my Docker build slave (I need to compile for Linux arch) every week.

                                                                                        I don’t need any MacOS GUI programs, but I do want the It Just Works thing when it comes to running the webcam (I don’t want to carry an external one), audio, battery life, etc.

                                                                                        I could switch away from Apple hardware but so far I still think it’s best in class, although this is less true now that they’ve done away with scissor switches and MagSafe.

                                                                                        1. 3

                                                                                          With Nix and Docker on OS X it’s kind of like you’re running a few operating systems already. How many copies of the GNU userland are on your drive right now? 😜

                                                                                          1. 1

                                                                                            That’s true, it’s a sort of hybrid but only because I’m not yet confident I can have the best hardware for me (basically a penultimate generation MacBook Air, maybe with more disk space and memory), with NixOS but with all the other conveniences working.

                                                                                          2. 2

                                                                                            I think I’m one of the most diehard pro-Linux and anti-Mac developers (just shy of the line between pragmatism and zealotry) I know but if I had to live with one machine and one machine only I guess I wouldn’t think twice about choosing a Macbook Pro. (Right now I’ve been on Windows for games all my life, and using Linux casually since 1998 and for work, fulltime, for over 10 years).

                                                                                            1. 3

                                                                                              I use MacOS personally (2013 MBP) and Windows at work. Linux in a VPS.

                                                                                              I’m seriously considering going Windows for personal stuff when I need to update my computer.

                                                                                              Why? Because while I love the Apple hardware, the latest iterations don’t look compelling to me. KB issues, no magsafe, no SD-reader (I do a lot of photography), lack of USB-A ports, and higher price. And I really don’t use any Apple-made software (apart from Terminal.app). It’s Chrome, Lightroom, VLC… all of which are basically cross-platform. I don’t feel I’ll miss much from OSX, and it will be much easier to game in Windows too.

                                                                                              1. 2

                                                                                                I tried switching to windows from mac at home on account of games, but my use case is really centered around audio. Turns out windows is still 3rd place for handling external audio devices (alongside more general web browsing sound) so I’m probably going to take the NUC and sell it or Linuxify it and get a mac mini. I use *nix side of the mac (and linux) constantly at work. Windows doesn’t have that side and the reliability although better in win 10 isn’t quite where I need it to be when I just want to hit record.

                                                                                          3. 1

                                                                                            As an anecdote, I use three computers, a mac, a windows and a Linux. Recently, I was going to give a talk at a meetup and I had two demos to show regarding p2p in the browser. Unfortunately, I did a poor job in testing them prior to the event day. I didn’t test my old demo, just the new one (my thought was, I didn’t change the old stuff, it should just work), well, it didn’t. In the end, one demo worked only on the mac and the other only on windows. I gave the talk with two computers on the stand and switched from one to the other… sometimes using two computers is ok :-)

                                                                                            1. 0

                                                                                              no

                                                                                            1. 1

                                                                                              In security, one might use red for the sensitive one. Yet, that decreases inspection efficiency per this article. Maybe use red on the untrusted one to indicate it’s hostile. Or maybe just use regular labels on green boards. Might still use colors on the I/O connectors if it’s multiple boards in one package (eg case). Maybe traditional colors for Red/Black separation.

                                                                                              1. 4

                                                                                                What I’ve seen is red is for “should not be released” prototypes, green is production, the rest… no idea, fashion?

                                                                                                Though I would love pink solder mask with white silkscreen, very obvious and blatantly non standard.

                                                                                                1. 2

                                                                                                  there is definitely one small-run board maker out there that defaults to purple mask and it is sort of an entertaining tip-off when you see one for “yep, this is a small batch product”.

                                                                                                  1. 2

                                                                                                    Heh yep https://oshpark.com boards are pretty noticeable for the purple PCB’s.

                                                                                                  2. 2

                                                                                                    A lot of it is fashion, especially now that PC cases often have windows on them to allow people to check out your components.

                                                                                                    In my experience, entry level motherboards tend to be blue or green, with the colors getting more and more wild as you go up the price range into the more enthusiast models. Same with RAM.

                                                                                                    1. 1

                                                                                                      Cheap, pocket games follow a Deadpool release. Uses pink and white on circuit board with unicorn sticker on inside of case.

                                                                                                      1. 2

                                                                                                        I need to know where I can get small batch custom pink PCB’s, I don’t want to have to do my own solder masking so I can get all pink PCB’s, though one thing i’ve been toying with as an idea is finding a way to deposit copper on clear glass so i could have clear “PCB”s. I have a project that would be soooo cool if I could get things onto glass.

                                                                                                        I have found a 13 stage process that might get me there but it uses chemicals I’m not too keen on using anywhere in arms reach. :)

                                                                                                  1. 1

                                                                                                    “Most parts are still single-threaded, and we have no interest in making it concurrent.”

                                                                                                    “lld depends on LLVM libObjects and libDebugInfo to read object files and debug info. libObjects and libDebugInfo have more features than lld needs”

                                                                                                    Well, there’s some room for improvement in performance for anyone looking for project ideas. One can attempt to parallelize the parts that are hard to parallelize. Maybe also throw a super-optimizer at the fast paths in the code. That’s worth trying on everything just to see what happens. :)

                                                                                                    1. 2

                                                                                                      It may not be worth the additional complexity though.

                                                                                                      1. 2

                                                                                                        True! Especially given most companies with codebases that large can afford to add some servers.

                                                                                                        1. 2

                                                                                                          It looks like the difference in their example was 5 seconds versus 3 seconds as a theoretical minimum. They probably thought at this point the gains in speed over the complexity just isn’t worth the effort in developer time.

                                                                                                          1. 1

                                                                                                            That would make a lot of sense. It’s just demoscene fun to optimize at that point. One exception might be resource-constrained, parallel systems but I cant think of a practical example.

                                                                                                    1. 5

                                                                                                      I rarely get hyped by a talk, but this one definitely spoke to me. This is awesome work!

                                                                                                      1. 3

                                                                                                        I spent the day beforehand trying to get Edwin to change his talk to be about the rules of Cricket. Probably best that he ignored me.

                                                                                                        1. 1

                                                                                                          As an american that has looked glancingly at cricket rules, I am happy this was ignored. >.<

                                                                                                      1. 20

                                                                                                        My sense now is that Alan Kay’s insight, that we can use the lessons of biology (objects are like cells that pass messages to each other), was on target but it was just applied incompletely. To fully embrace his model you need asynchrony. You can get that by seeing the processes of Erlang as objects or by doing what we now call micro-services. That’s where OO ideas best apply. The insides can be functional.

                                                                                                        1. 17

                                                                                                          “If you want to deeply understand OOP, you need to spend significant time with SmallTalk” is something I’ve heard over and over throughout my career.

                                                                                                          1. 5

                                                                                                            It’s also a relatively simple language with educational variants like Squeak to help learners.

                                                                                                            1. 7

                                                                                                              I have literally taken to carrying around a Squeak environment on USB to show to people. even experienced engineers tend to get lost in it for a few hours and come out the other side looking at software in a different way, given a quick schpiel about message passing.

                                                                                                            2. 4

                                                                                                              If you don’t have any Smalltalk handy, Erlang will do in a pinch.

                                                                                                              1. 2

                                                                                                                And if you don’t have Erlang handy, you can try Amber in your browser!

                                                                                                              2. 1

                                                                                                                I went through the Amber intro that /u/apg shared. I’d love to dive deeper. If anyone has any resources for exploring SmallTalk/Squeak/Etc further, I’d love to see them. Especially resources that explore what sets the OO system apart.

                                                                                                                1. 2

                                                                                                                  I’m told that this is “required” reading. It’s pretty short, and good.

                                                                                                              3. 16

                                                                                                                I even wrote a book on that statement. My impression is that “the insides can be functional” could even be “the insides should be functional”; many objects should end up converting incoming messages into outgoing messages. Very few objects need to be edge nodes that turn incoming messages into storage.

                                                                                                                But most OOP code that I’ve seen has been designed as procedural code where the modules are called “class”. Storage and behaviour are intertwingled, complexity is not reduced, and people say “don’t do OOP because it intertwingles behaviour and storage”. It doesn’t.

                                                                                                                1. 2

                                                                                                                  This.

                                                                                                                  Whether the implementation is “functional” or not, the internals of any opaque object boundary should at least be modellable as collection of [newState, worldActions] = f(old state, message) behaviours.

                                                                                                                  We also need a unified and clearer method for namespacing and module separation, so that people aren’t forced to make classes (or closures-via-invocation) simply to split the universe into public and private realms.

                                                                                                                  To say that the concept of objects should be abandoned simply because existing successful languages have forced users to mis-apply classes for namespacing is as silly as the idea that we should throw out lexical closures because people have been misusing them to implement objects (I’m looking at you, React team).

                                                                                                                2. 5

                                                                                                                  If there’s one lesson I’ve learned from software verification, it’s that concurrency is bad and we should avoid it as much as possible.

                                                                                                                  1. 8

                                                                                                                    I’m not entirely sure this is correct. I’ve been using Haskell/Idris/Rust/TLA+ for a while now and I’m now of the opinion that concurrency is just being tackled at the wrong conceptual level. In that most OOP/imperative strategies mix state+action when they shouldn’t.

                                                                                                                    Also can you qualify what you mean by concurrency? I’m not sure if you’re conflating concurrency with parallelism here.

                                                                                                                    I’m using the definitions offered by Simon Marlow of Haskell fame, from Parallel and Concurrent Programming in Haskell:

                                                                                                                    In many fields, the words parallel and concurrent are synonyms; not so in programming, where they are used to describe fundamentally different concepts.

                                                                                                                    A parallel program is one that uses a multiplicity of computational hardware (e.g., several processor cores) to perform a computation more quickly. The aim is to arrive at the answer earlier, by delegating different parts of the computation to different processors that execute at the same time.

                                                                                                                    By contrast, concurrency is a program-structuring technique in which there are multiple threads of control. Conceptually, the threads of control execute “at the same time”; that is, the user sees their effects interleaved. Whether they actually execute at the same time or not is an implementation detail; a concurrent program can execute on a single processor through interleaved execution or on multiple physical processors.

                                                                                                                    While parallel programming is concerned only with efficiency, concurrent programming is concerned with structuring a program that needs to interact with multiple independent external agents (for example, the user, a database server, and some external clients). Concurrency allows such programs to be modular; the thread that interacts with the user is distinct from the thread that talks to the database. In the absence of concurrency, such programs have to be written with event loops and callbacks, which are typically more cumbersome and lack the modularity that threads offer.

                                                                                                                    1. 5

                                                                                                                      Also can you qualify what you mean by concurrency?

                                                                                                                      Concurrency is the property that your system cannot be described by a single global clock, as there exist multiple independent agents such that the behavior the system depends on their order of execution. Concurrency is bad because it means you have multiple possible behaviors for any starting state, which complicates analysis.

                                                                                                                      Using haskell/rust/Eiffel here helps but doesn’t eliminate the core problem, as your system may be larger than an individual program.

                                                                                                                      1. 10

                                                                                                                        All programs run in systems bigger than the program

                                                                                                                        1. 1

                                                                                                                          But that’s not an issue if the interaction between the program and the system is effectively consecutive (not concurrent), I think is the point that was being made. A multi-threaded program, even if you can guarantee is free of data races etc, may still have multiple possible behaviors, with no guarantee that all are correct within the context of the system in which operates. Analysis is more complex because of the concurrency. A non-internally-concurrent program can on the other be tested against a certain input sequence and have a deterministic output, so that we can know it is always correct for that input sequence. Reducing the overall level of concurrency in the system eases analysis.

                                                                                                                          1. 2

                                                                                                                            You can, and probably should, think of OS scheduling decisions as a form of input. I agree that concurrency can make the state space larger, but I don’t believe it is correct to treat concurrency/parallelism as mysterious or qualitative.

                                                                                                                        2. 3

                                                                                                                          Using haskell/rust/Eiffel here helps but doesn’t eliminate the core problem, as your system may be larger than an individual program.

                                                                                                                          They help in reducing the scope into the i/o layer interacting with each other. I think an example would be helpful here as there isn’t anything to argue for your stated position so far.

                                                                                                                          But lets ignore language for the moment and give an example from my work. We have a network filesystem that has to behave generally like a POSIX filesystem across systems. This is all c and in kernel, so mutexes and semaphores are the overall abstractions in use for good or ill.

                                                                                                                          I’ve been using TLA+ both as a learning aide in validating my understanding of the existing code, and to try to find logic bugs in general for things like flock() needing to behave across systems.

                                                                                                                          Generally what I find is that these primitives are insufficient for handling the interactions in i/o across system boundaries. Aka lets take a call to flock() or even fsync(), you need to ensure all client systems behave in a certain way when one (or more) systems make a call. What I find is that the behavior as programmed works in general cases, but when you setup TLA+ to mimic the mutex/semaphores in use and their calling behavior, they are riddled with logic holes.

                                                                                                                          This is where I’m trying to argue that the abstraction layers in use are insufficient. If we were to presume we used rust in this case, primarily as its about the only one that could fit a kernel module use case, there are a number of in node concurrent races across kernel worker threads that can just “go away”. Thus freeing us to validate our internode concurrent behavior logic via TLA+ and then ensuring our written code conforms to that specification.

                                                                                                                          As such, I do not agree that concurrent programming should be avoided whenever possible. I only argue that OOP encourages by default bad practices that one would want to use when programming in a concurrent style (mixing state+code in an abstraction that is ill suited for it). It doesn’t mean OOP is inherently bad, just a poor fit for the domain.

                                                                                                                          1. 1

                                                                                                                            I feel that each public/private boundary should have its own singular clock, and use this to sequence interactions within its encapsulated parts, but there can never really be a single global clock to a useful system, and most of our problems come from taking the illusion of said clock further than we should have.

                                                                                                                        3. 4

                                                                                                                          I would go exactly tangential and say that the best software treats concurrency as the basis of all computation. in particular, agnostic concurrency. if objects are modeled to have the right scope of visibility and influence, they should be able to handle messages in a perfectly concurrent and idempotent manner, regardless of cardinality.

                                                                                                                          1. 2

                                                                                                                            Take Clojure for example, and I think concurrency is not that bad, and there is no reason to avoid it. Mutability and intertwining of abstractions is what leads to problematic situations. Functional programming solves that by its nature.

                                                                                                                            1. 4

                                                                                                                              Even if the program is immutable, you ultimately want the program to have some effect on the outside world, and functional programming doesn’t magically fix the race conditions there. Consider having a bunch of immutable, unentwined workers all making HTTP requests the same server. Even if there are no data races, you can still exceed the rate limit due to concurrency.

                                                                                                                        1. 7

                                                                                                                          Are FreeBSD jails remotely as usable as Docker for Linux? Last time I checked they seemed rather unusable.

                                                                                                                          1. 3

                                                                                                                            In technical terms they’re just fine, in my semi-professional experience. What they lack is the ergonomics of Docker.

                                                                                                                            1. 5

                                                                                                                              I’m not very impressed with the ergonomics of docker, and it’s definitely not obvious to me that BSD jails are an inferior solution to it.

                                                                                                                              1. 5

                                                                                                                                Ok, so I’m a big fan of BSDs, so I’d be very interested if there’d be a nice (not necessarily identical, but similar) way to do the roughly the following things with jails:

                                                                                                                                vi Dockerfile # implement your container based on another containers
                                                                                                                                docker build . # build it
                                                                                                                                docker push https://<internal_storage>/money-maker:0.9 # push it to internal repo
                                                                                                                                ssh test_machine
                                                                                                                                docker run https://<internal_storage_server>/money-maker:0.9 # run the container on the test machine
                                                                                                                                
                                                                                                                                1. 5

                                                                                                                                  The obvious equivalent I can think of is:

                                                                                                                                  • Create a jail
                                                                                                                                  • Set it up (whether manually or via a Dockerfile-equivalant shell script)
                                                                                                                                  • Store a tar of its filesystem to https://<internal_storage>/money-maker:0.9
                                                                                                                                  • Create a jail on the destination machine
                                                                                                                                  • Untar the stored filesystem
                                                                                                                                  • Start the jail

                                                                                                                                  These steps aren’t integrated nicely the way they are with docker, but they are made of small, otherwise-useful parts which compose easily.

                                                                                                                                  1. 4

                                                                                                                                    Sure. How much work do you think needs to be done to get the benefits of Docker’s layer-based approach to containers? If your containers are based on each other, you get significant space savings that way.

                                                                                                                                    1. 0

                                                                                                                                      ZFS deduplicates stored blocks, so you would still get the space savings. You would still have to get it over the network, though.

                                                                                                                                      1. 6

                                                                                                                                        ZFS does not dedup by default, and deduping requires a lot of ram to the point that I’d not turn it on for performance reasons. I tried a 20TiB pool with/without, the speed was about 300k/s versus something closer to the underlying ssd’s performance. It was that bad, even after trying to tune the piss out of it.

                                                                                                                                        Hardlinks would be faster at that point.

                                                                                                                                        1. 3

                                                                                                                                          No no no, ZFS dedup wastes some ridiculous amount of RAM. Do you use it IRL or are you just quoting a feature list?

                                                                                                                                          1. 1

                                                                                                                                            I use it, bit not on anything big, just my home BAS.

                                                                                                                                    2. 2

                                                                                                                                      One option is to use a jail-management system built on top of the raw OS functionality. They tend to take an opinionated approach to how management/launching/etc. should work, and enforce a more fleshed-out container model. As a result they’re more ergonomic if what you want to do fits with their opinions. CBSD is probably the most full-featured one, and is actively maintained, but there are a bunch of others too. Some of them (like CBSD) do additional things like providing a unified interface for launching a container as either a jail or a bhyve VM.

                                                                                                                              1. 7

                                                                                                                                I guess it depends on what you consider to be a wiki. I’ve got an org-mode knowledge base in ~/Notes that I treat like a wiki in the sense that I create in-line hyperlinks whenever the name of an “article” occurs in a sentence. It’s nice and structured to satisfy my obsession with everything being orderly, but in most situations I just use ag.el to find what I’m looking for.

                                                                                                                                1. 1

                                                                                                                                  How do you add new stuff? Using captures, and if yes what’s your system? If not, what do you do?

                                                                                                                                  I’ve been maintaining a “notes.org” file that consists of 90% stuff I looked up on the Internet when I needed it, in case I don’t have a connecting, and it’s basically just a list of headers. What I’m wondering is how to get started with a org-mode wiki.

                                                                                                                                  1. 4

                                                                                                                                    I’ll bite. My org usage has evolved, and what I describe will at best be the penultimate way of how i use it (i’m using penultimate ironically here, i’ve evolved my note usage so many times I can’t count).

                                                                                                                                    What I do is use org like so (note, I use use-package heavily, adapt to fit, most of this crazy is me making things prettier):

                                                                                                                                      (use-package org
                                                                                                                                        :ensure org-plus-contrib
                                                                                                                                        :bind (("C-c a" . org-agenda)
                                                                                                                                               ("C-c b" . org-iswitchb)
                                                                                                                                               ("C-c c" . org-capture)
                                                                                                                                               ("C-c l" . org-store-link)
                                                                                                                                               ("C-c p" . org-latex-export-to-pdf))
                                                                                                                                       :config
                                                                                                                                       (progn
                                                                                                                                         (custom-set-variables
                                                                                                                                          '(org-log-done t)
                                                                                                                                          '(org-hide-leading-stars t)
                                                                                                                                          '(org-hide-emphasis-markers t)
                                                                                                                                          '(org-confirm-babel-evaluate nil)
                                                                                                                                          '(org-capture-templates
                                                                                                                                            '(("t" "Todo" entry (file+headline "~/src/bitbucket.org/mitchty/org/gtd.org" "Tasks")
                                                                                                                                               "* TODO %?\n  %i\n  %a")
                                                                                                                                              ("n" "Note" entry (file+datetree "~/src/bitbucket.org/mitchty/org/notes.org")
                                                                                                                                               "* %?\nRandom Note entered on %U\n  %i\n  %a")
                                                                                                                                              ("m" "Todo from email" entry (file+headline "~/src/bitbucket.org/mitchty/org/gtd.org" "INBOX")
                                                                                                                                               "* TODO %?, Link: %a")
                                                                                                                                              ("u" "Url" entry (file+headline "~/src/bitbucket.org/mitchty/org/urls.org" "Urls")
                                                                                                                                               "* %u\n\n %i" :prepend t)
                                                                                                                                               ))
                                                                                                                                          )
                                                                                                                                    
                                                                                                                                         ;; typing stuff like the mode for a snippet is for chumps
                                                                                                                                         (add-to-list 'org-structure-template-alist '("el" "#+BEGIN_SRC emacs-lisp\n?\n#+END_SRC" ""))
                                                                                                                                         (add-to-list 'org-structure-template-alist '("hs" "#+BEGIN_SRC haskell\n?\n#+END_SRC" ""))
                                                                                                                                         (add-to-list 'org-structure-template-alist '("pl" "#+BEGIN_SRC perl\n?\n#+END_SRC" ""))
                                                                                                                                         (add-to-list 'org-structure-template-alist '("py" "#+BEGIN_SRC python\n?\n#+END_SRC" ""))
                                                                                                                                         (add-to-list 'org-structure-template-alist '("sh" "#+BEGIN_SRC sh\n?\n#+END_SRC" ""))
                                                                                                                                    
                                                                                                                                         (org-babel-do-load-languages 'org-babel-load-languages
                                                                                                                                                                      (append org-babel-load-languages
                                                                                                                                                                              '(
                                                                                                                                                                                (C . t)
                                                                                                                                                                                (plantuml . t)
                                                                                                                                                                                (ditaa . t)
                                                                                                                                                                                (emacs-lisp . t)
                                                                                                                                                                                (haskell . t)
                                                                                                                                                                                (latex . t)
                                                                                                                                                                                (perl . t)
                                                                                                                                                                                (python . t)
                                                                                                                                                                                (ruby  . t)
                                                                                                                                                                                (shell . t)
                                                                                                                                                                                )))
                                                                                                                                         (add-hook 'after-init-hook (lambda () (org-reload)))
                                                                                                                                         )
                                                                                                                                       )
                                                                                                                                      (use-package org-bullets
                                                                                                                                        :after org
                                                                                                                                        :init
                                                                                                                                        (custom-set-variables '(org-bullets-bullet-list '("・" "◦" "•" "◉")))
                                                                                                                                        :config
                                                                                                                                        (progn
                                                                                                                                          (add-hook 'org-mode-hook (lambda () (org-bullets-mode 1)))
                                                                                                                                          (when window-system
                                                                                                                                          (let* ((variable-tuple (cond ((x-list-fonts "Source Sans Pro") '(:font "Source Sans Pro"))
                                                                                                                                                                       ((x-list-fonts "Lucida Grande")   '(:font "Lucida Grande"))
                                                                                                                                                                       ((x-list-fonts "Verdana")         '(:font "Verdana"))
                                                                                                                                                                       ((x-family-fonts "Sans Serif")    '(:family "Sans Serif"))
                                                                                                                                                                       (nil (warn "Cannot find a Sans Serif Font."))))
                                                                                                                                                 (base-font-color     (face-foreground 'default nil 'default))
                                                                                                                                                 (headline           `(:inherit default :weight bold :foreground ,base-font-color)))
                                                                                                                                            (custom-theme-set-faces 'user
                                                                                                                                                                    `(org-level-8 ((t (,@headline ,@variable-tuple))))
                                                                                                                                                                    `(org-level-7 ((t (,@headline ,@variable-tuple))))
                                                                                                                                                                    `(org-level-6 ((t (,@headline ,@variable-tuple))))
                                                                                                                                                                    `(org-level-5 ((t (,@headline ,@variable-tuple))))
                                                                                                                                                                    `(org-level-4 ((t (,@headline ,@variable-tuple :height 1.1))))
                                                                                                                                                                    `(org-level-3 ((t (,@headline ,@variable-tuple :height 1.25))))
                                                                                                                                                                    `(org-level-2 ((t (,@headline ,@variable-tuple :height 1.5))))
                                                                                                                                                                    `(org-level-1 ((t (,@headline ,@variable-tuple :height 1.75))))
                                                                                                                                                                    `(org-document-title ((t (,@headline ,@variable-tuple :height 1.5 :underline nil)))))))
                                                                                                                                          (font-lock-add-keywords 'org-mode
                                                                                                                                                                  '(("^ +\\([-*]\\) "
                                                                                                                                                                     (0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "•"))))))
                                                                                                                                          )
                                                                                                                                        )
                                                                                                                                      (use-package ox-reveal
                                                                                                                                        :after org)
                                                                                                                                      )
                                                                                                                                    

                                                                                                                                    I store that all in a private git repo I host on my own site. I keep work and home separated in general.

                                                                                                                                    Then I just link to files (the captures let me link to where I was in a file when I took the note, aka say i’m reading some source and have a “is this variable unsigned int or not, doesn’t matter, can check later” moment I can quick capture that and refile that away later.

                                                                                                                                    Basically, I just capture notes and move them around so the agenda deals with things later. Tag stuff as appropriate so it shows up in the agenda and move on with life. YMMV though, I’m only 4 years into my org journey, so still at the beginner stage.

                                                                                                                                    1. 1

                                                                                                                                      I add new material by going to wherever I feel it belongs and writing a few sentences. The notes system I have is a little bit more flushed out than a knowledge dump, since I use it as a medium for exercising the philosophy that “if you can’t explain it simply, you don’t understand it well enough.” I suppose I do indirectly use captures, as that’s my way of adding to my GTD inbox, but I spend time processing any facts I put in there - either condensing them into something coherent for my notes, or creating an org-drill card.

                                                                                                                                      My system might not be the best starting point if you’re looking to make a wiki using org-mode, since it’s largely tailored towards satisfying my obsessiveness. If you have issues with a single “notes.org” file, I’d recommend writing them down and thinking about how you might design an organizational system that doesn’t have those issues. Alternatively, you could look into packages that do the organization for you (e.g. org-brain). Best of luck in finding something that works for you.

                                                                                                                                  1. 1

                                                                                                                                    Neat, I updated my old headers that got the script name and directory to use this. I fixed it to give the full path.

                                                                                                                                    SRC="$0"
                                                                                                                                    BASE=${SRC##*/}
                                                                                                                                    DIR=$(cd ${SRC%"$BASE"}; pwd)
                                                                                                                                    

                                                                                                                                    This way $DIR can give the directory of the script depending on where it was started.

                                                                                                                                    1. 1

                                                                                                                                      On Linux I had to change the signal 17 to 19 and 19 to 18, according to trap -l

                                                                                                                                      1. 2

                                                                                                                                        Hi,

                                                                                                                                        thanks for input.

                                                                                                                                        I modified the desktop-pause.sh script to use kill -SIGCONT PID and kill -SIGSTOP PID commands instead.

                                                                                                                                        Change:

                                                                                                                                        https://github.com/vermaden/scripts/commit/f71ac87766b076d17b42a706757ded2170a51e8c

                                                                                                                                        Now it should work on FreeBSD and Linux without modifications.

                                                                                                                                        1. 1

                                                                                                                                          As a note, I do the same thing for macOS for firefox. I just use pkill -STOP basically, no wrapper script. I’m almost always in a terminal so it being in my history is fine enough for me.

                                                                                                                                        2. 1

                                                                                                                                          I made another modification with uname/case so all Linux systems should work properly now.

                                                                                                                                          There was problem with Ubuntu 16.04 which uses Dash as /bin/sh.

                                                                                                                                        1. 4

                                                                                                                                          -WliterallyAll would be very appreciated.

                                                                                                                                          1. 2

                                                                                                                                            The historical reason why -Wall doesn’t enable all warnings is that warnings have been gradually added to the compiler over time. Adding new warnings to existing options could cause builds to fail after upgrading gcc.

                                                                                                                                            Moreover, some pairs of warnings are incompatible (in the sense that any code accepted by one would be rejected by the other). An example of this is -Wstrict-prototypes and -Wtraditional.

                                                                                                                                            1. 5

                                                                                                                                              The historical reason why -Wall doesn’t enable all warnings is that warnings have been gradually added to the compiler over time. Adding new warnings to existing options could cause builds to fail after upgrading gcc.

                                                                                                                                              I’m aware of that, though I still find it wrong that -Wall doesn’t actually include the new warnings, a build breaking on upgrade with -Wall is in my opinion the more logical outcome. I would rather have flags like -Wall4.9 that would remain constant on upgrades so no one who’s just using that subset of the warnings breaks their build. -Wall can then remain true to its meaning. Seeing that the ship has sailed on that a long time ago, I still would like to have a -WliterallyAll (can be called something else) that would include -Wall -Wextra and others like -Wstrict-overflow.

                                                                                                                                              Moreover, some pairs of warnings are incompatible (in the sense that any code accepted by one would be rejected by the other). An example of this is -Wstrict-prototypes and -Wtraditional.

                                                                                                                                              These ones can’t be and don’t have to be included.

                                                                                                                                              1. 5

                                                                                                                                                I really like the idea of -Wall-from=$VERSION, and you could even support -Wall-from=latest for people who truly are okay with their builds breaking whenever they upgrade their compiler.

                                                                                                                                                1. 2

                                                                                                                                                  clang supports -Weverything which I’ve tried, and it happily spews out contradictory warnings (“Padding bytes added to this structure”, “No padding bytes have been added to this packed structure!”) along with (in my opinion) useless warnings (“converting char to int without cast”).

                                                                                                                                                  1. 1

                                                                                                                                                    Yep, -Weverything can be amusing, but it really does throw everything at the code.

                                                                                                                                                  2. 1

                                                                                                                                                    These ones can’t be and don’t have to be included.

                                                                                                                                                    So your -WliterallyAll would not enable literally all warnings either? I’m not sure how that solves the problem.

                                                                                                                                                    I would rather have flags like -Wall4.9 that would remain constant on upgrades so no one who’s just using that subset of the warnings breaks their build. -Wall can then remain true to its meaning.

                                                                                                                                                    Now this is a neat idea that I can get behind.

                                                                                                                                                  3. 1

                                                                                                                                                    Correction: I have been informed that new warnings actually have been added to -Wall on multiple occasions.

                                                                                                                                                    The better explanation for why -Wall leaves many warnings disabled is that many of them are just not useful most of the time. The manual states:

                                                                                                                                                    Note that some warning flags are not implied by -Wall. Some of them warn about constructions that users generally do not consider questionable, but which occasionally you might wish to check for; others warn about constructions that are necessary or hard to avoid in some cases, and there is no simple way to modify the code to suppress the warning.

                                                                                                                                                    In other words, it might be better to think of -Wall not as “all warnings”, but as “all generally useful warnings”.

                                                                                                                                                  4. 1

                                                                                                                                                    Except the -Weffc++ warnings, those are really annoying and are not really about actual problems in your code.

                                                                                                                                                  1. 4

                                                                                                                                                    It is very nice that people are trying to compare imperative and functional languages under measurements that mostly people are interested: lines of code and performance.

                                                                                                                                                    I just skimmed through the text and found some downsides, namely:

                                                                                                                                                    • use of infinite list comprehension to replace a loop mutating three variables. Given that a list is a linked list, I tend to believe they’re comparing algorithms with different orders ( O(1) vs. O(n) ), although GHC possibly optimises it;
                                                                                                                                                    • they do not provide the source code of the programs.

                                                                                                                                                    Still, I’m glad to see an effort to compare the implementations from a “standard programmer”.

                                                                                                                                                    1. 1

                                                                                                                                                      It isn’t a problem if the structure has O(n) random access if you don’t access it randomly, i.e. recursion over a linked list is the same as looping.

                                                                                                                                                      1. 1

                                                                                                                                                        Yeah I couldn’t tell how they implemented the haskell algorithms, so it was hard to deduce if the haskell was slower due to using improper constructs or not. It can be really easy to make things slow in haskell if you don’t understand the transformations behind things. Also hard to tell why its slow without a dump of the assembly.

                                                                                                                                                        I’m not a fan of papers that don’t provide source, doesn’t make any findings all that useful. Just looks like a filler paper if I can’t poke around.

                                                                                                                                                      1. 13

                                                                                                                                                        There’s two really nice things here:

                                                                                                                                                        1. The “number of versions” is a fantastic metric and Microsoft Research observed something similar spending a little more time on this point. If you’re changing a module many times, perhaps you (the programmer) don’t know what it is supposed to do?
                                                                                                                                                        2. The “size” is another good metric, but I think the authors don’t go far enough: Lines of code and number of statements are nowhere near as good as “source code bytes”. Arthur is supposed to have said only a short program has any chance of being correct, but really it’s scrolling that is getting you into trouble: When data is produced and consumed out of view of each other you literally cannot see the opportunity for the bug.

                                                                                                                                                        But maybe something not so nice: testing has a negative correlation with defects, but not very much. This is consistent with a lot of other empirical examinations on the subject that had a lot less data, but it still sounds bonkers. People who swear by test driven development know it’s helping them write better code, but the numbers don’t lie, so what is it?

                                                                                                                                                        My theory is that when you tell someone they need to write tests, they write crappy tests, but if they want to write tests even when they’re not required, then it’s because they want a second way to look at their problem and understand it better. And that’s what we’re striving for.

                                                                                                                                                        1. 4

                                                                                                                                                          when you tell someone they need to write tests, they write crappy tests, but if they want to write tests even when they’re not required, then it’s because they want a second way to look at their problem and understand it better.

                                                                                                                                                          This rings very true to me, for what it’s worth.

                                                                                                                                                          1. 2

                                                                                                                                                            Yes, I wrote something similar on Stack Exchange a while back:

                                                                                                                                                            Testing follows a common pattern in software engineering: testing is claimed to make software better/more “agile”/less buggy/etc., but it’s not really the testing which does this. Rather, good developers make software better/more “agile”/less buggy/etc. and testing is something that good developers tend to do.

                                                                                                                                                            In other words, performing some ritual like unit testing for its own sake will not make your code better. Yet understanding why many people do unit testing will make you a better developer, and being a better developer will make your code better, whether it has unit tests or not.

                                                                                                                                                          2. 3

                                                                                                                                                            If you’re changing a module many times, perhaps you (the programmer) don’t know what it is supposed to do?

                                                                                                                                                            That or the people asking for the change don’t know what they’re doing and keep changing the requirements. >.<

                                                                                                                                                            1. 1

                                                                                                                                                              That can generate new modules rather than changes to existing ones.

                                                                                                                                                          1. 7

                                                                                                                                                            This is something that has been concerning me for a while. Tech companies abusing weaknesses in human behaviour to build addictions and shape emotions. One of the best things you can do for yourself is disable all notifications that aren’t urgent for you to act on right now. Stops you getting drawn away from the task you were doing every few minutes

                                                                                                                                                            1. 4

                                                                                                                                                              Agreed, I have turned off as many notifications as I can so my phone never does anything with them. Anything important I push to my watch which just vibrates. To be sure, this is me mostly trying to give the stupid “smart” watch something to do that makes me not regret buying one.

                                                                                                                                                              That and having firewall rules to ban me from browsing the web for a while at a time. Or for the work laptop I use this: https://selfcontrolapp.com

                                                                                                                                                              To keep me from habitually clicking on sites like this one…. at least for a set duration.

                                                                                                                                                              1. 1

                                                                                                                                                                I’ve set facebook.com to localhost in my host files and on my home-run dnsmasq instance. Turns out the other thing I check often is this. I don’t often participate in discussions, almost never post a thing, and have gone to page two once in what I think it’s months. Granted, the site does send me on a lot of wild goose chases, but the content quality is much higher than on Facebook (duh). I still go to Facebook every once in a while to see if my wife posted things, preferably pictures of my kids or dogs or herself (which is stalky, and a whole ’nother can of worms). I could do more complex stuff but I found that this keeps my digital demons at bay, most of the time.