See a lot of nextcloud deployments. How does it compare favorably to the other players in the space like owncloud etc? Is there much risk of them pulling a “plex” and rugpulling away the good stuff or gating it behind premium? Their product page is so slick it concerns me rather than anything.
I’m eager to get rid of it since it’s the only PHP component I have deployed (and it’s dog-slow on my current host). But there’s no good replacement currently; specifically, there’s no practical non-PHP webmail.
There’s definite space for one. NextCloud has massive feature creep. I want CalDAV, CardDAV, and automatic photo upload from mobile devices. I get a massive platform full of half-finished apps that I don’t care about. The main problem I have with NextCloud is that I don’t actually want the web UI at all. I only ever use it via client apps, except very occasionally for debugging, so all to the ‘do more stuff in our web app’ things are useful to me. It’s absolutely the wrong tool for what I want, but there wasn’t anything better last time I looked.
The rugpull risk is one of the reasons why I’m looking to shut down my Nextcloud in the near future. The file sharing functions have been 90% superceded by Syncthing and SMB/NFS anyway, and many of the other first-party apps (contacts, calendar, news) are strikingly mediocre in usability terms.
Only now that I have cut things down over time, I have be come more aware how incredibly addicted we all are to social media and games. I pick up my phone far less then I used to, and it is surprising how many people cannot wait somewhere for five minutes without picking up their phone. In fact, there are even a lot of people using their phones while cycling which is incredibly dangerous, also to people who focus on traffic when they are in traffic.
At any rate, a more or less chronological list of changes I made:
Ban phones at the breakfast/lunch/dinner table. This is family time. Also, what kind of example do we give to our daughter if her parents are behind a screen even during social activities.
Move from Google Mail (Google Mail for Apps) to Fastmail. Stop using Google products outside search. I keep around an account for Google Scholar. Google is a totally moral corrupt company and I want as little to do with them as possible. Unfortunately, this is very hard, I have to use uMatrix + DecentralEyes to purge them from my life. And hope that sites do not use recaptcha.
Nuke my Facebook account. This was probably the best step. In the beginning Facebook was nice to keep up with friends and family. But Facebook developed obscene dark patterns to keep people addicted. The result was a stream of memes and bubble confirmations.
Remove all games from my phone. They are pointless distraction. It’s more interesting to read a book or newspaper. The Nintendo Switch has much more qualitative games.
Remove all social apps from my phone. No more Twitter et al., I don’t get enticed to do dopamine shots.
Remove all social apps from my phone. No more Twitter et al., I don’t get enticed to do dopamine shots.
The phone is a tough one. I’m still struggling, even though I don’t have social media, email, or even a web browser on it. I’m compulsively checking Pocket (though I know I haven’t added anything), WhatsApp (even though no new messages has arrived) and my mobile banking (of all things!) for something—anything—to provide that dopamine hit. I try to put the phone somewhere out of sight, and I’m a lot better now than I was, but it’s difficult on weeks when I’m on call.
I wonder if I’m not suspectible to smartphone addiction because I’m just too asocial for that. I just don’t get dopamine hits from checking social media nearly enough to do it compulsively. I have wifi/3G on my smartphone disabled 90% of the time unless I actually need something from the Internet, and I find notifications annoying. If something important happens, the people I care enough about have my number, and if something really interesting happens on the Internet while I’m away, someone will probably send me a link or it will be reposted all over the place.
But now that I think of it, in the unavoidable idle time, like in a bus, I’m usually thinking about programming problems, my writing, or my tunes. Maybe social media addiction is just a symptom telling you to find things to work on that really care about?
Also, I haven’t used Google search for a long time and I’m quite happy with DuckDuckGo.
In your defense, Pocket has a lot of good articles. I’ve been really impressed with the service.
re Facebook
One thing I warn you about is you might miss lots of important family stuff that can damage relationships. Most people in my family almost exclusively post lots of stuff to Facebook. They’ll text within the house-hold but mostly Facebook to the rest. Being off for a long time cost me a lot of experiences with them. I might turn my account back on just to see what people are doing.
Far as limiting it, @ac phrased it as putting as much friction as possible between it and you. You’ve clearly been doing that. One thing he said that you aren’t doing was firewalling it in a way that was hard to work around. You could even have the firewall only open connections to your account for limited time per day or night. That’s the simple option. You might also have it set to vary based on your schedule so certain moments or events, like work or with family, that you definitely can’t access it.
I always thought curbing addiction to social media this way was also a nice use for cheap HSM’s to block user from overriding password they don’t know or whatever.
My suggestion: Make an explicit habit to call your friends and family regularly (regardless of whether you see their posts on Facebook). Though, I must admit that I’m really bad at this.
Thanks for sharing! I’ve started to become more aware about my tech habits and the effects that it’s having on myself and others. I like reading about other peoples’ journeys to digital wellness/mindfulness. I think I’ll try to ditch my phone during the evenings now, too.
I’ve more or less followed what you’ve outlined there. However, I did just add one thing to my repertoire that I kind of want to throw out there.
When reaching for one of my devices I’ve started asking myself what I’m about to use it for and whether or not that activity aligns with my goals. The word “goal” has a connotation to it of it being something significant, like getting a promotion or launching a business. I let goals range on a much wider scale than that. Although, certainly those could be one of my goals, if I wanted them to be! Many of my goals are designed to maintain a balanced life-style and my own personal happiness. Even for things like rest and relaxation.
For example: I’m so used to jumping on Reddit that I do it reflexively; even to the point where I forget about engaging with some of my other hobbies! Now I stop and consider: would I enjoy my time better if I was on reddit, reading a book, playing Stardew Valley, or maybe chasing that productivity dopamine hit of striking something off my to do list? Maybe I could make progress on an interesting topic I’m studying? I could work on a blog post! I could work on that 2D game I want to make. These alternatives to reddit that I just mentioned are considered some of my goals because they make me happy.
Just by asking myself that question, I’ve been spending more time thinking about those goals I’ve set for myself and doing them, rather than mindlessly losing myself to a computer screen because of an addictive impulse.
You cannot be completely free of sins ;). More seriously, I am not trying to abstain from the internet. lobste.rs is one of those sites that is not very addictive and usually high signal - low noise. It has a more positive effect than negative. The same for e.g. LWN.net or the newspaper we are subscribed to.
Or do you mean posting in the evenings? This post was not made on my phone. My computer-rule is no computers after 20:30. Though it usually ends up at 20:45 or so.
My thoughts exactly. I have no problem with that, but OP seems to fight with daily use of Internet by promoting his Internet content by using an Internet service :)
I wouldn’t say I’m fighting “use of Internet”: I’m fighting low quality ways to spend my time. In contrast the community here is fairly high signal to noise ratio. I learn a lot more useful stuff here than in the average Twitter/Facebook post and their replies. Those services constantly re-arrange the newsfeed to avoid you being able to catch up too quickly and move on. They also inject adverts and (for FB) an enticing sidebar full of “news” that I’m too undiciplined to avoid. Not so with Lobste.rs, which I mostly read via RSS subscription to a couple tags.
As for promoting my own content: nothing wrong with that, is there? :-) I’m not a naturally gifted writer: it takes me hours and much editing to produce a blog post I’m happy with. (Though it’s getting easier!) Getting a discussion going around my writing motivates me to write more. (Even if the feedback is bad I usually learn something.) At some point I expect to influence colleagues more through writing English than code, so honing those skills seem like a good investment.
I’ve done similar. It is interesting to hear it’s not just me who’s unhappy with some of the ‘tech’ that’s part of modern life. Friends and family seem surprised by my attitude. I think they believe that if you work ‘in tech’ then you must fetishise it or believe it’s all good, simply because it exists.
Differences from above: I’m on a mail provider called Soverin, who seem to do a great job, and I’m using DuckDuckGo as much as possible. And I went Apple - phone, laptop, desktop.
I think this is most games, not just mobile games, and I think that the same could be said of books. Some games have had the same kind of impact on me as a book. Not many I’ll grant you, bu they’re there. I do understand what you’re saying though.
The Nintendo Switch has much more qualitative games.
I still think it depends on the game. The Switch has some good stuff, but there’s still some garbage on the eshop. Having a device with the express purpose of gaming and a higher bar for quality control is definitely beneficial though - I pretty much only play Nintendo DS and GBA games.
A lot of games on mobile devices are designed with the same dark patterns and bad intentions as social media sites. But some games (such as Florence) genuinely moved me.
I used to be a fan of Python but almost all the stuff here seems weirdly tacked on. Added with good intentions for sure but a lot of it seems short-sighted, implemented in the least-effort way.
f strings are like u strings in Python 2: a compatibility hack to make old code not go bust. Maybe these should’ve been just regular strings in Python 3, but over the entire lifespan format strings were not necessary but we need them mid-way in Python 3? Odd.
Pathlib uses the division operator in a weird way. I guess maybe this is similar to how + concatenates strings but seems to be overly cute for cuteness sake. Granted, this is a minor point.
Type hinting. I guess it is nice. Doesn’t seem fully formed, since that was introduced in 3.0 but had no guidelines on how to use it. I’m not necessarily a fan of adding features without a clear idea how to use it but okay, we seem to be getting to some point now.
Enumerations look like a weird hack, not a language feature. Without matching/dispatching on Enums these don’t feel all that useful. This is like ADTs but without the good parts.
Data classes or as we in ML call it, records. Useful feature, again as a decorator hack. But I can certainly see it being helpful. Again, no destructuring on them, which would make them much more useful.
Implicit Package Namespaces. Could you make Python packages more obscure with more special rules? Turns out you can.
Why do you feel that Py3’s f strings are like Py2’s u strings? The f stands for “format”, meaning you can avoid the .format() method. The u stands for “unicode”, and is something else entirely. I don’t see how the two compare, would you care to elaborate?
The division operator used in pathlib merely mimics the directory separator in unices. If we have p = pathlib.Path('/path'), then p / 'to' / 'file' is the same as /path/to/file. Pretty easy and convenient, if you ask me.
Why do you feel that Py3’s f strings are like Py2’s u strings?
Because both are what strings should’ve been by default. But one couldn’t change Python 2 in a compatible way so Python 3 strings are what were u strings in Python 2. Similarly with f strings, in languages that do format strings this way (Ruby, Shell, PHP come to mind) this is a default behaviour, with a way to opt-out. But that can’t be added in Python 3 because all existing code that might contain formatting characters would start doing unexpected things, so f strings had to be created. A hypothetical Python 4 would probably use f strings as default.
My complaint here is if there is a new formatting syntax introduced, why was it added now and not in a clean syntactic way when Python 3.0 was introduced?
The division operator used in pathlib merely mimics the directory separator in unices.
I understand that it is for that purpose, but it is a “cutesy” misuse of division. The reverse operation of division would be multiplication, but what would multiplication on a path even mean? But as said, this is a minor complaint since Python already has + on strings, with no symmetrical - operation.
Fun fact, Elixir has + on lists and also - on lists. What does it do? I’m leaving this as an exercise to the reader.
I kind-of agree. It seems like a lot of recent changes make Python more complicated for not much gain. The language is starting to feel bloated instead of elegant and focused, to me at least. Thankfully they’re almost all opt-in features, so I can continue using Python as I like it, and only pick the new “features” which I genuinely get some benefit from.
Data classes implementation is so much nastier than namedtuple, and given the fact that it’s yet-another-decorator-hack, I don’t understand why it has a pep and is in the standard lib.
Type hinting, asyncio (or twisted), fstrings (an abomination)…no wonder Guido bounced. The whole place is going crazy! What happened to the Zen of python? All of the aforementioned seem direct contradictions.
Implicit Package Namespaces. Could you make Python packages more obscure with more special rules? Turns out you can.
The article is wrong, you should not use this feature as it suggests. It does solve a real problem — packages like zope that are broken into multiple distributions on PyPI — see PEP 420. In this advanced use case it replaces a disgusting setuptools hack so I’d count it as progress.
This response isn’t a denial. I think folks should notice that. He goes out of his way to diminish the author without actually denying it. He’s mad about the post, not that he’s falsely accused, because the post is true.
This response is also filled with red flags:
Saying Tom didn’t want money and then saying all future donations will be split with Tom is a weird contradiction. The quote “work on the advancement of requests” seems like a way to differentiate between maintenance (which he wasn’t really doing while others were) and “advancement” (which is whatever he’s doing). Including the news that the library will changing its backend sounds like one of those sudden, made-up decisions people do try and make their accuser seem unqualified. How interesting the timing on that! Talking about the small set of “real collaborators” excludes someone who he explicitly says he was collaborating with is gaslight-y. And the “just don’t fucking work with me” has such a long history of being said by people who really did awful things and don’t want to admit that.
Including the news that the library will changing its backend sounds like one of those sudden, made-up decisions people do try and make their accuser seem unqualified.
You make some good points. In terms of timing, feel like this was mentioned ahead of PyCon on an episode of Talk Python, but I was only half-listening to that the first time.
All that being said, I’m not sure why this person feels the need to attack my character, including curating a list of quotes (what?) from “collaborators”.
I’d just like to point out that Kenneth has lists of quotes…about himself…on his website.
Kenneth has lists of quotes…about himself…on his website.
While I’m in no way defending Kenneth or his actions, mocking someone for stating their opinions (in quote or any form) on their own website is not in the spirit of engineering or science. If you feel the need to be petty, please find another place to dunk on people.
I was highlighting the irony of the journal entry expressing incredulity about nj’s inclusion of a list of quotes from collaborators, as KR knows all about including quotes from “collaborators” (or sycophants, everyone can make up their own mind).
As far as “scoring on people”, I’d suggest that you are the one who is attempting to do so, with your virtue signalling and calling me petty.
It always amazes me (and scares me) how different people percieve reality (if that is even an achievable thing) and how the same situation can be read completely differently by two different brains. It is super scary to me. In this case I believe neither of them had anything malicious going on, and still, both of them have a completely different grasp of the situation.
This is why I think the original article was bad form. I know neither of the people involved. I’ve never even heard of them. I wouldn’t know who to believe even if I knew them.
Tag this one as “call out culture.” If there’s something to be done, it should probably be done within that community and with discretion, precisely because there are two sides to every story and people are biased toward the first/best expositor regardless of whatever actually happened.
I think it would be great if the mods banned personal call out articles on this basis. And, again, I know neither of these people. I’m not in the Python community.
it should probably be done within that community and with discretion, precisely because there are two sides to every story and people are biased toward the first, best expositor.
I don’t disagree in general, but how do you do that in the context of an open source community? There is no real central authority, and people can essentially just do what they want.
I actually can contextualize Nathaniel’s post with my own interactions with reitz (which were a lot less involved) but they verify my impression.
So I an glad Nathaniel posted this. It helps me stay clear of unproductive conflicts for the future.
A few helpful and engaged members of the python community have signaled that it matches some of their observations.
If you keep such things private and secretive is hard to go through with community actions (like removing someone from boards, etc). If you make it public discourse people complain about character assassination or whatever. At the end of the day I believe in a victims right to discuss their case publicly of they want to.
I do think that’s true, but I think that one of the author’s central points, and part of the reason I posted this, is that it’s important to be aware that when money is involved there is a whole different level of accountability that comes into play.
This is why the legal system exists. This is why scrupulously detailed contracts arbitrated by lawyers exist.
Moreover, this is why foundations like the PSF exist - they handle the ‘dirty’ work of distributing money in a way that’s free of legal entanglement and less likely to engender this kind of mis-understanding.
This is a tough situation but I think the author handled it thoughtfully. Figuring out what to do when an author of a key OSS component is having mental health issues is rough enough, but then when sizable dollar counts get involved it gets even stickier.
Mental health issues are a justification, not an excuse. I have high-functioning autism, depression, anxiety, and some messed up PTSD trust issues. It might be understandable if I cause problems, but nonetheless I’ve still caused problems.
If I am collaborating with people on a project, I’ll say “these are the issues I have, these are the problems it might cause, these are the signs they’re affecting my judgement, these are the best mitigations.” It is something I’m supposed to actively manage, to make them known, handleable risks. Just saying “oh he has bipolar, he’ll do bad things” is disrespectful to the person, their collaborators, and the project..
I wouldn’t go that far. Co-morbidities exist and an untreated mental issue often doesn’t come alone. Which follows which and what is entangled is often hard for non-professionals.
Wow, what a response this has gotten! From my perspective, much of this discussion boils down to: If you’re going to try and fund an open source project, be extremely clear about where the money is going, and ideally have some kind of external audited entity handle the distribution, because otherwise, as this situation shows, things can get MESSY.
Yeah, or something like substance abuse. I did a ton of damage… didn’t even want to do it, but I still made amends and continue to do so. Requires honesty. With this situation, and like others, I’ve been watching this guy strut and pander and I wondered how it would shake out because the mask would slip and there’d be drama and stuff. I hope he can get honest about his motivations and the harms that resulted. People respond to humility. And people can tell when it’s authentic.
With this situation, and like others, I’ve been watching this guy strut and pander and I wondered how it would shake out because the mask would slip and there’d be drama and stuff. I hope he can get honest about his motivations and the harms that resulted. People respond to humility. And people can tell when it’s authentic.
What’s so interesting is that self promotion is both encouraged and rewarded in industry and to perhaps a lesser extent the open source world.
Where does letting people know about the goodies you’re gifting to the world end and strutting and pandering begin?
I ask not to attack you or your statements (Which seem very heartfelt and tbh courageous - I don’t know that I could admit such things in a semi-pro forum like this.) but to try to calibrate my understanding of what makes sense and clarify what we as a community have defined as our norms on the topic.
The point wasn’t to build a competitor to Redis, of course, but to show how to implement a simple socket server and protocol. Unlike the OP article, my post shows how simple it is to implement the Redis protocol.
There is some irony in calling GUIs bloated when your stack has no less than 3 different, incompatible ways of doing window management (plus a fourth if we were to count the DE/WM) and a “framework” for managing your… shell.
The folks behind EROS Windowing System in particular would be really ticked given it was secure, minimalist, windowing system in 3,500 lines of code. I have a feeling Vim might be larger than that. I don’t know the lines of code, though.
I’m pretty sure the author isn’t capable of critical thought, but instead cargo-culted various tools he heard about from other blogs of webdevs just like himself.
At work we have a gateway server with an /etc/motd saying, essentially, “don’t use this system as anything but an SSH jump host – don’t run anything intensive or store anything large here”. Most people have no problem following this, but I noticed one user with an unreasonably large home directory. As a matter of policy I generally don’t abuse my admin access to look at anyone else’s stuff, but in this case I felt warranted to investigate, and found in said home directory:
$ du -hs .vim/bundle/* | sort -h
...
600M .vim/bundle/YouCompleteMe
You want bloat? I got yer bloat right here…
(And I say this as a die-hard terminal junkie/GUI hater myself.)
Having interviewed a lot of people, SQL is one of those things that everyone thinks they know well and very few actually do. In interviews now, if I see them claiming expertise, I ask if they can do something more than “SELECT * FROM foo” because so often that’s all it takes to “know SQL” on your resume.
Good database knowledge can be extremely valuable. I can’t tell you how many times I’ve seen code that makes four or five round-trips to the DB, grabbing data, processing it client-side, and sending it back that could’ve been done in one round-trip with a well-crafted SQL query.
There’s the other side too: I’ve seen some truly awful database designs that have required multiple round trips because the DB designer didn’t understand foreign keys or constraints or whatever.
If you sit me down with a pen and paper and tell me to write a complex query…. I might well fail.
If you sit me down with say sqlitebrowser… and an editor side by side, I will rapidly iterate starting from very simple queries (yes, I will start with select * from foo) to as complex as need be.
And yes, I might occasionally refer to the syntax for the gnarlier corners.
But I will get it done pretty rapidly in a single very well crafted query.
Conversely, I’m a true believer in what CJ Date has been saying for decades…. so if you allow me to redesign the table definitions…. you’d be shocked by how simple my queries will be.
Imo one of the best arguments against relying on ORMs is performance: in some situations a CTE or window function can get you one or two orders of magnitude improvement over a naive orm solution.
Nothing prevent you from implementing those edge case in your ORM though. I personally use SqlAlchemy, and I feel like it cover what I need as-is 90% of the time, and the 10% of the time left it gives me the tool to build more complexe queries and even allow me to keep using the “object mapping”. SqlAlchemy supports CTE and Window function!
For even too complexe query, it might also be possible to wrap them into SQL Function and simply map your ORM to this function.
Oh, to clarify, I think ORMs are great, I just don’t think it’s great to rely on them. They do 90% of the things for you, but you need to know SQL for the other 10% of cases. Some things aren’t like that, where there’s not such a wildly significant benefit as knowing SQL gives you in this case.
This is very true. It’s also helpful to know (in rough terms) what the ORM is doing under the hood, something that’s only really possible if you understand the SQL behind the operations.
Yep, Peewee orm also supports things like CTE, window functions, insert/on conflict, etc. The query builders for both libraries are very flexible, but you pretty much have to know SQL and then translate it into the APIs the query builder exposes. For experienced programmers this is no problem, but someone less fluent with SQL is going to have no idea how to use this advanced functionality, regardless of how it is exposed.
I like ORM or query builders not because I don’t know SQL, but rather because I detest the SQL syntax. I wish there were a better relational language. Maybe Tutorial D in front on Postgres’ storage engine.
What would you consider beyond “SELECT * FROM foo"? I don’t touch SQL on a daily basis, but I could throw together a left, right, and full join if I needed to, and I’m aware of how to use subqueries. What SQL skills would someone have in order for you to consider them competent / good at SQL?
JOINs, GROUP BY, that sort of thing. If they’re going to be building DBs, understanding indexes, unique constraints, and foreign keys.
If you’re gonna be my lead database programmer/DB admin/DB architect, I’d want to see understanding of good database design (normal forms, good foreign key relationships, good key choices), CTEs, triggers (in your preferred database), being able to spot when a full table scan might happen, understanding when and how to use precomputed values for future queries, and so on.
The use of aggregate functions, defining new aggregate functions, the various joins, the 3VL truth table, grouping, subselects, CTEs, that kind of thing.
It’s well worth the time learning window functions.
As Maruc Winand (who created use-the-index-luke.com and the newer modern-sql.com) says in his talk on Modern SQL there’s life before windows functions and life after windows functions.
I’ve seen no mention yet of EXPLAIN queries (Or similar operation in other RDMS than Postgresql?).
Never been doing a lot of SQL in the past, but lately I had to work with some complexe queries over large dataset and most of my learning involved playing with EXPLAIN [ANALYZE], understanding the result and tweak the base query to fix the performance issue. Once you understand that, you can work from there to find the best index, where to place subqueries, set large enough working memory, etc.
I love dmenu – it’s such a versatile tool. I put together a small fork that includes as many patches as I could find (multi-select, underline selection, vertical layout, configurable w/h/x/y) plus I added support for colored window border. If you’re interested, you can grab the source code here: https://gist.github.com/coleifer/11534911c7ff9ee5d64743a439f8539b
See a lot of nextcloud deployments. How does it compare favorably to the other players in the space like owncloud etc? Is there much risk of them pulling a “plex” and rugpulling away the good stuff or gating it behind premium? Their product page is so slick it concerns me rather than anything.
it has already happened. owncloud pulled a dumb move and everyone moved to nextcloud. the latter is where the current community is.
I’m eager to get rid of it since it’s the only PHP component I have deployed (and it’s dog-slow on my current host). But there’s no good replacement currently; specifically, there’s no practical non-PHP webmail.
There’s definite space for one. NextCloud has massive feature creep. I want CalDAV, CardDAV, and automatic photo upload from mobile devices. I get a massive platform full of half-finished apps that I don’t care about. The main problem I have with NextCloud is that I don’t actually want the web UI at all. I only ever use it via client apps, except very occasionally for debugging, so all to the ‘do more stuff in our web app’ things are useful to me. It’s absolutely the wrong tool for what I want, but there wasn’t anything better last time I looked.
The rugpull risk is one of the reasons why I’m looking to shut down my Nextcloud in the near future. The file sharing functions have been 90% superceded by Syncthing and SMB/NFS anyway, and many of the other first-party apps (contacts, calendar, news) are strikingly mediocre in usability terms.
Much larger list I made with screenshots and links:
http://charlesleifer.com/blog/monospace-font-favorites/
Hope you find it interesting.
This is really good, thank you for sharing!
Thanks, it’s very informative and useful.
What font is used for the code examples at the top of the article?
I grew up on movies like airplane!, top secret! and crap like mad magazine. I blame society for making me write this.
Only now that I have cut things down over time, I have be come more aware how incredibly addicted we all are to social media and games. I pick up my phone far less then I used to, and it is surprising how many people cannot wait somewhere for five minutes without picking up their phone. In fact, there are even a lot of people using their phones while cycling which is incredibly dangerous, also to people who focus on traffic when they are in traffic.
At any rate, a more or less chronological list of changes I made:
The phone is a tough one. I’m still struggling, even though I don’t have social media, email, or even a web browser on it. I’m compulsively checking Pocket (though I know I haven’t added anything), WhatsApp (even though no new messages has arrived) and my mobile banking (of all things!) for something—anything—to provide that dopamine hit. I try to put the phone somewhere out of sight, and I’m a lot better now than I was, but it’s difficult on weeks when I’m on call.
I wonder if I’m not suspectible to smartphone addiction because I’m just too asocial for that. I just don’t get dopamine hits from checking social media nearly enough to do it compulsively. I have wifi/3G on my smartphone disabled 90% of the time unless I actually need something from the Internet, and I find notifications annoying. If something important happens, the people I care enough about have my number, and if something really interesting happens on the Internet while I’m away, someone will probably send me a link or it will be reposted all over the place.
But now that I think of it, in the unavoidable idle time, like in a bus, I’m usually thinking about programming problems, my writing, or my tunes. Maybe social media addiction is just a symptom telling you to find things to work on that really care about?
Also, I haven’t used Google search for a long time and I’m quite happy with DuckDuckGo.
You can disable notifications from everything and still have wifi/3G, at least you can on Android.
re “I’m compulsively checking Pocket”
In your defense, Pocket has a lot of good articles. I’ve been really impressed with the service.
re Facebook
One thing I warn you about is you might miss lots of important family stuff that can damage relationships. Most people in my family almost exclusively post lots of stuff to Facebook. They’ll text within the house-hold but mostly Facebook to the rest. Being off for a long time cost me a lot of experiences with them. I might turn my account back on just to see what people are doing.
Far as limiting it, @ac phrased it as putting as much friction as possible between it and you. You’ve clearly been doing that. One thing he said that you aren’t doing was firewalling it in a way that was hard to work around. You could even have the firewall only open connections to your account for limited time per day or night. That’s the simple option. You might also have it set to vary based on your schedule so certain moments or events, like work or with family, that you definitely can’t access it.
I always thought curbing addiction to social media this way was also a nice use for cheap HSM’s to block user from overriding password they don’t know or whatever.
My suggestion: Make an explicit habit to call your friends and family regularly (regardless of whether you see their posts on Facebook). Though, I must admit that I’m really bad at this.
A calendar reminder is useful toward this end.
It’s a good suggestion. I do it with at least closest relatives. The others… like you said.
Thanks for sharing! I’ve started to become more aware about my tech habits and the effects that it’s having on myself and others. I like reading about other peoples’ journeys to digital wellness/mindfulness. I think I’ll try to ditch my phone during the evenings now, too.
I’ve more or less followed what you’ve outlined there. However, I did just add one thing to my repertoire that I kind of want to throw out there.
When reaching for one of my devices I’ve started asking myself what I’m about to use it for and whether or not that activity aligns with my goals. The word “goal” has a connotation to it of it being something significant, like getting a promotion or launching a business. I let goals range on a much wider scale than that. Although, certainly those could be one of my goals, if I wanted them to be! Many of my goals are designed to maintain a balanced life-style and my own personal happiness. Even for things like rest and relaxation.
For example: I’m so used to jumping on Reddit that I do it reflexively; even to the point where I forget about engaging with some of my other hobbies! Now I stop and consider: would I enjoy my time better if I was on reddit, reading a book, playing Stardew Valley, or maybe chasing that productivity dopamine hit of striking something off my to do list? Maybe I could make progress on an interesting topic I’m studying? I could work on a blog post! I could work on that 2D game I want to make. These alternatives to reddit that I just mentioned are considered some of my goals because they make me happy.
Just by asking myself that question, I’ve been spending more time thinking about those goals I’ve set for myself and doing them, rather than mindlessly losing myself to a computer screen because of an addictive impulse.
What are you doing on lobste.rs though?
You cannot be completely free of sins ;). More seriously, I am not trying to abstain from the internet. lobste.rs is one of those sites that is not very addictive and usually high signal - low noise. It has a more positive effect than negative. The same for e.g. LWN.net or the newspaper we are subscribed to.
Or do you mean posting in the evenings? This post was not made on my phone. My computer-rule is no computers after 20:30. Though it usually ends up at 20:45 or so.
My thoughts exactly. I have no problem with that, but OP seems to fight with daily use of Internet by promoting his Internet content by using an Internet service :)
Cheap shot, but I’ll bite ;-)
I wouldn’t say I’m fighting “use of Internet”: I’m fighting low quality ways to spend my time. In contrast the community here is fairly high signal to noise ratio. I learn a lot more useful stuff here than in the average Twitter/Facebook post and their replies. Those services constantly re-arrange the newsfeed to avoid you being able to catch up too quickly and move on. They also inject adverts and (for FB) an enticing sidebar full of “news” that I’m too undiciplined to avoid. Not so with Lobste.rs, which I mostly read via RSS subscription to a couple tags.
As for promoting my own content: nothing wrong with that, is there? :-) I’m not a naturally gifted writer: it takes me hours and much editing to produce a blog post I’m happy with. (Though it’s getting easier!) Getting a discussion going around my writing motivates me to write more. (Even if the feedback is bad I usually learn something.) At some point I expect to influence colleagues more through writing English than code, so honing those skills seem like a good investment.
I’ve done similar. It is interesting to hear it’s not just me who’s unhappy with some of the ‘tech’ that’s part of modern life. Friends and family seem surprised by my attitude. I think they believe that if you work ‘in tech’ then you must fetishise it or believe it’s all good, simply because it exists.
Differences from above: I’m on a mail provider called Soverin, who seem to do a great job, and I’m using DuckDuckGo as much as possible. And I went Apple - phone, laptop, desktop.
I think this is most games, not just mobile games, and I think that the same could be said of books. Some games have had the same kind of impact on me as a book. Not many I’ll grant you, bu they’re there. I do understand what you’re saying though.
I still think it depends on the game. The Switch has some good stuff, but there’s still some garbage on the eshop. Having a device with the express purpose of gaming and a higher bar for quality control is definitely beneficial though - I pretty much only play Nintendo DS and GBA games.
A lot of games on mobile devices are designed with the same dark patterns and bad intentions as social media sites. But some games (such as Florence) genuinely moved me.
My son’s birthday party on Saturday, then Sunday taking my motorcycle to the track for a day on the 2.4 mile, 14 turn road course.
I used to be a fan of Python but almost all the stuff here seems weirdly tacked on. Added with good intentions for sure but a lot of it seems short-sighted, implemented in the least-effort way.
f
strings are likeu
strings in Python 2: a compatibility hack to make old code not go bust. Maybe these should’ve been just regular strings in Python 3, but over the entire lifespan format strings were not necessary but we need them mid-way in Python 3? Odd.Pathlib
uses the division operator in a weird way. I guess maybe this is similar to how+
concatenates strings but seems to be overly cute for cuteness sake. Granted, this is a minor point.records
. Useful feature, again as a decorator hack. But I can certainly see it being helpful. Again, no destructuring on them, which would make them much more useful.Why do you feel that Py3’s f strings are like Py2’s u strings? The f stands for “format”, meaning you can avoid the .format() method. The u stands for “unicode”, and is something else entirely. I don’t see how the two compare, would you care to elaborate?
The division operator used in pathlib merely mimics the directory separator in unices. If we have
p = pathlib.Path('/path')
, thenp / 'to' / 'file'
is the same as/path/to/file
. Pretty easy and convenient, if you ask me.Because both are what strings should’ve been by default. But one couldn’t change Python 2 in a compatible way so Python 3 strings are what were
u
strings in Python 2. Similarly withf
strings, in languages that do format strings this way (Ruby, Shell, PHP come to mind) this is a default behaviour, with a way to opt-out. But that can’t be added in Python 3 because all existing code that might contain formatting characters would start doing unexpected things, sof
strings had to be created. A hypothetical Python 4 would probably usef
strings as default.My complaint here is if there is a new formatting syntax introduced, why was it added now and not in a clean syntactic way when Python 3.0 was introduced?
I understand that it is for that purpose, but it is a “cutesy” misuse of division. The reverse operation of division would be multiplication, but what would multiplication on a path even mean? But as said, this is a minor complaint since Python already has
+
on strings, with no symmetrical-
operation.Fun fact, Elixir has
+
on lists and also-
on lists. What does it do? I’m leaving this as an exercise to the reader.Thanks, I understand what you’re getting at.
Operator overloads, yeah, brilliant. Let’s bless this kind of crap so we can be surprised by more un-obvious, difficult-to-introspect garbage.
I kind-of agree. It seems like a lot of recent changes make Python more complicated for not much gain. The language is starting to feel bloated instead of elegant and focused, to me at least. Thankfully they’re almost all opt-in features, so I can continue using Python as I like it, and only pick the new “features” which I genuinely get some benefit from.
Data classes implementation is so much nastier than namedtuple, and given the fact that it’s yet-another-decorator-hack, I don’t understand why it has a pep and is in the standard lib.
Type hinting, asyncio (or twisted), fstrings (an abomination)…no wonder Guido bounced. The whole place is going crazy! What happened to the Zen of python? All of the aforementioned seem direct contradictions.
Fuck. I’ll be writing c and Lua if you need me.
The article is wrong, you should not use this feature as it suggests. It does solve a real problem — packages like
zope
that are broken into multiple distributions on PyPI — see PEP 420. In this advanced use case it replaces a disgusting setuptools hack so I’d count it as progress.graphql-meets-protobuf, built on top of postgres. No thanks.
… that sounds kinda good to me. Why don’t you like it?
yeah that comment actually made me go read the article :)
Kenneth Reitz has responded: http://journal.kennethreitz.org/entry/conspiracy
This response isn’t a denial. I think folks should notice that. He goes out of his way to diminish the author without actually denying it. He’s mad about the post, not that he’s falsely accused, because the post is true.
This response is also filled with red flags:
Saying Tom didn’t want money and then saying all future donations will be split with Tom is a weird contradiction. The quote “work on the advancement of requests” seems like a way to differentiate between maintenance (which he wasn’t really doing while others were) and “advancement” (which is whatever he’s doing). Including the news that the library will changing its backend sounds like one of those sudden, made-up decisions people do try and make their accuser seem unqualified. How interesting the timing on that! Talking about the small set of “real collaborators” excludes someone who he explicitly says he was collaborating with is gaslight-y. And the “just don’t fucking work with me” has such a long history of being said by people who really did awful things and don’t want to admit that.
But Tom is not njs.
You make some good points. In terms of timing, feel like this was mentioned ahead of PyCon on an episode of Talk Python, but I was only half-listening to that the first time.
I’d just like to point out that Kenneth has lists of quotes…about himself…on his website.
While I’m in no way defending Kenneth or his actions, mocking someone for stating their opinions (in quote or any form) on their own website is not in the spirit of engineering or science. If you feel the need to be petty, please find another place to dunk on people.
I was highlighting the irony of the journal entry expressing incredulity about nj’s inclusion of a list of quotes from collaborators, as KR knows all about including quotes from “collaborators” (or sycophants, everyone can make up their own mind).
As far as “scoring on people”, I’d suggest that you are the one who is attempting to do so, with your virtue signalling and calling me petty.
It always amazes me (and scares me) how different people percieve reality (if that is even an achievable thing) and how the same situation can be read completely differently by two different brains. It is super scary to me. In this case I believe neither of them had anything malicious going on, and still, both of them have a completely different grasp of the situation.
Judging by the reception on reddit’s /r/python, it’s not that balanced: https://www.reddit.com/r/Python/comments/bklroc/why_im_not_collaborating_with_kenneth_reitz/ https://www.reddit.com/r/Python/comments/bku40b/njss_blog_post_kenneth_reitzs_journal/
This is why I think the original article was bad form. I know neither of the people involved. I’ve never even heard of them. I wouldn’t know who to believe even if I knew them.
Tag this one as “call out culture.” If there’s something to be done, it should probably be done within that community and with discretion, precisely because there are two sides to every story and people are biased toward the first/best expositor regardless of whatever actually happened.
I think it would be great if the mods banned personal call out articles on this basis. And, again, I know neither of these people. I’m not in the Python community.
I don’t disagree in general, but how do you do that in the context of an open source community? There is no real central authority, and people can essentially just do what they want.
I actually can contextualize Nathaniel’s post with my own interactions with reitz (which were a lot less involved) but they verify my impression.
So I an glad Nathaniel posted this. It helps me stay clear of unproductive conflicts for the future.
A few helpful and engaged members of the python community have signaled that it matches some of their observations.
If you keep such things private and secretive is hard to go through with community actions (like removing someone from boards, etc). If you make it public discourse people complain about character assassination or whatever. At the end of the day I believe in a victims right to discuss their case publicly of they want to.
I do think that’s true, but I think that one of the author’s central points, and part of the reason I posted this, is that it’s important to be aware that when money is involved there is a whole different level of accountability that comes into play.
This is why the legal system exists. This is why scrupulously detailed contracts arbitrated by lawyers exist.
Moreover, this is why foundations like the PSF exist - they handle the ‘dirty’ work of distributing money in a way that’s free of legal entanglement and less likely to engender this kind of mis-understanding.
This is a tough situation but I think the author handled it thoughtfully. Figuring out what to do when an author of a key OSS component is having mental health issues is rough enough, but then when sizable dollar counts get involved it gets even stickier.
Mental health issues are a justification, not an excuse. I have high-functioning autism, depression, anxiety, and some messed up PTSD trust issues. It might be understandable if I cause problems, but nonetheless I’ve still caused problems.
If I am collaborating with people on a project, I’ll say “these are the issues I have, these are the problems it might cause, these are the signs they’re affecting my judgement, these are the best mitigations.” It is something I’m supposed to actively manage, to make them known, handleable risks. Just saying “oh he has bipolar, he’ll do bad things” is disrespectful to the person, their collaborators, and the project..
…and to other people having mental issues.
Further than that, I even doubt bipolar explains such manipulative behaviour. I am not a psychiatrist, but I would guess the two are mostly unrelated.
I wouldn’t go that far. Co-morbidities exist and an untreated mental issue often doesn’t come alone. Which follows which and what is entangled is often hard for non-professionals.
Note: the article explicitly agrees with this.
Wow, what a response this has gotten! From my perspective, much of this discussion boils down to: If you’re going to try and fund an open source project, be extremely clear about where the money is going, and ideally have some kind of external audited entity handle the distribution, because otherwise, as this situation shows, things can get MESSY.
Yeah, or something like substance abuse. I did a ton of damage… didn’t even want to do it, but I still made amends and continue to do so. Requires honesty. With this situation, and like others, I’ve been watching this guy strut and pander and I wondered how it would shake out because the mask would slip and there’d be drama and stuff. I hope he can get honest about his motivations and the harms that resulted. People respond to humility. And people can tell when it’s authentic.
What’s so interesting is that self promotion is both encouraged and rewarded in industry and to perhaps a lesser extent the open source world.
Where does letting people know about the goodies you’re gifting to the world end and strutting and pandering begin?
I ask not to attack you or your statements (Which seem very heartfelt and tbh courageous - I don’t know that I could admit such things in a semi-pro forum like this.) but to try to calibrate my understanding of what makes sense and clarify what we as a community have defined as our norms on the topic.
What is better: to have done the work and got zero credit for it, or to get credit for something done by someone else?
Taste. Intuition about how to decompose logic into orthogonal functions. Data structures.
For my take on how to implement a simple Redis clone with Python:
http://charlesleifer.com/blog/building-a-simple-redis-server-with-python/
The point wasn’t to build a competitor to Redis, of course, but to show how to implement a simple socket server and protocol. Unlike the OP article, my post shows how simple it is to implement the Redis protocol.
Very cool.
There is some irony in calling GUIs bloated when your stack has no less than 3 different, incompatible ways of doing window management (plus a fourth if we were to count the DE/WM) and a “framework” for managing your… shell.
Yeah, the absolute nature of the statement is really stupid.
If all guis are bloat, show me how you’re going to do 3D CAD or PCB layout inside tmux.
The folks behind EROS Windowing System in particular would be really ticked given it was secure, minimalist, windowing system in 3,500 lines of code. I have a feeling Vim might be larger than that. I don’t know the lines of code, though.
I’m pretty sure the author isn’t capable of critical thought, but instead cargo-culted various tools he heard about from other blogs of webdevs just like himself.
At work we have a gateway server with an
/etc/motd
saying, essentially, “don’t use this system as anything but an SSH jump host – don’t run anything intensive or store anything large here”. Most people have no problem following this, but I noticed one user with an unreasonably large home directory. As a matter of policy I generally don’t abuse my admin access to look at anyone else’s stuff, but in this case I felt warranted to investigate, and found in said home directory:You want bloat? I got yer bloat right here…
(And I say this as a die-hard terminal junkie/GUI hater myself.)
Having interviewed a lot of people, SQL is one of those things that everyone thinks they know well and very few actually do. In interviews now, if I see them claiming expertise, I ask if they can do something more than “SELECT * FROM foo” because so often that’s all it takes to “know SQL” on your resume.
Good database knowledge can be extremely valuable. I can’t tell you how many times I’ve seen code that makes four or five round-trips to the DB, grabbing data, processing it client-side, and sending it back that could’ve been done in one round-trip with a well-crafted SQL query.
There’s the other side too: I’ve seen some truly awful database designs that have required multiple round trips because the DB designer didn’t understand foreign keys or constraints or whatever.
Depends on how you interview me.
If you sit me down with a pen and paper and tell me to write a complex query…. I might well fail.
If you sit me down with say sqlitebrowser… and an editor side by side, I will rapidly iterate starting from very simple queries (yes, I will start with select * from foo) to as complex as need be.
And yes, I might occasionally refer to the syntax for the gnarlier corners.
But I will get it done pretty rapidly in a single very well crafted query.
Conversely, I’m a true believer in what CJ Date has been saying for decades…. so if you allow me to redesign the table definitions…. you’d be shocked by how simple my queries will be.
Imo one of the best arguments against relying on ORMs is performance: in some situations a CTE or window function can get you one or two orders of magnitude improvement over a naive orm solution.
Nothing prevent you from implementing those edge case in your ORM though. I personally use SqlAlchemy, and I feel like it cover what I need as-is 90% of the time, and the 10% of the time left it gives me the tool to build more complexe queries and even allow me to keep using the “object mapping”. SqlAlchemy supports CTE and Window function!
For even too complexe query, it might also be possible to wrap them into SQL Function and simply map your ORM to this function.
Oh, to clarify, I think ORMs are great, I just don’t think it’s great to rely on them. They do 90% of the things for you, but you need to know SQL for the other 10% of cases. Some things aren’t like that, where there’s not such a wildly significant benefit as knowing SQL gives you in this case.
This is very true. It’s also helpful to know (in rough terms) what the ORM is doing under the hood, something that’s only really possible if you understand the SQL behind the operations.
Yep, Peewee orm also supports things like CTE, window functions, insert/on conflict, etc. The query builders for both libraries are very flexible, but you pretty much have to know SQL and then translate it into the APIs the query builder exposes. For experienced programmers this is no problem, but someone less fluent with SQL is going to have no idea how to use this advanced functionality, regardless of how it is exposed.
Definitely! My point was mostly about ORM and “advanced”/performant SQL not being mutually exclusive.
I like ORM or query builders not because I don’t know SQL, but rather because I detest the SQL syntax. I wish there were a better relational language. Maybe Tutorial D in front on Postgres’ storage engine.
What would you consider beyond “
SELECT * FROM foo"
? I don’t touch SQL on a daily basis, but I could throw together a left, right, and full join if I needed to, and I’m aware of how to use subqueries. What SQL skills would someone have in order for you to consider them competent / good at SQL?JOINs, GROUP BY, that sort of thing. If they’re going to be building DBs, understanding indexes, unique constraints, and foreign keys.
If you’re gonna be my lead database programmer/DB admin/DB architect, I’d want to see understanding of good database design (normal forms, good foreign key relationships, good key choices), CTEs, triggers (in your preferred database), being able to spot when a full table scan might happen, understanding when and how to use precomputed values for future queries, and so on.
The use of aggregate functions, defining new aggregate functions, the various joins, the 3VL truth table, grouping, subselects, CTEs, that kind of thing.
I like asking candidates
If you found a guy that thought about equal values ( rank / dense rank / row number ) you know he did some work. Hire him.
Haven’t touched joins yet.
I don’t know window function, but believe that I know join
It’s well worth the time learning window functions.
As Maruc Winand (who created use-the-index-luke.com and the newer modern-sql.com) says in his talk on Modern SQL there’s life before windows functions and life after windows functions.
I’d much prefer lateral joins be used in some of these cases.
I’ve seen no mention yet of
EXPLAIN
queries (Or similar operation in other RDMS than Postgresql?). Never been doing a lot of SQL in the past, but lately I had to work with some complexe queries over large dataset and most of my learning involved playing withEXPLAIN [ANALYZE]
, understanding the result and tweak the base query to fix the performance issue. Once you understand that, you can work from there to find the best index, where to place subqueries, set large enough working memory, etc.I love dmenu – it’s such a versatile tool. I put together a small fork that includes as many patches as I could find (multi-select, underline selection, vertical layout, configurable w/h/x/y) plus I added support for colored window border. If you’re interested, you can grab the source code here: https://gist.github.com/coleifer/11534911c7ff9ee5d64743a439f8539b
Here’s a screenshot or two if you’re curious. Horizontal layout across top of monitor and different colors and one more.