There have been multiple accounts created with the sole purpose of posting advertisement posts or replies containing unsolicited advertising.

Accounts which solely post advertisements, or persistently post them may be terminated.

programmer_humor

This magazine is from a federated server and may be incomplete. Browse more on the original instance.

hblaub , in Which side are you? Javascript or Typescript

TypeScript of course. The compiler often times catches mistakes in variable names, API methods, whatever. So it saves time by not having to run the whole application all the time. Also the input help is much better, when the editor knows sth is a string or a number, for example.

o_d ,
@o_d@lemmygrad.ml avatar

Oh yeah. Or when it’s a union of multiple strings or an enum and you get that sweet popup of all your options. So good 🥹

fidodo ,

And being able to use more complex object types like discriminated unions without having to constantly look up what’s in them!

drkt , in They tried

Oh boo I can’t visit American propaganda websites what a loss to my European life style

MDFL OP ,

I have run into this recently on several non-US, non-news sites. Your comment is propaganda.

Kichae ,

propaganda

I do not think that word means what you think it means.

BruceTwarzen ,

It's a synonym for socialism and it means everything that i don't like

MDFL OP , (edited )

I absolutely do. Spreading the idea that news sites are all propaganda and the only entities involved in this kind of practice is, in itself, propaganda.

explodicle ,

I think they were referring only to American news websites.

MDFL OP ,

You’re right. I wasn’t clear in my comment. Saying all US-news sites are propaganda is propaganda. I’m not sure how that changes anything.

mojo ,

It’s a lost cause, the EU circlejerk is too strong, as clearly everything is a utopia over there with nothing wrong.

GDPR is a good idea, but still very flawed in practice which they really don’t like to admit anything wrong for some reason.

explodicle ,

Bruh he was just being unclear

smollittlefrog ,

claiming the GDPR is good =/= claiming the GDPR is flawless

mojo ,

Yeah, and?

smollittlefrog ,

They didn’t say that either. Where do you get this idea from that they’re talking about (all) US news sites?

They said “American propaganda websites”. That may include some news sites. It may also not include some news sites.

The most you could infer from their statement is that only American propaganda websites violate the GDPR.

Of course websites exist that violate the GDPR and are not American propaganda websites.

But the vast majority of websites commiting severe violations of the GDPR that an average European encounters will be American propaganda websites.

(Believe it or not, Europeans don’t often visit websites written in Russian or Chinese.)

Kalkaline ,
@Kalkaline@programming.dev avatar

It means “something bad that I disagree with”, synonymous with communism, socialism, democrats, and Nazis, at least that’s what Infowars tells me.

Pandoras_Can_Opener , (edited )
@Pandoras_Can_Opener@mander.xyz avatar

Infowars tells you Nazis are something you disagree with? Haven’t heard from them in a while. Would have thought they’d quietly drop the Nazis are evil thing.

bulwark , in Just a dad helping out

Do you guys have any idea how expensive a website is with a Large Screen size?

Steamymoomilk ,

goes to website on 47in TV

The price of development is insane

yonder ,

Plugs in HTC Vive and uses WLX-overlay to enlarge the website to 100m virtually.

Steamymoomilk ,
AnomalousBit , in everywhere I go

JavaScript is so ass, typescript is just putting ketchup on a rotten banana. Better just to choke it down quickly if you have to eat it, IMO.

skulbuny ,
@skulbuny@sh.itjust.works avatar

I wouldn’t say JavaScript is horrible, it’s a fine little language to do general things in if you know JS well. I would say, though, that it is not a great language. Give me F# and I’m happy forever. I do not like typescript that much more than JS.

felbane ,

PHP is better than Javascript these days.

Fucking PHP.

The only thing JS really has going for it is ease of execution, since any browser can run your code… though the ubiquity of Python is closing that gap.

Feathercrown ,

I’ll bite. Why JS bad?

Zangoose ,

Short answer:

https://lemmy.world/pictrs/image/420455fa-3b0a-46eb-b4b6-ef8e6faa86f5.png

Long answer:

There are a lot of gatcha moments in JS with weird behavior that makes it really easy to shoot yourself in the foot. It does get better as you get more experience but a lot of the oddities probably shouldn’t have existed to begin with. For what it was originally intended for (adding light scripting to websites) it’s fine but it very quickly gets out of hand the more you try to scale it up to larger codebases. TypeScript helps a little bit but the existence (and common usage) of ‘any’ has the potential to completely ruin any type safety guarantees TypeScript is intended to provide.

Feathercrown ,

It’s always the type coersion. Just use === and 90% of the “footguns” people complain about go away.

Zangoose ,

That’s true but at the same time the fact that JavaScript equality is so broken that they needed a === operator is exactly the problem I’m talking about.

And those examples were low hanging fruit but there are a million other ways JavaScript just makes it easy to write buggy code that doesn’t scale because the JavaScript abstraction hides everything that’s actually going on.

For example, all of the list abstractions (map, filter, reduce, etc.) will copy the array to a new list every time you chain them. Doing something like .filter(condition).map(to new value) will copy the list twice and iterate over each new list separately. In most other languages (Java, C#, Rust, Go, etc.) the list abstractions are done over some sort of iterator or stream before being converted back into a list so that the copy only has to be done once. This makes using list abstractions pretty slow in JavaScript, especially when you have to chain multiple of them.

Another simple but really annoying thing that I’ve seen cause a lot of bugs - Array.sort will convert everything into strings and then sort if you don’t give it a comparison function. Yes, even with a list of numbers. [ -2, -1, 1, 2, 10 ] will become [ -1, -2, 1, 10, 2 ] when you sort it unless you pass in a function. But if you’re looking over code you wrote to check it, seeing a list.sort() won’t necessarily stand out to most people as looking incorrect, but the behavior doesn’t match what most people would assume.

All this is also without even getting started on the million JS frameworks and libraries which make it really easy to have vendor lock-in and version lock-in at the same time because upgrading or switching packages frequently requires a lot of changes unless you’re specifically isolating libraries to be useful (see any UI package x, and then the additional version x-react or x-angular)

Tldr; Why can’t we have nice things JS?

madeindjs ,

For example, all of the list abstractions (map, filter, reduce, etc.) will copy the array to a new list every time you chain them.

This methods were added to generator recently. So you can avoid copying the array in memory.

All this is also without even getting started on the million JS frameworks and libraries which make it really easy to have vendor lock-in and version lock-in at the same time

In my opinion, it’s also what make JS good. There a package for almost everything.

Feathercrown ,

This is all true, although I don’t think it warrants saying that it’s worse than PHP.

Zangoose ,

That’s fair. I was mostly commenting on my own experiences with JS/TS, I’ve never used PHP so I can’t say if it’s better or worse but a few people I know have said that modern PHP is actually pretty good for personal projects. I’m guessing it would have its own set of nightmares if it was scaled to an enterprise level though.

souless ,

To its credit JavaScript has made quite a few improvements to the underlying structure since 2016. JS is one of the most used languages because it is fast to adapt to changing environments along with wide support.

It is not a safe language by any means, it can be easy to fall down holes of unwarranted expectations. Like any language once understanding limitations will open up its power and potential.

hswolf ,
@hswolf@lemmy.world avatar

that’s crazy, it’s almost like it was created to run on a browser, who would do such an evil thing?

xlash123 ,
@xlash123@sh.itjust.works avatar

Back when I was still doing JS stuff, switching to TS was so good for the developer experience. Yeah, there’s still JS jank, and types are not validated at runtime, which was a pain in the backend (pun intended), but still I much prefer it to vanilla JS

lemmyvore ,

You know, you can validate data structures at runtime… and write unit tests… TS is not a substitute for those things.

PM_Your_Nudes_Please , in OneDrive deleted my files!

Just an FYI, Windows likely just moved your files from users[username] to users[username]\OneDrive instead. When OneDrive sets itself up, it basically grabs all of the relevant folders and moves them into a single “OneDrive” folder. Not a huge issue if you’re setting up the PC for the first time. But if you’ve been using the PC for a while, it’ll break everything because now all of your local files have moved and none of your systems are pointing at the right location anymore. For instance, your desktop is likely black because your image file got moved into that OneDrive folder.

dan , (edited ) in Seriously how many times does this have to happen
@dan@upvote.au avatar

At my workplace, we use the string @nocommit to designate code that shouldn’t be checked in. Usually in a comment:


<span style="color:#323232;">// @nocommit temporary for testing
</span><span style="color:#323232;">apiKey = 'blah';
</span><span style="color:#323232;">// apiKey = getKeyFromKeychain(); 
</span>

but it can be anywhere in the file.

There’s a lint rule that looks for @nocommit in all modified files. It shows a lint error in dev and in our code review / build system, and commits that contain @nocommit anywhere are completely blocked from being merged.

(the code in the lint rule does something like “@no”+“commit” to avoid triggering itself)

8uurg ,

Neat idea. This could be refined by adding a git hook that runs (rip)grep on the entire codebase and fails if anything is found upon commit may accomplish a similar result and stop the code from being committed entirely. Requires a bit more setup work on de developers end, though.

dan ,
@dan@upvote.au avatar

Would a git hook block you from committing it locally, or would it just run on the server side?

I’m not sure how our one at work is implemented, but we can actually commit @nocommit files in our local repo, and push them into the code review system. We just can’t merge any changes that contain it.

It’s used for common workflows like creating new database entities. During development, the ORM system creates a dev database on a test DB cluster and automatically points the code to it with a @nocommit comment above it. When the code is approved, the new schema is pushed to prod and the code is updated to point to the real DB.

Also, the codebase is way too large for something like ripgrep to search the whole codebase in a reasonable time, which is why it only searches the commit diffs themselves.

calcopiritus ,

There are many git hooks. One of them checks each commit, but there’s another that triggers on merges.

cypherpunks ,
@cypherpunks@lemmy.ml avatar

At my workplace, we use the string @nocommit to designate code that shouldn’t be checked in

That approach seems useful but it wouldn’t have prevented the PyPI incident OP links to: the access token was temporarily entered in a .py python source file, but it was not committed to git. The leak was via https://docs.python.org/3/tutorial/modules.html#compiled-python-files which made it into a published docker build.

OhNoMoreLemmy ,

Yeah, but a combination of this approach, and adding all compiled file types including .pyc to .gitignore would fix it.

cypherpunks ,
@cypherpunks@lemmy.ml avatar

adding all compiled file types including .pyc to .gitignore would fix it

But in this case they didn’t accidentally put the token in git; the place where they forgot to put *.pyc was .dockerignore.

calcopiritus ,

This is a huge idea. I’m stealing it.

Not just for credentials, there are many times where I change a setting or whatever and just put “//TODO: remember to set it back to ‘…’ before commiting”. I forget to change it back 99% of the time.

PlexSheep ,

This sounds like a really useful solution, how do you implement something like this? Especially with linter integration

dan ,
@dan@upvote.au avatar

I’m not sure, sorry. The source control team at work set it up a long time ago. I don’t know how it works - I’m just a user of it.

The linter probably just runs git diff | grep @nocommit or similar.

zqwzzle ,

Depending on which stack you’re using, you could use danger.systems to automatically fail PRs.

PlexSheep ,

PRs? Isn’t the point of @nocommit that something does not get committed, and therefore no credentials are stored in the git repository? Even if the PR does not get merged, the file is still stored as a hit object and can be restored.

zqwzzle ,

I read the lint part and my brain forgot about everything else. You could stick the danger call in a pre commit hook though.

Pickle_Jr , in How I date

Am I dumb or what’s up with the radio stuff on the left? 😅 Is rust common for some sort of radio programming?

widw ,

The image was modified, I think the original said something like “we’re gonna listen to Russian number stations on shortwave radio”

Sabata11792 ,

I’m still down.

send_me_your_mommy_milkers ,
@send_me_your_mommy_milkers@lemmy.world avatar

Thats so much better 😭

rf_ ,

I think the original text was about ham radio.

blanketswithsmallpox ,

And yet it’s still relevant because HAM radio operators are weird like that.

Ephera ,

I mean, presumably there’s a microcontroller in this radio. For programming that, your only real mainstream choices are C, C++ and Rust, since you can’t have a language runtime without a filesystem.

But yeah, it’s neither the case that Rust is overwhelmingly popular for that (C/C++ do stick around still), nor is it the only discipline where Rust shines.

Areldyb ,

Check this guy out, doesn’t even have any radio equipment in his IDE

snooggums , in break fast 🥣 move things 🛒
@snooggums@midwest.social avatar

Like all sayings, there is context for moving fast and breaking things.

The saying means that when creating something new for profit, don’t worry too much about trying to figure out all the details beforehand and figure it out as you go. This will inevitably cause things to break, but being able to quickly fix that when it happens is the same skills needed to create new features as you go.

The saying does not work with large and complex established systems where breaking things wreak havoc.

conquer4 ,

And more likely to overall fail. www.theregister.com/2024/…/agile_failure_rates/

Soup ,

It also feels like they chase the “break things” part as if not breaking stuff is a bad thing, and like we should be proud of them for releasing broken and poorly tested updates.

Move fast, break things, fix the broken things, push update/product whatever. They keep forgetting the third step.

snooggums ,
@snooggums@midwest.social avatar

Like the startups that ‘disrupt’ the established system by ignoring laws and breaking the parts that worked and selling it like an improvement.

‘Ride sharing’ (unregulated cabs) was only cheaper because of investor funding allowing them to undercut on pricing, abusing the concept of contract workers, and the companies ignoring laws. That isn’t ‘disruptive’ by being innovative, that is cheating the system.

Soup ,

And that’s exactly it. Capitalism rewards having money and how you get it isn’t important. It doesn’t breed technological innovation but it sure as shit pumps out new, fun ways to spew propoganda and avoid laws! And oh boy is paying employees well not even close to a metric by which to measure a successful company.

It’s the least people clever in the room having the volume to make sure that no one smarter than them can speak and then claiming they’re geniuses when only their idea gets through.

JohnSmith ,

I think there is another aspect that is important: limit the blast radius. Shit inevitably happens when you create something new and complex, and when it does, you’d rather minimise the impact where possible.

CanadaPlus ,

What, you mean I can’t just read rich guy memoirs and blindly apply the platitude under each chapter heading? /s

MajorHavoc ,

It works fine for anyone with the foresight to be born into an ultra wealthy family.

CanadaPlus , (edited )

Or at least a sorta-wealthy family, and the further “foresight” to be in the exact right place at the right time.

That’s the background of most of the Western ultra-rich, just as a consequence of there being vastly more sorta-wealthy families than already ultra-rich ones. Some of them are bound to stumble into situations that add a digit or two to their net worth. For an example, Elon Musk is notable for being tangentially involved in a huge success like three times, despite being a well-known moron.

My favourite introduction to the mathematical modeling of how inequality happens.

jaybone , in Hot Potato License

Way to discriminate against future people on Mars.

todd_bonzalez ,

The Musk followers? Good.

invertedspear , in New language

One project I worked on had 10 different languages. That was rough. But even your basic full stack web application is usually 5 languages: SQL, a backend language, HTML, CSS and JS. Usually some wheel reinventing frameworks thrown in for good measure. 5 languages is light these days.

agressivelyPassive ,

And don’t forget the CI “language” plus a bunch of bash scripts, Helm, Kubernetes, etc.

mctoasterson ,

Probably a bunch of hacked together Python to copy stuff between fileshares. Bonus points if it runs with a .bat file and a Windows scheduled task.

humbletightband ,

Without Ansible or Terraform? What about SQL specific for each rdbms?

CodeMonkey ,

I work in Java, Golang, Python, with Helm, CircleCI, bash scripts, Makefiles, Terraform, and Terragrunt for testing and deployment. There are other teams handling the C++ and SQL (plus whatever dark magic QA uses).

smeg , in Python tutorial moment
db2 , in Your scrunglebop is disponscabulated

Did you try setting it to wumbo?

Jumuta ,

I tried editing the thingamajig to set it to wumbo but it started erroring again when I turned on the doohickey

omidmnz ,
@omidmnz@programming.dev avatar

That explains it then! Turn doohickey off and try richhickey.

9point6 , in Functional bros be like

Const everything by default

If you need to mutate it, you don’t, you need to refactor.

noli ,

Dogmatic statements like this lead to bad, messy code. I’m a firm believer that you should use whatever style fits the problem most.

Although I agree most code would be better if people followed this dogma, sometimes mutability is just more clean/idiomatic/efficient/…

Corbin ,

Define your terms before relying on platitudes. Mutability isn’t cleaner if we want composition, particularly in the face of concurrency. Being idiomatic isn’t good or bad, but patterned; not all patterns are universally desirable. The only one which stands up to scrutiny is efficiency, which leads to the cult of performance-at-all-costs if one is not thoughtful.

9point6 ,

I agree somewhat, but I’d also say any codebase needs some level of “dogmatic” standard (ideally enforced via tooling). Otherwise you still end up with bad, messy code (I’d even say messier, as you don’t even get consistency)

sukhmel ,

I’d agree with the first half, but not the second. Sometimes mutability allows for more concise code, although in most cases it’s better to not mutate at all

9point6 ,

I feel like I should maybe have put a “probably” in there

After all “there’s no silver bullet”, but in anything but a few edge cases, the rule applies, IMO

BaardFigur ,

deleted_by_author

  • Loading...
  • whotookkarl ,
    @whotookkarl@lemmy.world avatar

    I think the general idea would be to take the original const, and create a new const with the new location applied. Destroy the original when it’s no longer needed or scoped. State maintained through parameters passed to the move function e.g. move(original const, new location) -> new const object instead of stateful members in the object like move(mutable, new location) -> updated mutable.

    Ironfacebuster ,

    A const object meets an immutable variable

    RageAgainstTheRich ,

    That is a… strange take.

    Random example, imagine a variable that holds the time of the last time the user moved the mouse. Or in a game holding the current selected target of the player. Or the players gold amount. Or its level. Or health. Or current position.

    frezik ,

    In all those cases, the answer is to swap in a new variable and throw the old one away.

    RageAgainstTheRich ,

    Legit question because i think I’m misunderstanding. But if its a const, how are you able to swap or replace it?

    frezik ,

    It’s only a const within a function. You can pass the value to another function and changing it as it’s passed. For example:

    
    <span style="color:#323232;">const int foo = 1
    </span><span style="color:#323232;">other_func( foo + 1)
    </span>
    

    In functional programming, you tend to keep track of state on the stack like this.

    madcaesar ,

    What is the advantage of this VS just overwriting the var?

    frezik ,

    Keeping state managed. The data for the function will be very predictable. This is especially important when it comes to multithreading. You can’t have a race condition where two things update the same data when they never update it that way at all.

    madcaesar ,

    Hm I’m having trouble visualizing this do you know a quick little example to illustrate this?

    frezik ,

    Rather than me coming up with an elaborate and contrived example, I suggest giving a language like Elixir a try. It tends to force you into thinking in terms of immutability. Bit of a learning curve if you’re not used to it, but it just takes practice.

    madcaesar ,

    Ok how about this then, I frequently do something like this:

    
    <span style="color:#323232;">let className = 'btn'
    </span><span style="color:#323232;">  if (displayType) {
    </span><span style="color:#323232;">    className += ` ${displayType}`
    </span><span style="color:#323232;">  }
    </span><span style="color:#323232;">  if (size) {
    </span><span style="color:#323232;">    className += ` ${size}`
    </span><span style="color:#323232;">  }
    </span><span style="color:#323232;">  if (bordered) {
    </span><span style="color:#323232;">    className += ' border'
    </span><span style="color:#323232;">  }
    </span><span style="color:#323232;">  if (classNameProp) {
    </span><span style="color:#323232;">    className += ` ${classNameProp}`
    </span><span style="color:#323232;">  }
    </span>
    

    How would this be made better with a functional approach? And would be more legible, better in anyway?

    frezik ,

    I’d say this example doesn’t fully show off what immutable data can do–it tends to help as things scale up to much larger code–but here’s how I might do it in JS.

    
    <span style="color:#323232;">function generate_class_name( display_type, size, bordered, class_name_prop ) 
    </span><span style="color:#323232;">{
    </span><span style="color:#323232;">  classes = [
    </span><span style="color:#323232;">      'btn',
    </span><span style="color:#323232;">      ( display_type ? display_type : [] ),
    </span><span style="color:#323232;">      ( size ? size : [] ),
    </span><span style="color:#323232;">      ( bordered ? bordered : [] ),
    </span><span style="color:#323232;">      ( class_name_prop ? class_name_prop : [] ),
    </span><span style="color:#323232;">  ];
    </span><span style="color:#323232;">
    </span><span style="color:#323232;">  return classes.flat().join( " " );
    </span><span style="color:#323232;">}
    </span><span style="color:#323232;">
    </span><span style="color:#323232;">console.log( "<"
    </span><span style="color:#323232;">    + generate_class_name( "mobile", "big", null, null )
    </span><span style="color:#323232;">    + ">" );
    </span><span style="color:#323232;">console.log( "<"
    </span><span style="color:#323232;">    + generate_class_name( "desktop", "small", "solid", "my-class" ) 
    </span><span style="color:#323232;">    + ">" );
    </span><span style="color:#323232;">console.log( "<"
    </span><span style="color:#323232;">    + generate_class_name( null, "medium", null, null ) 
    </span><span style="color:#323232;">    + ">" );
    </span>
    

    Results:

    
    <span style="color:#323232;"><btn mobile big>
    </span><span style="color:#323232;"><btn desktop small solid my-class>
    </span><span style="color:#323232;"><btn medium>
    </span>
    

    Notice that JavaScript has a bit of the immutability idea built in here. The Array.flat() returns a new array with flattened elements. That means we can chain the call to Array.join( " " ). The classes array is never modified, and we could keep using it as it was. Unfortunately, JavaScript doesn’t always do that; push() and pop() modify the array in place.

    This particular example would show off its power a little more if there wasn’t that initial btn class always there. Then you would end up with a leading space in your example, but handling it as an array this way avoids the problem.

    madcaesar ,

    Very interesting. Actually the part you mention about there being an initial ‘btn’ class is a good point. Using arrays and joining would be nice for that. I wish more people would chime in. Because between our two examples, I think mine is more readable. But yours would probably scale better. I also wonder about the performance implications of creating arrays. But that might be negligible.

    RageAgainstTheRich ,

    Aaah okay i get it now :) that makes a lot more sense.

    Magnetar ,

    Scala user unite! There are dozens of us, dozens!

    crispy_kilt ,

    Scala? Can we reimplement it in Rust?

    lemmesay ,
    @lemmesay@discuss.tchncs.de avatar

    sure, just make sure to add “blazingly fast” in the description and append “-rs” to the name

    Magnetar ,

    But does it do everything in anonymous functions and lambdas?

    crispy_kilt ,

    It can

    ByGourou ,

    Sorry, I want to make an app that works, not a perfect art piece.

    9point6 ,

    The app working isn’t good enough, it needs to be maintainable. From a professional perspective, unmaintainable code is useless code.

    Code that mutates everywhere is generally harder to reason about and therefore harder to maintain, so just don’t do it (unless there’s literally no other practical way, but genuinely these are very rare cases)

    ByGourou ,

    I personally disagree, forcing yourself to use non mutable variables only leads to longer and more convoluted code.

    9point6 ,

    Fair play, I guess we’re probably just gonna disagree.

    In my experience I’d say mutable code (larger than anything other than toy examples) always results in more time spent fixing bugs down the line, predominantly because it’s objectively harder for humans to reason about multiple one to many relationships rather than multiple one to one relationships. I’d say because you need to think about all possible states of the set of mutable variables in your code in order to completely understand it (and I don’t just mean understanding the intended purpose of the code, I mean understanding everything that code is capable of doing), that usually results in a more convoluted implementation than the pretty linear way you typically read functional code.

    Longer code is practically always better if it’s easier to understand than the shorter alternative. Software engineers aren’t employed to play code golf, they’re employed to write maintainable software. Though I’ll say ultra high performance applications might be the exception here—but 99% of engineers aren’t doing anything like that.

    I’m always happy to be convinced otherwise, but I’ve never seen a convincing argument

    nulluser , in I can't believe people are still using GUMBIES when there are so many better alternatives.

    Now I understand where ChatGPT hallucinations come from.

    shneancy ,

    tumblr will save us from the AI takeover

    KeenFlame , in Hey, I'm new to GitHub!

    Nah but the dude has a point

    captain_aggravated ,
    @captain_aggravated@sh.itjust.works avatar

    Absolutely. Github is a TERRIBLE way to publish software or computer files, in much the same way that oatmeal is a terrible bedroom lubricant.

    SkippingRelax ,

    What’s the problem with github and what would you use to publish software or computer files instead?

    frippa , (edited )
    @frippa@lemmy.ml avatar

    Not OP but many Linux project I follow, since they don’t have many resources, publish their releases through Torrent, a seeebox is fairly cheap (something like €10 a month) and could be easily crowdfunded even for a small project, and isn’t a huge expense anyway. And the site could just be a static page, or better yet the magnet link could be aviable on Github for people that want the precompliled binaries instead of the source.

    E: did i say something controversial?

    Harbinger01173430 ,

    Windows store, play store, snap store…many options for software publishing. GitHub should stay as a code repository

    bitwolf ,

    GitHub Pages lol

    captain_aggravated ,
    @captain_aggravated@sh.itjust.works avatar

    Same thing that’s wrong with oatmeal: Nothing, that’s just not what it’s for.

    Github and tools like it are designed for codebase versioning. It’s a great tool for developers who have a need to collaborate with others and manage releases/branches. But, it’s really not great for distributing executable apps to end users because it’s not for that. You shouldn’t tell end users to clone a git repo and type make install, because that’s not normally how people manage software.

    If possible, the app should be packaged and in a software repository/app store typical of the platform. Chocalatey on Windows (Microsoft has their own Windows Store, but fuck that), Brew on MacOS…if we’re talking about an end-user application for Linux, I’d recommend Flatpak because it’s become the de facto one to rule them all; if you really must host something on your own website right next to a windows .exe I will say go with appimage.

    You can get hosting for distributing end user apps, Github has a service called Github Pages for this purpose, for example. But especially in the Linux world, too many creators of little things like to just point you at their git repo and only accept user feedback in the form of pull requests.

    random9 ,

    “I went to the farmer’s market but they didn’t sell me a complete meal, only all these fucking plants. They think everyone’s a cook, and expect to know cooking, but i’m not and I don’t. Make a fucking meal and give it to me! Stupid fucking smelly farmers” – that’s how that sounds

    KeenFlame ,

    I know how to do it but I’m not selfish enough to forget how it was the first times. You won’t convince me it’s user friendly

    random9 ,

    The point, which you missed, is that going to github, a source code hosting service, to look for downloading executables for your specific platform - is like going to a farmer’s market to try and get a ready made meal. You’re at the wrong place, and it’s not meant for you if that’s what you’re looking for.

    Github is fairly user friendly, but it’s users are developers.

    ramjambamalam , (edited )

    I’m a developer and I hardly ever compile shit for my personal computer from source. I’d rather use a package manager, sure, but on Windows that’s by far the exception to the rule and if you want regular users to use your app, it needs to be a downloadable EXE.

    AVincentInSpace ,

    This. Building a random app from source and tracking down its many dependencies is a massive pain in the ass, doubly so on Windows where you have to jump through a ridiculous number of hoops just to install a C compiler.

    AProfessional ,

    This can be true and still irrelevant. It’s a free git repo host. Binaries are not its main purpose and random users complaints don’t matter.

    Microw ,

    But when consumers get in contact with Github - and they do get in contact at some point - it is to download executables, since a good number of consumer-facing software which isnt on an app store does simply release their executables on github. That twists people’s understanding of what the platform is.

    KeenFlame ,

    I don’t agree like I said. It’s a terrible interface (yes for a developer)

    Harbinger01173430 ,

    That’s on point. They should have a restaurant there at least. Smh. /S

    CanadaPlus ,

    I mean, there is at least one, it’s called the releases page. Maybe what you want to eat hasn’t been prepared there, though. That’s not because they don’t realise people can’t all cook, but because they haven’t done it yet.

    Harbinger01173430 ,

    Just put a link to the playstore or another store where normal human beings can get the software we are interested in trying or buying /s

    CanadaPlus , (edited )

    I’ll call my guy at Google and tell him to get right on that. I’m sure the my C++ code will run very well on Android. /s

    (It looks like this specific application was written in Python, so better, I guess)

    Harbinger01173430 ,

    Snap store or windows store then. Just put the link and not commands for us to compile and do that evil hacker stuff.

    potustheplant ,

    Not really, no. There’s a releases section where the developer can upload an exe for example but it’s really not easy to tell that that’s where you need to go if you just want to use the program/script, etc and you’re not a tech savvy person.

    So yeah, the UI could be improved on that front.

    johannesvanderwhales ,

    To strain your metaphor, I think what most people are looking for is a sign that says “FOOD COURT THIS WAY ->”

    If they just had a prominent link to “download latest stable version” in a consistent place, people wouldn’t be so confused (and devs wouldn’t have to do extra work to try and make it obvious).

    random9 ,

    The specific repo in question had (and still has) a USAGE section.

    And again, I have to point out that it is a python script, not an executable - it’s not standard, common or expected that python scripts be provided as a standalone executable. What makes you think even if there was a download link the guy would have gone down to find it?

    Metaphors aside, the guy who originally posted this literally went on a source code-hosting website that primarily aims at making source sharing easier, yelling that he didn’t want to see said source-code, only an executable for a product that literally does not compile to an executable, did not bother reading the instructions, but instead posted on a public forum, in full arrogance, insulting developers by calling them “SMELLY NERDS”.

    I’m astounded that there’s still people defending this guy like that’s a totally normal thing to do.

    If you only want to download an executable, GitHub is NOT the best place to look for that. Yes, many developers do provide compiled versions of their code, and yes, it is often very convenient that they do so - but it is neither the intended purpose of GitHub, nor is it required that developers provide one.

    johannesvanderwhales ,

    But a lot of developers do do exactly that. They not only distribute binaries on their github, it is the only place where they distribute binaries. Github should probably recognize that it is a common use case and accommodate it better.

    I’m also sure that a lot of people, like myself, took no notice of what specific package this user was complaining about, and are simply agreeing with the general sentiment that github could make things easier for non-technical users (which would, in turn, make it easier for developers since they would not need to field questions from users about how they download the software).

    Poem_for_your_sprog ,

    It’s more like going to a restaurant expecting them to make a recipe but instead they tell you to select this random list of things and then they cook it (like US Mongolian bbq places).

    If you know what you’re doing you get a good meal. If not? Ketchup on rice.

    Swedneck ,
    @Swedneck@discuss.tchncs.de avatar

    just go to the releases? yes it’s slightly hidden but that’s because github isn’t supposed to be a way to publish release files, it’s supposed to be a place to host and collaborate on source code.

    but so long as the developer handles releases correctly it’s just like 2 clicks to download an executable file…

    KeenFlame ,

    That’s just malicious compliance. They know they shouldn’t provide easy access because it may increase accountability. It’s silly

    Psythik ,

    Yeah seriously, I don’t understand why Github can’t just have a dedicated download button. Instead you have to dig through the Readme to find it and it’s in a different place every time.

  • All
  • Subscribed
  • Moderated
  • Favorites
  • [email protected]
  • random
  • lifeLocal
  • goranko
  • All magazines