• 0 Posts
  • 338 Comments
Joined 2 years ago
cake
Cake day: June 30th, 2023

help-circle





  • At scale, it can be considerably cheaper.
    Limit data access according to security policy and some basic filtering from the request. It’s not a huge amount of processing for an API server to do.
    Web pages, desktop app, mobile apps, other servers can all use it to access the data.
    Template rendering is then done on the client side. So processing for that is done on the client, saving a lot of compute cost - meaning the servers can respond to more API requests.
    Data transferred is lower as well. A template that gets populated by the client using data from an API request will be overall smaller than the full template rendered server side.
    The client apps can then be entirely managed separately from the server apps, without having to be tightly integrated. This allows the front end team to do what they want, and the backend team do what they want - as long as the API endpoints are correct.

    For most things, an SPA isn’t required or even desirable (which is why server side rendering of SPAs is a thing).
    But SPAs should give a better experience to users, and can be easier to build.



  • Default config is defined in the firmware. It can’t be deleted or changed (well, easily. I think there is a reseller option to have a custom default config).
    The “no default config” means the default config will not be applied after the reset.
    If you reset it again without checking “no default config”, then the default config will be applied.

    “No default config” is very useful for applying your own config script. It gives you a blank canvas, making scripting a lot easier!

    I have my “config.rsc” file that has the required configuration. And I have a “reset.auto.rsc” file that only has the command to reset the mikrotik with no defaults and to run the “config.rsc” script after reset.
    “filename.auto.rsc” will be executed as soon as it gets FTPd (it’s a feature of mikrotik).
    I use a bash script that FTPs the config.rsc file to the mikrotik, then the reset.auto.rsc file.
    Makes it trivial to tweak the config then apply it, and I get all the config for the devices in easy to edit/diff script files.


  • To me, something like visual studio is an ide.
    Out of the box it can run and debug c# programs. I can step through line by line, I can add breakpoints, I can watch variables.
    It is a great experience for developing c#.

    To get vscode to do that requires a lot of configuration.
    Sometimes all that config is done by only 1 plugin.
    The fact that there are really well made plugins for so many different languages and frameworks is vscodes power. I don’t just get a js/ts/node/deno ide, but it can be super tailored to Vue/react/svelte/quasar/nuxt/next/whatever.
    All while in a familiar editor, and without having to install another program.

    That’s what I mean by vscode not being an IDE.
    Vscode has the ability to be an IDE, but it’s 3rd parties that actually do the work to achieve this.






  • If you want remote access to your home services behind a cgnat, the best way is with a VPS. This gives you a static public IP that your services connect to, and that you can connect to when out and about.

    If you don’t want the traffic decrypted on the VPS, then tunnel the VPN back to your homelab.
    As the VPN already is encrypted, there is no point in re-encrypting it between the vps and homelab.

    Rathole https://github.com/rapiz1/rathole is one of the easiest I have found for this.
    Or you can do things with ssh tunnels.

    For VPN, wireguard is very good



  • Like I said, impressive work.
    Converting science to shaders is an art.

    I guess your coding standards follows scientific standards.
    And I guess it depends on your audience.

    I guess the perspective is that science/maths formulae are meant to be manipulated. So writing out descriptive names is only done at the most basic levels of understanding. Most of the workings are done on paper/boards, or manually. Extra letters are not efficient.
    Whereas programming is meant to be understood and adapted. So self-describing code is key! Most workings are done within an IDE with autocomplete. Extra letters don’t matter.

    If you are targeting the science community with this, a paragraph about adapting science to programming will be important.
    Scientists will find your article and go “well yeh, that’s K2”. But explaining why these aren’t named as such will hopefully help them to produce useful code in the future.

    The fun of code that spans disciplines!

    Edit;
    Om a side note, I am terrible at coding standards when I’m working with a new paradigm.
    First is “make it work”, after which it’s pretty much done.
    Never mind consistent naming conventions and all that.
    The fact you wrote up an article on it is amazing!
    Good work!


  • Interesting.
    I love creative applications of shaders. They are very powerful.

    In my opinion only, but willing to discuss.
    And I’ll preface this by saying if I tried to publish a scientific paper and my formulas used a bunch of made up symbols that are not standardised, I imagine it would get a lot of corrections on peer review.

    So, from a programming perspective, don’t use abbreviations.
    Basically working on naming.

    I can read that TAU is the diffusion rate due to a comment. Then I dig further into the code as I am trying to figure something out and I encounter tau. Now I have to remember that tau is explained by a comment, instead of the name of the variable. Why not call it diffusionRate then have a comment indicating this is TAU.
    A science person will be able to find the comment indicating where it is initialised and be able to adjust it without having to know programming. A programming person will be able to understand what it does without having to know science things.
    Programming is essentially writing code to be read.
    It’s written once and read many times.

    Similar with the K variables.
    K is reactionRate.
    K1 is reactionKillRate.
    K2 is reactionFeedRate.
    Scientists know what these are. But I would only expect to see variables like this in some bizarre nested loop, and I would consider it a code smell.

    The inboundFlow “line” has a lot going on with little explanation (except in comments). The calculation is already happening and going into memory. Why not name that memory with variables?
    Things like adjacentFlow and diagonalFlow to essentially name those respective lines.
    Could even have adjacentFlowWeight and diagonalFlowWeight for some of those “magic numbers”.
    Comments shouldn’t explain what is happening, but why it’s happening.
    The code already explains what is happening.
    So a comment indicating what the overall formula is, how that relates to the used variables, then the variables essentially explain what each part of it is.
    If a line is getting too complicated to be easily understood, then parting it out into further variables (or even function call, tho not applicable here) will help.
    I would put in an editted example, however I’m on mobile and I know I will mess up the formatting.

    A final style note, however I’m not certain on this.
    I presume 1. and 1.0 are identical representing the float value of 1.0?
    In which case, standardise to 1.0
    There are instances of 2.0 and 2.
    While both are functionally identical, something like (1.0, 1.0, 1.0) is going to be easier to spot that these are floats, as well as spotting typos/commas - when compared to (1., 1., 1.,).
    IMO, at least