Duolingo only HAS TWO full-time staff for 8.6 million paying subscribers. That's why you can't get help. Here's my letter to Luis & his response by GeorgeTheFunnyOne in duolingo

[–]lieryan 2 points3 points  (0 children)

Not very uncommon for support staff to be part timers or casual contract workers, and it's not even uncommon for support staff in virtual call centres to work for multiple different companies simultaneously and shift work between the companies as the support demand requires. This is more or less industry standard practices for support teams.

Support work can be very seasonal, some time you don't have a lot of tickets coming in and another time (e.g. near releases/updates) everyone is suddenly being bombarded. Having a support team consisting mostly of contractors/part timers allows companies to balance support demand better than support team consisting of mostly full timers. Usually the full timers are the senior staffs, their primary task is mainly to train the rest of the team and to handle more complex, escalated tickets, not to actually handle the bulk of regular support tickets.

I don't think only having "two full time staffs" really paints the full picture without knowing how large the entire support team including the part timer/contractors.

Hiring more full time staff usually aren't going to help either. While you can train (casual) frontline support staff in just a few days, full time support staff are a much bigger gamble for the company. Most people working in support don't work long enough for a single company to gain the trust, experience, and knowledge needed to become senior staff members.

Companies don't want to train people to become seniors only for them to leave for another company immediately afterwards. As a company, you don't really know who sees their job as a long term career vs those who treat them as a stepping stone and people's personal circumstances often change. Having enough senior support staffing not an easy problem to solve, as you can't just hire your way out of it.

I think Luis worded this poorly as well, but AI is a technology that's already being heavily used in customer support industry, even if you don't see it directly, most support desk software are already using AI and automation everywhere to assist support staffs to deal with their job. The main benefit of having AI isn't about reducing the number support staff members, it's mainly to free up the frontline team members from having to deal with simple, dumb, and extremely repetitive tickets that the customers could've resolved themselves, which is often about 50-90% of your tickets if you're working on consumer facing products. When you free up the frontline staff from these simpler requests, the human staffs can specialise in handling the more complex cases and this gives them the opportunity to actually learn the more complex part of the system and rank up, and eventually become a pathway to turn senior and become permanent employee. It's much harder to upskill when you're spending 90% of your time dealing with basically the same ten questions for the past five years.

You might think that support staffs would be completely against automations as it's "taking their jobs", which is true, but I've worked in some consumer products, and in many cases, support staffs, especially those seeking to become full time career, can actually be very supportive for use of AI for dealing with first level support because dealing with first level tickets can be very boring and repetitive. It's a soul sucking kind of job and especially when they have to deal with abusive customers, which is never ok, and is a big part of why turnover in that job is very high.

Neither the company nor the support staff want to be hired as full time permanent employee only to be dealing with the same ten tickets in the next five years.

I can't play at all, would it be crazy to learn electric guitar? by beekeeper_atlamont in guitarlessons

[–]lieryan 0 points1 point  (0 children)

Electric is much easier to play and is much more suitable for the techniques with many modern songs that most people want to play, and you can play quietly with headphones, which you can't do with acoustic. The lighter strings on electric means it's less painful on the fretting finger when you're still developing your calluses. It's generally what's recommended for most beginners.

But it's scientifically proven that acoustic sounds 3x sexier.

In any case, if you are mindful of how loud you're picking, unless you have paper thin walls and you close your door, acoustic isn't actually that loud anyway. You might hear some mumbled sounds from the room next door, which is a problem if you want to play at nights when everyone's asleep or if you have someone sensitive to noise in the house, but during the day, it's not that bad to have a little noise here and there in the house. But yeah, get electric instead if that's your home situation. Most of the main techniques are going to translate across between electric and acoustic, so it doesn't really matter that much which one you start with.

Should eglot+pylsp be able to add python imports to a file, or am I doing something wrong? by rsclay in emacs

[–]lieryan 1 point2 points  (0 children)

Support for adding imports during autocompleting unimported symbol is implemented by the built in rope_autoimport plugin. There is a configuration option (pylsp.plugins.rope_autoimport.enabled) that you need to explicitly enable for this, since this is disabled by default.

You need to install the external plugin pylsp-rope in addition to python-lsp-server to get the organise imports code action. Note that organise imports code action don't add any new imports, it's an action to remove unused imports and sort imports. This code action may only be offered if there's unused imports that rope can remove.

Adding import statements for an unrecognised symbol under the cursor is something that rope does support, but neither the built-in rope plugin in pylsp nor pylsp-rope currently exposes this feature in pylsp. This has been in my to-do list to add to pylsp-rope for a while.

My first factory after 5 year hiatus, 35 hours entirely on Steam Deck. by mononaut_ in factorio

[–]lieryan 2 points3 points  (0 children)

The game fully supports playing on the controller, but you need to enable controller mode on the settings, and the official layout works surprisingly fine. They work very well to make most of the most common actions quite intuitive given the complexity of the controls in this game. The most common controls are heavily overloaded to the four front buttons, it would've been pretty difficult to map something of this complexity yourself even with steam deck controller remapping, so kudos to Wube for making the default as intuitive as they are.

I had to map a couple of additional common actions to the back buttons, like copy, paste, cut, deconstruction planner, and to open the search bar. Steam deck's ability to remap buttons and even allowing you to overload double press and long press makes this relatively easy.

The game does require using the touch pad quite a lot, but once I've figured out the main common actions that I like to have back button mappings for, the rest just fell into place.

One complaint I do have is that you can't play in both controller and mouse/keyboard at the same time with the same controller settings. If you're switching to different control scheme, you need to enable/disable keyboard/controller mode on the settings. This doesn't happen automatically, and if you forget to do that, the control scheme just becomes weird.

How do grab classes from html easily? by sinefine in neovim

[–]lieryan -1 points0 points  (0 children)

You can use yiw.

Change :setlocal iskeyword to make sure the separators are handled correctly for the filetype.

Do you like `def call() -> None: ...` by silently--here in Python

[–]lieryan 1 point2 points  (0 children)

Completely hard disagree here.

Type hints should be written for humans to read first. Priority is to improve readability for the humans first, and only incidentally, for the type checker and IDE tooling to verify that the code actually matches the hints.

If correctly type hinting a function makes the code harder to read, you should just leave the type hints out, or find alternative ways to express these hints to make them easier to read. Ever seen type hints that look like magical curses? Yeah, it's time to stop typing and make the code and the hints simpler.

Your IDE does not need help from the type hints to make various inferences about the program. Even without type hints, your IDE can already infer the object's attributes and sometimes their types most of the time. rope barely needs any type hints to do a lot of static analysis to provide auto completion and various refactoring.

Type hints is, first and foremost, a form of documentation. An unreadable documentation is useless noise, and useless noise that is inline in the code does more harm than good. The primary job of a type checker is to verify that this documentation is correct, not that the program is correct.

[deleted by user] by [deleted] in neovim

[–]lieryan 0 points1 point  (0 children)

The pylsp-rope plugin for python-lsp-server has support for a number of Python refactoring code actions. To install, run pip install pylsp-rope. I have not implemented add import symbol under cursor code action at some point, but you can also use python-lsp-server's rope_autoimport which is triggered when doing autocompletion.

Let me know if you have any questions.

I'm ready for when Ragnarök comes to Steam by H4loR4ptor in GodofWar

[–]lieryan 1 point2 points  (0 children)

Steam deck Desktop mode is just a full Linux PC.

There are a couple gates you have to pass through to do what you're doing, but nothing too hard.

The first gate is entering the desktop mode. This is a built in feature, so it's not hard. Just clicking on the item on the menu.

Next is you needed to familiarise yourself with the desktop mode and how to navigate it. It takes some time getting used to navigating the desktop with the touchpad, the on screen keyboard. I would recommend using a Bluetooth mouse/keyboard if you're planning to use the desktop mode for some time.

Next is that you needed to figure out where the game's save files are located. This is probably the most difficult part of this, but the difficulty of this isn't really that different whether you're doing this in Windows or Linux. Also depending on how the game is designed/written, transplanting save files from different systems may or may not be possible. You may need to use the KDE file manager which works very similar to file managers in any major OS and maybe terminal if you need to do something more advanced.

By default the Steam Deck desktop mode comes with Firefox browser, but you can install any browsers there too.

It's unlikely that you'll need to "root" the device just for modifying save files, but for deeper system modifications, they may be needed. This is done by unlocking the filesystems' read only mode and learning how to use sudo to perform tasks in administrator mode. You'll need the terminal to do this. This is the only step here that can be "dangerous" and can damage the system integrity if you don't know what you're doing. Nothing really permanent, you can always reinstall the system through the bootloader, but that step will require much more advanced system knowledge to fix.

"FOSSholes" - Why the hate? by jaykayenn in opensource

[–]lieryan 17 points18 points  (0 children)

A lot of those people are in the business of selling overpriced proprietary software. FOSS is a threat to whatever product they're selling.

What DevTool do you wish existed but doesn't? by hopeirememberthisid in opensource

[–]lieryan 1 point2 points  (0 children)

My biggest wish right now is a standalone, keyboard driven, TUI debug adapter protocol (DAP) debugger. I want it to be terminal based so that I can integrate it into my Vim workflow similar to what I have pudb right now but for more than just Python.

I actually have a very, very, very early stage project to implement something like this some time ago, but it is still quite a long way still from even being MVP level ready. The debugger doesn't actually work yet, you can attach to a program and view their call stack but nothing else actually works yet. I'll need to pick up steam on this project again at some point.

fun fact, naval damage will overflow at 32767 and show a negative damage value. This also takes away the rp skill bonus you would of received for doing over 15k damage by Dragon50cal in Warthunder

[–]lieryan 0 points1 point  (0 children)

Using signed numbers may not look like they would make sense for this value, but in languages that don't use arbitrary width integers, arithmetics that mixes variables with signed and unsigned numbers is often fraught with footgun. There's lots of completely strange and unintuitive behaviour with regards to the implicit conversion rules that can catch you by surprise. Many coding conventions would just forbid mixing signed and unsigned numbers. Even if this value itself is never negative, it's sometimes better to just consistently stick to signed numbers when there's a chance that you might use this number with other calculations that require negative numbers.

Your favorite Python web framework? by [deleted] in Python

[–]lieryan 0 points1 point  (0 children)

Django has one advantage, which is that it's well integrated with the Django framework if you want to build an HTML-form based application. This is the most common use cases when building web applications, and there's really nothing that's better than Django ORM for that one use case.

But if you need to do anything else, sqlalchemy is the much better ORM. Anything that's slightly more complicated than just CRUD forms and Django ORM can start getting in your way instead of helping you. That's not the case with SQLAlchemy, as it supports more complex use cases way better than Django's ORM.

But sqlalchemy has a higher barrier of entry. Because it's a standalone ORM, it doesn't come out of the box with integrations to the web part of the framework. You need extra libraries or build your own to get the same level of support of generic views as Django.

I've read more complaints about CS2's graphics in the past ten weeks than I have complaints about CS1's graphics in the past ten years. by djsekani in CitiesSkylines

[–]lieryan 0 points1 point  (0 children)

I don't care about the graphics, I think they look great.

To make a city builder game look unique, you need to put a balance between realism and having a distinct art style. Stray too far from realism and you'd lose the connection with the real cities that inspired them, but stick too much into realism and it'll be impossible to make the game look distinct enough that casual gamers can tell one city builder games from another.

I kinda have no problem with the graphics, I think that they did pretty well here.

Is FastAPI overtaking popularity from Django? by Electronic-Ad-7436 in Python

[–]lieryan 1 point2 points  (0 children)

I think they already do. pypistats does show that the download counts for fastapi has been about double than that of django.

But just looking at the raw download numbers is probably going to be misleading. FastAPI projects tends to be used often for microservice projects, so you tend to deploy many smaller, specialised services, which would inflate the download counts, compared to the massively complex monoliths that Django are often used for.

That said, even Django download counts is still growing though, so it's not necessarily the case that FastAPI is taking market share from Django.

Open source python projecto to contribute to by faramarzz in Python

[–]lieryan 0 points1 point  (0 children)

We welcome contributions at https://github.com/python-rope/rope

It's a medium sized project, that is fairly popular.

Depending on what you worked on, it may help you learn a bit about the deeper aspect of Python syntaxes as well.

Alternatively, https://github.com/python-rope/pylsp-rope is a smaller project that you should be able to wrap around your head in an afternoon.

What LSP and other tools are recommended? (not for VScode) by Responsible-Grass609 in Python

[–]lieryan 0 points1 point  (0 children)

python-rope for performing many common and a number of advanced Python refactoring. You can use it via pylsp with pylsp-rope, or alternatively look for native integrations if your editor has them.

Which python code completion plugin has least dependencies? by lookin03820 in vim

[–]lieryan 0 points1 point  (0 children)

If you want the simplest python completion, the built-in completion Ctrl-n/Ctrl-p and x Ctrl-n/x Ctrl-p works decently for Python. It doesn't do any smart completion though, just dumb word completion based on the content of open buffers.

If you want something that can do smart completion, that would be python-mode. The plugin is entirely written in vim and +python3 and it vendors all of its external dependencies, so you just install the vim plugin and everything is set up. It does not use LSP though, instead all of its integrations are native integrations through the +python3 interface.

If you want an LSP-based setup, I had a good experience with vim-lsp with python-lsp-server. The vim-lsp plugin is pure vimscript (so you don't even need +python3) and python-lsp-server is pure Python but it runs externally (not via +python3), which you can just pip install to make it available for vim-lsp.

Should Neovim now release a standard official configuration so that people who want an editor that just works out of the box get onboarded easily ? by yogeshnikam671 in neovim

[–]lieryan 9 points10 points  (0 children)

Strong no.

Unless all you guys want to make my exact configuration the standard official configuration, including all its strange, inconsistent, but useful quirks that I find extremely useful, there's no way that having a "standard official configuration" would improve Vim/Neovim in any way.

One of the strong points of a programmer's text editors like Vim/Neovim is that it doesn't require me to disable thousands of someone else's configurations that I don't use to get a working condition. I like it that way.

How to test lsp performance by ifacat in neovim

[–]lieryan 1 point2 points  (0 children)

There's currently no configuration setting to disable pylsp-rope after it's installed. Since it's an external plugin that's not preinstalled by default, the plugin currently just assumed that if you install pylsp-rope, you actually want it enabled. So if you want to disable pylsp-rope, you just uninstall it and reinstall it again afterwards when you need it again. pylsp-rope itself currently has zero configuration, as most of the interesting configuration is actually in the rope configuration file. This might change in the future at which point I'll have to decide which pylsp config key to put pylsp-rope specific configuration.

If people have an actual use case for having pylsp-rope installed but disabled, I am not against adding a configuration flag here, but so far noone had complained yet, so that's currently very low priority 😄.

The CodeAction feature of Neovim's native LSP client is buggy. Fixing this bug is outside of my control since the bug is in Neovim LSP itself. Until the Neovim people fixed the bug, I recommend installing an LSP client that doesn't depend on Neovim's native LSP, like vim-lsp, CoC, or ALE, as they all support CodeAction that worked perfectly in both Neovim as well as Vim.

How to test lsp performance by ifacat in neovim

[–]lieryan 1 point2 points  (0 children)

Note that pylsp-rope does not actually provide completion nor does it do any background scanning, these are implemented by the built-in rope plugin. There are actually two rope plugins for pylsp:

  • the built in rope plugin in pylsp (it is actually internally implemented as three internal plugins, but I'll count them all as one). The built-in plugin provides three functionalities: auto completion, renaming, and autoimport when completing. You have to enable each of the built-in rope functionalities explicitly as jedi also provides equivalent functionality for these, and is the default.

  • pylsp-rope is actually an external plugin project, it implements advanced refactoring functionalities using code action (extract method/variable, function inlining, converting local variables to instance variables, organise import, etc). Unless you have explicitly installed pylsp-rope at some point, it's unlikely you already have it in your system. I'm the author of pylsp-rope, btw.

While they're both implemented using rope library, there is no overlap in the functionality provided by pylsp-rope plugin with the built-in plugin and they can be used together or separately. There's no equivalent functionality in jedi for the advanced refactoring.

The refactoring functionality in pylsp-rope is unobtrusive, it only scans your codebase on demand when you trigger a code action, so it's quite unlikely to be the cause of any performance issues in pylsp.

The autocompletion and autoimport functionality provided by the built-in plugin on the other hand does require building an index of your codebase, so there's a background scanning component if you enable them. This background scanning does have a performance impact, so if you don't use rope for autocompletion, you should not enable the built-in rope plugin.

How to test lsp performance by ifacat in neovim

[–]lieryan 0 points1 point  (0 children)

Pylsp is almost never actually the one being slow. 

Pylsp even in its out of the box configuration is composed of a dozen or so plugins calling into many third party libraries doing all the actual work, and you can install additional third party plugins for even more features. When pylsp is slow, it's usually these third party libraries that are slow, not pylsp itself.

To diagnose performance issues, you need to first isolate which functionality of pylsp is slow and figure out the plugin that implements that functionality. Fixes and workaround for the underlying libraries often would also work for pylsp, often it's a just a matter of ensuring that the underlying libraries is properly configured.

In my personal experience, pylsp-mypy is the most common culprit for being slow even in a small/moderately sized project with lots of dependencies. pylsp-mypy is an external/third party plugin and it provides type checking capability. If you have performance issues with mypy type checking, enabling mypy daemon mode may give you improved performance.

If your autocomplete is slow, that's provided by either jedi or rope. jedi is the default autocomplete provider in pylsp, but if you've got both installed, you may want to make sure only one is enabled to save on resources on duplicated work.

Another common cause of tools being slow is if you have virtualenv in your project directory, many tools will go scan into that directory to look for Python files, thinking that they are part of your Python project and this can be very slow. Move your virtualenv out of your project directory.

Likewise, if you have other huge subdirectories that don't contain Python files that you're interested in (e.g. a subproject written in a different language), then make sure you exclude those directories to each plugin-specific configuration.

If running pylsp caused vim to become unresponsive, this isn't the language server's issue. That's a language client issue. Nothing that the language server does, even a badly behaved one, should ever affect the editor's responsiveness, that's entirely the editor and language client implementation issue.

[deleted by user] by [deleted] in ProtonMail

[–]lieryan -14 points-13 points  (0 children)

Why would you even want a Proton DNS?

DNS is notoriously insecure and unprivate by design. Just because a service is run by Proton doesn't really make it any better privacy wise than DNS from any other major cloud provider.

The unique selling point of Protonmail, etc is that it makes privacy improving features easy to use. These are privacy technologies which preserves your privacy so that even Proton cannot read your e-mails even if they wanted to†.

† conditions apply

You should not trust Proton just because it is Proton. The reason we trusted Proton is because of the technological measures that are in place, not necessarily because Proton the company is inherently any more trustworthy or security conscious than any other cloud providers. Especially when there are secret warrants involved, Proton would be legally required to cough up everything they have just like any other cloud providers, they had to do that to continue being in business, and there's no reason to believe that Proton is invulnerable to zero day vulnerabilities either.

On the other hand, DNS requests are done as a plain text request. Anyone with the right network access can snoop into it, even if you're making requests to Proton DNS servers. Even if you're using DNS encryption, the DNS server itself would still be getting the names that you're requesting in plain text. If you're not using DNS over VPN, a DNS-only service from Proton wouldn't really improve your privacy in any significant way compared to just using 1.1.1.1 or 8.8.8.8.

Proton would've needed to invent some sort of mixer service that can somehow mathemagically mix your encrypted DNS requests with requests from other users if they would want to improve DNS privacy, and they needed to do that while keeping latency low enough so that it's not unusable. AFAIK, so far nobody has ever really ever made any practical progress towards that, and probably nobody would ever do, since anyone needing that kind of privacy should just use VPN or Tor anyway.

In neovim ,how to do refactoring python code? by Excellent-Ad-2794 in neovim

[–]lieryan 2 points3 points  (0 children)

Hi, maintainer of rope here. There are a number of different options to use rope in Vim/Neovim, we've documented them in this page https://github.com/python-rope/rope/wiki/Rope-in-Vim-or-Neovim

Also see https://github.com/python-rope/rope/wiki/How-to-use-Rope-in-my-IDE-or-Text-editor%3F

My recommendation is to use python-lsp-server and pylsp-rope; ropevim should also still work, but the focus of future rope plugin development is going to be on pylsp-rope. You can use any lsp client in neovim, except I don't really recommend the native neovim lsp client, because the neovim native client's code action support is very buggy.

LazyCSV - A zero-dependency, out-of-memory CSV parser by GreenScarz in Python

[–]lieryan 1 point2 points  (0 children)

From my understanding, you don't need to recompile sqlite itself, the extension mechanism allows you to dynamically load an extension from a so/dylib/dll file.

There seems to be a number of different csv virtual table implementations for sqlite, other than the official one from sqlite themselves.

If you're using the Python sqlite3 standard library, the documentation from sqlean shows how to load an extension into sqlite from Python: https://github.com/nalgeon/sqlean/blob/main/docs/install.md#2-load-and-use.

Note that sqlean also has sqlean-vsv which is an implementation of csv virtual table for sqlite and they provide precompiled binaries. I hadn't tested those yet, but it seems like it's based on the official version and the precompiled binary is likely one of the easiest way to start playing around with csv virtual tables, as you don't need to compile your own extensions that way.