1. 6

    Going up to a 4000m peak, hope I don’t die in a glacier like the mountain guide that taught me climbing, as I just found out.

    1. 2

      Enjoy !

      1. 2

        Good luck, and dibs on your loot if worse comes to worst ;)

      1. 7

        Related question: where do you all store your images for serving a static site? I feel dirty every time I check another couple of Mb of images into my site’s git repo, but I haven’t found an elegant alternative

        1. 4

          Could use git-annexe or with some hosts git-lfs ?

          1. 1

            Mine are in the root of the repo on github, though there are two repos- the ‘dev’ repo and the actual public static site repo. This is normal for using github pages, with my website does. If I was actually paying for hosting I would probably find a better way to do it that didn’t involve checking the images into git at all.

          1. 40

            Graph database author here.

            It’s a very interesting question, and you’ve hit the nerve of it. The long and the short of it is that, much like lambda calculus can represent any program, relational algebra can represent pretty much all database queries. The question comes to what you optimize for.

            And so, unlike a table-centric view, which has benefits that are much better-known, what happens when you optimize for joins? Because that’s the graph game – deep joins. A graph is one huge set of join tables. So it’s really hard to shard a graph – this is connected to why NoSQL folks are always anti-join. It’s a pain in the rear. Similarly, it’s really easy to write a very expensive graph query, where starting from the other side is much cheaper.

            So then we get to the bigger point; in a world where joins are the norm, what the heck are your join tables, ie, schema? And it’s super fluid – which has benefits! – but it’s also very particular. That tends to be the first major hurdle against graph databases: defining your schema/predicates/edge-types and what they mean to you. You’re given a paintbrush and a blank canvas and have to define the world, one edge at a time. And $DEITY help you if you want to share a common schema with others! This is what schema.org is chasing, choosing some bare minimum.

            This is followed on by the fact that most of the standards in the graph database world are academic in nature. If I have one regret, it’s trying to follow the W3C with RDF. RDF is fine for import/export but it’s not a great data model. I wanted to standardize. I wanted to do right by the community. But, jeez, it’s just so abstract as to be useless. OWL goes another meta-level and defines properties about properties, and there’s simpler versions of OWL, and there’s RDFS/RDF* which is RDF about RDF and on and on…. it’s super cool that triples alone can represent pretty much anything, but that doesn’t help you much when you’re trying to be efficient or define your schema. Example: There’s a direct connection to the difference between a vector and a linked list – they both represent an ordered set. You can’t do a vector in triples, but you can do a linked list.

            I know I’m rambling a little, but now I’ll get to the turn; I still think there’s gold in them hills. The reason it’s not popular is all of the above and more, but it can be really useful! Especially when your problem is graph-shaped! I’ve implemented this a few times, and things like mapping, and social networks, and data networks, and document-origin-tracing – generally anything that would take a lot of joins – turn out swimmingly. Things that look more like tables (my example is always the back of a baseball card) look kind of nuts in the graph world, and things that look like a graph are wild in third normal form.

            So I think there’s a time and a place for graph databases. I just think that a combination of the above counter-arguments and the underlying needs are few enough that it’s under-explored and over-politicized. They work great in isolation, ironically enough.

            I’m happy to chat more, but that’s my quick take. Right tool, right job. It’s a shame about how that part of database theory has gone.

            1. 10

              Full disclosure: I work for Neo4j, a graph database vendor.

              Very well said.

              I’d add that most of the conversation in responses to OP assume “transactional” workloads. Graphs databases for analytic workloads are a whole other topic to explore. Folks should check out Stanford Prof. Jure Leskovec’s research in the space…and a lot of his lectures about graphs for machine learning are online.

              1. 2

                The long and the short of it is that, much like lambda calculus can represent any program, relational algebra can represent pretty much all database queries.

                When faced with an unknown data problem. I always choose RDBMS. It is a known quantity. I suspect I’d choose differently if I understand graph dbs better.

                I would love to see more articles here on practical use for graph dbs. In particular, I’d love to know if they are best deployed as the primary datastore for data or maybe just for the subset of data that your interested in query (e.g., perhaps just the products table in an ecommerce app).

                this is connected to why NoSQL folks are always anti-join. It’s a pain in the rear.

                Interesting. People use NoSQL a lot. They simply do joins in the application. Maybe that’s the practical solution when it comes to graph dbs? Then again, the point of graph solutions is generally to search for connections (joins). I’d love to hear more on this aspect.

                Thank you and the OP. I wish I can upvote this more. :)

                1. 1

                  Yeah, you’re entirely right that the joins happen in the application as a result. The reason they’re a pain is that they represent a coordination point — a sort of for-all versus for-each. Think of how you’d do a join in a traditional MapReduce setting; it requires a shuffle! That’s not a coincidence. A lot of the CALM stuff from Cal in ~2011 is related here and def. worth a read. That’s what I meant by a pain. It’s also why it’s really hard to shard a graph.

                  I think there’s something to having a graph be a secondary, problem-space-only engine, at least for OLTP. But again, lack of well-known engines, guides, schema, etc — it’d be lovely to have more resources and folks to explore various architectures further.

                2. 2

                  You’re given a paintbrush and a blank canvas and have to define the world, one edge at a time.

                  That’s such a great way to put it :)

                  Especially when your problem is graph-shaped!

                  I think we need collective experience and training in the industry to recognize problem shapes. We’re often barely able to precisely formulate our problems/requirements in the first place.

                  Which database have you authored?

                  1. 5

                    Cayley. Happy to see it already mentioned, though I handed off maintainership a long while ago.

                    (Burnout is real, kids)

                  2. 2

                    Thanks for Cayley! It’s refreshing to have such a direct and clean implementation of the concept. I too think there’s alot of promise in the area.

                    Since you’re here, I was wondering (no obligation!) if you had any ideas around enforcing schemas at the actual database level? As you mentioned, things can grow hairy really quick and once they are in such a state then the exploration to know what needs to be fixed and the requisite migraions are daunting.

                    Lately I’ve been playing with an idea for a graph db that is by default a triplestore under the hood. But with a (required!) schema that would look something commutative diagram-y. This would allow for discipline and validation of data, but also allow you to recognize multiple edge hops that are always there so for some things you could move them out of the triplestore into a quad- or 5- store to produce more compact disk representations to yield faster scans with fewer indexes and give the query planner a bit of extra choice. I haven’t thought it through too much, so I might be missing something or it might just not be worth it.

                    Anyway, restriction and grokkability of the underlying schema/ontology does seem like the fundamental limiter to me in alot of cases and was curious if as someone who has alot of experience in the area if you had thoughts on how to improve the situation?

                    1. 1

                      If you don’t mind me joining in, have you heard of https://age.incubator.apache.org/ ? I’m curious to hear your opinion about whether it can be an effective solution to this problem.

                      1. 1

                        If I have one regret, it’s trying to follow the W3C with RDF. RDF is fine for import/export but it’s not a great data model. […] it’s super cool that triples alone can represent pretty much anything, but that doesn’t help you much when you’re trying to be efficient

                        I’ve been using SPARQL a little recently to get things out of Wikidata, and it definitely seems to have pain points around that. I’m not sure at exactly what level the fault lies (SPARQL as a query language, Wikidata’s engine, etc.), but things that seem to me like they should be particularly easy in a graph DB, like “is there a path from ?x and ?y to a common node, and if yes, give me the path?” end up both hard to write and especially hard to write efficiently.

                        1. 2

                          This goes a bit to the one reply separating graphs-as-analytics and graphs-as-real-time-query-stores.

                          SPARQL is the standard (once again, looking at you W3C) but it’s trying to be SQL’s kid brother — and SQL has it’s own baggage IMO — instead of trying to build for the problem space. Say what you will about Cypher, Dude, at least it’s an ethos. Similarly Gremlin, which I liked because it’s easy to embed in other languages. I think there’s something in the spectrum between PathQuery (recently from a Google paper — I remember the early versions of it and some various arguments) and SPARQL that would target writing more functional paths — but that’s another ramble entirely :)

                      1. 23

                        Oh boy. It’s a meme amongst my friends at Google that half the software engineers want to build you a graph database because they are such a cool problem to solve (especially for people who have been drilled by algorithmic coding interview prep).

                        But in all seriousness:

                        1. I’ve seen them used on flashy data science projects, and the way the data was modeled conceptually was very hard to understand.
                        2. Related to that: people (including me) already have trouble with relational data modeling. Nobody wants to admit this, but there are so many choices and so many ways to create a bit of a mess! At least the relational model gives me guarantees, and document (JSON) stores give me maximum flexibility. Graph models feel like the worst of both worlds.
                        3. I don’t know of an established one that has the same reputation for maturity as for example Postgres. Neo4j maybe comes close.
                        4. They are just newer, so they lack those decades of common knowledge about performance characteristics, libraries, cloud offerings, integrations with other tools, etc.

                        So in short, they rarely warrant the additional complexity, and unless you really know what you’re doing, they are a risky bet. 99% of all (non-blob) data in the industry is just simple data with a clear schema and static relations, or unstructured data best modeled as JSON. And in both cases, data “in the enterprise” (which is the market TigerGraph wants) is usually a huge fucking mess, and I’m not sure a graph model would change that.

                        But I agree otherwise that graph models are really cool and appealing, and I would love to have a good use case for one.

                        1. 2

                          It’s a meme amongst my friends at Google that half the software engineers want to build you a graph database because they are such a cool problem to solve (especially for people who have been drilled by algorithmic coding interview prep).

                          It’s admittedly off-topic, but would you mind expanding on this? Do you see a lot of newer engineers who come from that leetcodish/algos background doing suboptimal things?

                        1. 1

                          The first thing I garnered from this article is that F# doesn’t have string interpolation.

                          1. 4

                            That would be a weird claim, you can literally just do $“Hello {name}”. Is there something else called string interpolation?

                            1. 1

                              The examples given do not use string interpolation, hence my takeaway.

                              1. 3

                                It looks like they didnt have it until last year:

                                https://github.com/dotnet/fsharp/pull/8907

                          1. 3

                            Really great writeup, thanks! I appreciated how each of the chosen items had clearly described why, and how the companies got to participate this year. This might be a good change.

                            Given how welcoming and supportive Haskell community is, I’m a bit surprised by the choice of repl.it, in light of recent bullying by their CEO. But again, given the timelines it is impossible to make a change.

                            1. 4

                              Thank you!

                              Yeah, the repl.it story was weird. Maybe it wasn’t super clear in the post, but repl.it was more something we used last year in a pinch, because VSCode LiveShare failed us. We probably won’t be using it this year, not because of the drama, but because we’re doing something slightly different for the mob programming session. Either way, it now has a bit of a sad feeling, especially since the platform seemed like such a positive environment before, and we were hoping it could be great to recommend to beginners.

                              edit: Added a little note that we will be a bit more hesitant to endorse repl.it for beginners. It’s still a very quick way to get started, but with ghcup, language server and all the other amazing ecosystem advances, it’s fairly easy to set up Haskell anyway.

                            1. 18

                              As the leading architect of a project, I asked some developers what they thought of my „leading“ there. One suggestion was that I could have been more confident.

                              I believe it is a human thing to long for confident leaders. Developers are no exception. The „strong opinions, weakly held“ meme is a symptom. It isn’t generally good or bad.

                              With the developers we concluded that I was roughly as confident as the circumstances permitted.

                              1. 5

                                Oh yeah, definitely. I’ll add to that that people also want leaders with prestige (or high status if you will).

                                There is one negative interpretation and a positive one that I oscillate between:

                                1. People are bad with uncertainty, so it’s not received well if leadership says “we will do X, and it has a 75% chance of success”. Or worse: “we want X, but it’s not a strongly held opinion, feel free to disagree”

                                2. Part of leadership’s job is to create clarity and it’s necessary to just say “we’re sure about this decision, let’s go”. That doesn’t necessarily imply skewing the facts. But it helps tremendously to not have decision-makers that seem confused and fluffy and all over the place. Having insecure managers is terrible and not helpful at all.

                              1. 6

                                If there was better support on public clouds, I’d be using NixOS all the time, this totally kills Ansible and other configuration management solutions.

                                1. 6

                                  There’s actually a terraform module that you can use to load configuration into NixOS machines. It’s been on my list to write about it, but I want to use it in production a bit more before I commit to writing about it.

                                  1. 4

                                    Which platforms does it work (well) on? I’m using this script to bootstrap Hetzner servers, and I wouldn’t mind something a bit less manually involved.

                                    1. 5

                                      I can’t find the comment. A nice lobster user pointed me at nix-infect and I use it with Terraform like this:

                                      resource "hcloud_server" "mon2" {
                                        image       = "debian-10"
                                        keep_disk   = true
                                        name        = "mon2"
                                        server_type = "cx21"
                                        ssh_keys    = local.hcloud_keys
                                        backups     = false
                                      
                                        user_data = <<EOF
                                        #cloud-config
                                        runcmd:
                                          - curl https://raw.githubusercontent.com/zimbatm/nixos-infect/3e9d452fa6060552a458879b66d8eea1334d93d2/nixos-infect | NIX_CHANNEL=nixos-20.09 bash 2>&1 | tee /tmp/infect.log
                                        EOF
                                      }
                                      
                                      1. 2

                                        I’ve only tested it with AWS, but as far as I understand it should work fine with Google Cloud and just about anything else as long as you have a NixOS system on it.

                                    2. 5

                                      Vultr lets you upload an ISO and install from that.

                                      Edit: They even have an existing nixos ISO you can use!

                                      1. 5

                                        I usually make my own NixOS ISO that will automatically install NixOS on the machine with something like this that I really need to write a blogpost on.

                                        1. 4

                                          I wonder how hard it would be to extend this solution to create a ZFS-based installation.

                                          I’d love to have a way of automatically installing NixOS onto one of OVH’s US-based servers. I’m thinking the best way to do this would be either PXE or a variation on this kexec-based solution.

                                          1. 3

                                            Not very! You’d just mess with the part that configures disks and mounting. I don’t use ZFS in my VMs however it should be easy to do. I would also suggest messing with how it defines the disk in question. I’m going to set something up with ZFS zraid1 groups for when I do installation on my homelab once I get the rack ordered in July (depending on how the research for my homelab goes, I currently have a spreadsheet of hardware I’d want (a bunch of used 2U servers) but I really need to wait until I move to be sure that the new place has space for it.

                                          2. 3

                                            Nice! Though as a NixOS beginner it might be easier to start out with an existing ISO. :D

                                            1. 4

                                              Granted, but being able to assimilate a new system in about 3 minutes is a fun party trick :D

                                              1. 3

                                                Heck yes! I look forward to your post about it!

                                                1. 1

                                                  And just like that, I had to build an ISO! Thanks for pointing me at your repo, it was very helpful! :D

                                          3. 2

                                            NixOS + packer gives you a decent story, and then you can set userdata to finish off your images on first boot. I wrote about it here: http://jackkelly.name/blog/archives/2020/08/30/building_and_importing_nixos_amis_on_ec2/

                                          1. 3
                                            • quarantine for 10 days, since I just returned from spending Christmas with my family in a different country than I live. Rule is we now have to completely isolate, I heard a case where somebody was fined 7000 bucks for going to the laundry room.
                                            • learn F# by doing exercism, reading 2 books on it, and maybe do a sideproject
                                            • play video games, cook, and do quality time with my better half
                                            1. 1

                                              exercise or exorcism? ;-)

                                              1. 1

                                                This: https://exercism.io/

                                                It’s pretty fun, not super hard.

                                              2. 1

                                                Just curious, Why F#?

                                                1. 3

                                                  New job coming up :)

                                                  If you want my employer’s rationale, it’s that they want a fun language, high robustness, but an existing rich ecosystem. Since I never got offered a Haskell job I’m very happy about this opportunity to use a functional language.

                                                  1. 1

                                                    Oh cool. Good luck on the new job :)

                                              1. 20

                                                I am so very, very tired. Work is killing me. I think this week will be the last week for this particular project, one way or another, so that’s good but…man…it’s been a long couple of…years, I guess.

                                                1. 6

                                                  Hang in there!

                                                  1. 1

                                                    Thank you.

                                                  2. 2

                                                    You don’t owe these people your sanity DimWit, and even if you did you’d be no good to them burned-out and wasted. Take some time off RSN, and maybe polish up the old CV as people start to get vaccinated and go back to work.

                                                    1. 2

                                                      +1. I know more than a few people who permanently lost substantial programming ability (eg not recovered after 4-5 years) from overdoing it.

                                                  1. 6

                                                    Reading Art of Postgres book & going on walks. I also want to finally extend my wiki parser.

                                                    1. 2

                                                      Am I the only one who is really turned off by this trend of tiering/bundling books? I get some of the reasons behind it, and logically it makes sense. But I just feel like it’s such a blatant money grab that I’m hesitant to buy at all, even at price levels I’d otherwise be fine with.

                                                      I certainly don’t begrudge an author wanting to make a living (or even just some side income) off of their work, but these almost universally have been for an ebook download or glued-together paperback, written by tech people with little to no publication history, opting out of using a publisher (which can be fine, but raises questions as to if/how well the book has been edited), and asking what I’d consider a price point for a well established textbook in a decent quality hardback binding.

                                                      1. 2

                                                        I’m a freelance writer, tech guy, and I’ve written several books. In addition, I’ve hung out with a lot of guys who do this bundling stuff.

                                                        What can I say? These folks are responding to market pressures. Same thing is happening in the fiction world: authors don’t write a book, they write a series of books. Then there’s a movie tie-in, an audiobook, and so forth.

                                                        I don’t understand your comment about the price point being what you’d expect for a nicely-bound textbook. Who the heck cares about book binding? I judge a book almost entirely by how easy it is to consume and how it makes me feel while reading it. I’ve never considered binding or hardback/softback to be important at all.

                                                        By the way, I don’t like this business model either. I decided with my books to charge a huge amount of money. If I sell only 50 a year or some such, then those 50 people will spend the time and I’ll have the bandwidth to help them out if they’re not getting any value from the book. The way I’ve got the economics figured, if you’re aiming to sell ten thousand books at $1.99 or something, you’re firmly on the treadmill to do all of that other stuff too. Some authors realize that and some don’t, but serious authors are aware that this is the way it works before they write the first page.

                                                        1. 1

                                                          As to binding:

                                                          1. If I bother with a hardcopy of a book it’s generally because I feel it’s something worth keeping around, and decent quality hardcovers are more durable over the long term.
                                                          2. I also just consider it a signal of some reasonable production quality. Perfect bound paperbacks have a pretty broad range of quality, from quite good to pages fall out within the first few times you open it. If you’re buying from an established publisher you generally have some sense upfront what to expect. With something self published, you don’t, so hardcover is a t least a signal that they didn’t just go with the cheapest option.
                                                          1. 1

                                                            I have no idea how many books I’ve bought over the years. Maybe a bit more than 2,000?

                                                            I can’t think of any time the binding meant anything to me, and I like physical books much more than e-books.

                                                            I guess that’s wrong. There have been a few times that the binding stood in stark contrast with the material inside. There are the books with the comic book font, soft-bound with big letters and pictures that contained some fantastically-deep thoughts and improved my life. There are the books that look as if they should be college textbooks, full of half-baked groupthink that I considered a waste of time.

                                                            And the blurbs. Wow. The book blurbs always over-promise.

                                                            Having said that, I do enjoy a nicely-put-together book now and then, but I enjoy it as a piece of art, not for being quality reading material. Oddly enough, the more I learned about books and publishing, the more I learned that most books are not bought to be read! Instead, they’re bought for the feeling that the purchaser thinks that owning the book will give them. Most, if not all, books, exist to sit on bookshelves, either in the owner’s house or in their cubicle.

                                                      2. 1

                                                        How do you like the book so far? Recommended?

                                                        1. 2

                                                          Just started it but I like how example driven it is.

                                                      1. 4

                                                        You make a really good case about why Hugo is failing it’s users here, but I’m concerned that you may one day be saying the same about Zola. One thing that comes to mind is missing features. For example, you might decide that you want to be able to add footnotes, but CommonMark doesn’t have that functionality. Because Zola has no extensibility, you’re SOL as far as I can tell. I also have a suspicion that people might start to use themes as a way to emulate plugins. Something like the difficulty of adding graph tags that you talked about could maybe be solved like that. But then it’s getting into the danger zone of finding documentation in multiple places and having to magically override things again. I think that KayodeLycaon was spot on in pointing out that everyone wants something slightly different. I hope Zola works out for you :)

                                                        1. 3

                                                          Yep, the concerns are valid. I don’t have a really good reply to that, but I hope this works out. Ultimately if this required another refactor then I’ll bite the bullet to make my own SSG. Not thinking too much about that situation now, though :)

                                                          1. 3

                                                            I also have a suspicion that people might start to use themes as a way to emulate plugins.

                                                            You said something I had trouble articulating for a long time. The problem with a Turing-complete template processor as a sole extensibility mechanism is that presentation and logic are no longer orthogonal.

                                                            That is why I chose not to use either Zola or Hugo for a refresh of my own site setup, but went for writing an SSG that is statically linked but extensible with Lua plugins via an embedded interpreter. </shamelessPlug> ;)

                                                            Nothing against Zola or its users though, it’s a good project.

                                                            1. 2

                                                              Just as a small note, Zola totally does footnotes. I think there might be a page that lists which extensions pulldown-cmark enables out of the box. But your main point stands with or without this example :)

                                                              1. 1

                                                                As a Zola user who used several other solutions before, I’m 100% sure I’ll get tired of it. I already had to hack around limitations (or my lack of knowledge) while my blog is super simple. But it’s all about gaining some time.

                                                                I know that at some point I’ll have to do the switch to either another existing system or to one I’ll make. But I don’t spend time on that now and having a blog whose content is only in markdown and related images will make it easy if I decide to keep the content.

                                                                Zola is temporary but it’s easy to set up, and should be easy enough to replace when time has come.

                                                              1. 7

                                                                We have considered OCaml but went for F# instead. I could not be happier. Great libraries, good tooling, in 2020 F# is a first class citizen in the cloud thanks to C# and .NET Core. You can develop on Linux, Windows, MacOS and without modification it works. Compilation times are great. Unless you want to deal with the low level nature and the C++ influence in Rust F# is a much more logical step to move from OCaml. There is dotnet fsi for REPL too. I really like OCaml, it was my first ML language but it is not great for cloud computing or anything where you do not want to write a ton of code that has nothing to do with your business problem, because there aren’t many libraries. F# has access to C# libraries and it is relatively easy to write a thin wrapper that convert nulls to Nones, so you are null safe or C# style functions to ML style functions so you can use |> or <| etc. Out frontend is in Elm and we follow elm-format style in F# (manually though) so our codebases look very similar.

                                                                1. 3

                                                                  What’s your problem domain? I will use F# at a new job, and I would love to hear which libraries & frameworks you love, and which resources are good for learning.

                                                                  For context, I already know Elm very well, and Haskell at an intermediate level. I also plan to work through “domain modelling made functional”.

                                                                  1. 3

                                                                    SAAS, energy, finance.

                                                                    I could collect some of the libraries for you.

                                                                    1. 1

                                                                      That would be awesome! I’m especially interested in what stands out, or strong opinions you have derived from your experience. I’m sure I can find the very basic stuff with a bit of research :)

                                                                    2. 1

                                                                      I will use F# at a new job

                                                                      Mind sharing company’s name? Curious about places using functional programming languages.

                                                                      1. 1

                                                                        Sure, it’s called valora digital. It’s in the retail space, based in Switzerland. We’ll basically build self-serve stores and a bunch of ecommerce.

                                                                    3. 2

                                                                      My sole issue with F# is that dotnet has no support for the ppc64le architecture yet.

                                                                      There is some progress on this front: [1] [2] [3]

                                                                      1. 1

                                                                        You can develop on Linux, Windows, MacOS and without modification it works.

                                                                        AFAIK, F# programs need the .NET runtime being installed. How do you enforce this on the client side? Or is it possible to bundle the runtime with your program?

                                                                        1. 4

                                                                          Publishing your app as self-contained produces an application that includes the .NET Core runtime and libraries, and your application and its dependencies. Users of the application can run it on a machine that doesn’t have the .NET Core runtime installed.

                                                                          https://docs.microsoft.com/en-us/dotnet/core/deploying/

                                                                          1. 3

                                                                            Thanks. Do you know much MBs this adds to an “hello world” application?

                                                                            1. 5

                                                                              A lot, in my experience. A simple program that uses nothing but the standard library will output a binary of about 90mb.

                                                                              1. 1

                                                                                Do you know if there are any efforts in the pipeline to modularize .NET, like JDK 9 did?

                                                                          2. 0

                                                                            And? How is this related to my comment about development?

                                                                          3. 1

                                                                            How good is F# for writing cross-platform GUI apps?

                                                                            1. 2

                                                                              fairly lousy in my experience. i try it every year or two, because it really does sound like a great language for it, and invariably end up giving up after a few days due to running into issues with linux as my development environment. that said, my last attempt was in 2018 so things might be better now; i would personally like to see a working, reasonably-sized gui app somewhere on github that i could use as a reference before trying again.

                                                                              1. 1

                                                                                Good question, I have no idea.

                                                                                1. 1

                                                                                  It’s okayish. Worst case you can use C# for UI which has better tooling. Check out Avalonia which supports Windows, MacOS, and Linux, with Android and iOS coming soon.

                                                                              1. 2

                                                                                I still feel like I’m stuck in mid 201X regarding my frontend skills. To be honest I just don’t want to invest the amount of time it’ll take to get fluent in a “modern” stack, so some basic vue/react with bootstrap it is. And the moment you’ve started doing something for frontend, it’ll already feel like you’re outdated and behind (svelte)..

                                                                                1. 7

                                                                                  Dude, don’t worry about it, that stack is 100% fine, and not outdated. Getting sucked into FOMO about JS frameworks and tooling is a total trap. If you’re not a full-time frontend engineer, use whatever gets the job done.

                                                                                  Once you feel like learning something new would be a fun way to spend two weekends, go for it.

                                                                                  Tailwind is awesome for example, but there’s not that much to it. It’s just some nice atomic utility classes, but that means you build all the component styling yourself (buttons, cards, …) instead of using the ready-made bootstrap abstraction.

                                                                                  1. 2

                                                                                    Wow didn’t fully read your comment and just now noticed we both mentioned tailwind! I’m so addicted to it!

                                                                                    1. 3

                                                                                      I agree, it somehow hits exactly the right level of abstraction. For me it nudges me into some possibilities I would never have tried with bootstrap or pure CSS.

                                                                                      For example last year I had some really opinionated vision for a travel planner UI that would have been completely boring and bad with just prefabricated components: https://gllvr.com. I’m sure my implementation is still kind of rubbish for a lot of use cases, but I couldn’t even imagine doing it with bootstrap/bulma, etc.

                                                                                      1. 3

                                                                                        I really like the UI on that travel planner.

                                                                                        I’m sure it has more to do with the way my background has warped my mind than with anything inherent to either approach, but I found it easier to build buttons/cards/etc with these utilities than I did to get the ready-made ones to look/work the way I wanted them to.

                                                                                        I would have found it devilishly hard to get that striped component in your planner (where you click on the left side to type in where you’ll be sleeping or click on the right side to copy the previous night’s location) to be anything like what you made in bootstrap. I do suspect there are people out there who wouldn’t find it so, though.

                                                                                        1. 2

                                                                                          That’s a great UI!

                                                                                          I agree, tailwind makes me more likely to experiment and try new things too.

                                                                                          With bootstrap you’re too often locked in to how a certain component works, and it’s really hard to change the way components behave.

                                                                                          It has given me a second wind with frontend stuff, and I’m actually enjoying making websites again!

                                                                                    2. 3

                                                                                      Vue, React, Angular, Svelte, and most frontend frameworks since React and Angular 2, are modern UI component frameworks. Once you understand components deeply, the learning curve for any of the others is much shorter. Svelte may be well designed and easier for beginners than most, but part of why people report picking it up in an afternoon is that they already understand components.

                                                                                      The details differ between frameworks, especially with the direction React has gone with hooks, but despite the proliferation of frameworks in recent years, there’s been a substantial convergence on components since the days of Backbone, Angular 1, jQuery, Knockout, and all of the other not-quite-component frameworks. They may have been fewer in number back then, but the fundamentals varied widely across tools. The situation today is much more approachable despite the memes.

                                                                                      1. 1

                                                                                        I find react to be quite horrible if you want to use or do stuff that doesn’t exist for it as a lib. (Also don’t get me started on the amount of packages and reported CVEs in a hello world..)

                                                                                        1. 1

                                                                                          Really? I generally don’t use any React-specific libraries, and React itself I’m sure has few or no dependencies (I use Preact most of the time, so I’m not sure the state of React). Are you talking about create-react-app? I’ve never used it myself, it seems totally unnecessary.

                                                                                      2. 2

                                                                                        I’ve been using bootstrap for years, and I loved it but some things just didn’t feel quite right.

                                                                                        I’ve recently switched to tailwindcss and it has made me so happy. Doing anything is just better and feels more fun. Also you don’t end up with loads of custom CSS.

                                                                                        If you switch away from bootstrap I can almost guarantee your life will be better :)

                                                                                        This is the post that finally changed my mind:

                                                                                        https://adamwathan.me/css-utility-classes-and-separation-of-concerns/

                                                                                        EDIT: tailwind is really easy to learn if you’re worried about that. Also, the documentation is amazing

                                                                                        1. 1

                                                                                          That post, plus about 20 minutes with this tutorial persuaded me that I was interested in giving tailwind a real try.

                                                                                          I found that having one workspace with two browsers tiled next to each other, one with my site and one with the tailwind docs, and a second with the code open, made it really fast and enjoyable to try things out. The search on the tailwind documentation is especially good, and the live updates that come with svelte running in dev mode are very snappy.

                                                                                          It’s actually pretty high on my list to dig in and see just how those live updates work. There are a couple of spots in my own code where I could use a similar mechanism to very good effect, assuming it’s not leaning on some heavy mechanism that gets shaken out in the production builds.

                                                                                        2. 2

                                                                                          I was stuck with jinja + a little jquery for my front end. So state of the art 2008? It was starting to slow my ability to explore some ideas in a way I wanted to share. I don’t think I’d have been motivated to spend 30 hours exploring this for a couple of weeks if I had a good grasp of vue and bootstrap.

                                                                                          The feedback from changing something on the server in dev mode to seeing it in the client is so much faster than it was when I was writing jinja templates and sending them in response to form submissions. That’s one of the major improvements of moving for me, and I think vue/react/bootstrap would’ve gotten me that also.

                                                                                          This stack just lined up with my mental model a little better, which meant a lot as I was trying to learn a pile of “new” all at once. Tailwind’s utility structure combined with the way styles are scoped by default in svelte made it easier for me to think about my UI layout than it ever has been for web stuff.

                                                                                        1. 6

                                                                                          Thanks for the article, lots of useful info. Have you looked at the Digital Ocean managed instance, and how it compares?

                                                                                          1. 1

                                                                                            Across what axes? Price? Features? Ease of administration? Just curious.

                                                                                          1. 2

                                                                                            I’ve been looking for a GA alternative for a while. But here is somethiing that I don’t get, so please help me out: Why not just count at the request layer? All I want to know is some total number of visits, and which page was visited. Maybe knowing total vs unique visitors would be nice too.

                                                                                            I know Netlify has this as an additional service, but where are the easy to install solutions for self-hosted sites? Or is there some downside I am not seeing?

                                                                                            1. 3

                                                                                              This was a great read! I’ve been looking at postgraphile but wanted something that was just regular rest. Now I know there is postgrest!

                                                                                              But I have been thinking more and more about how critical knowing databases is for being able to build new things, especially when you don’t have the money or the people to build abstractions around databases. But, like mentioned in the article, it does require time, and that is precious.

                                                                                              1. 5

                                                                                                There are a few tools like PostgREST out there. Supabase, Hasura, XGeneCloud, Prisma. You can also generate a REST API from OpenAPI specs with OpenAPI Generator. I’ve been working on a similar tool that can generate a REST API and admin UI from Postgres or MySQL.

                                                                                                1. 2

                                                                                                  Do any of these tools intercept the query and rewrite it, possibly joining across multiple SQL backends? Of those that do, do they do query push down?

                                                                                                  1. 2

                                                                                                    Stardog’s virtual graphs can do that.

                                                                                                    1. 2

                                                                                                      Not that I’m aware of.

                                                                                                      1. 2

                                                                                                        I think Hasura can stitch GraphQL queries. Or I guess they call it remote joins: https://hasura.io/blog/remote-joins-a-graphql-api-to-join-database-and-other-data-sources/

                                                                                                      2. 1

                                                                                                        FWIW I’m writing out the Part 2 of this blog post where I ship actual code on AWS (hopefully for publishing tomorrow, repo here: https://github.com/yingw787/postgres_as_app), and it’s shockingly easy to get started with PostgREST. It’s tar one binary, copy in a conf file, and go. The robustness of Haskell with the simplicity of Go. All runtime conf options, like pagination, are handled via HTTP headers. It’s definitely a tool I want to incorporate into my future apps, because it’s stupid simple and transparent.

                                                                                                    1. 3

                                                                                                      (It is good to be self-employed, with a good amount of free time to work on open source).

                                                                                                      1. 2

                                                                                                        Just checked out neuron, really cool! I’m hoping to find some time soon to give zettelkasten a serious try.

                                                                                                      1. 3

                                                                                                        Oh man, that fricking Stéphane Picq music is so good. I remember I tried to dig out as much of his stuff as I could find a couple of years back, and being very sad that he hasn’t produced much more since the 90s. The KGB and MegaRace soundtracks are also insanely good.

                                                                                                        1. 2

                                                                                                          Absolutely. The things Picq did with Ad-lib gold are impenetrable to mere mortals like us.

                                                                                                        1. 4

                                                                                                          Hi, this is really great, thanks for the initiative!

                                                                                                          We have ZuriHac coming up, and I could imagine this being a really nice as a Workshop. Could you imagine running an online session in some form?

                                                                                                          Also, Niklas was recently working on making the async docs a lot clearer (https://nh2.me/async-docs/Control-Concurrent-Async.html), maybe it’s also worth putting the two of you in touch (if you don’t already know each other)

                                                                                                          1. 1

                                                                                                            Hi, thank you very much!

                                                                                                            Could you imagine running an online session in some form?

                                                                                                            Honestly I have no bloody idea. :) Documentation writing is not something that would fit the “Hackathon format” very well, because we need time and coordination with the stakeholders, rework the wording, etc.
                                                                                                            Also I voluntarily limited the scope of this initiative so we could bootstrap newcomers in an efficient way. as the tracking issue states:

                                                                                                            You are encouraged to tackle a module if you think you can add something missing, be it examples, unmentioned edge-cases, or a direct risk of runtime error (through the use of error/errorWithoutStacktrace/throw/undefined, etc)

                                                                                                            And in the context of writing / correcting documentation, I don’t believe the “hack and iterate fast” model adopted by Hackathons is appropriate. This is precisely the type of task where we ponder the meaning of words and how to optimise the words/information ratio (“writing long prose that gets your paper accepted” versus “get to the point, make people use your stuff”).


                                                                                                            maybe it’s also worth putting the two of you in touch (if you don’t already know each other)

                                                                                                            I don’t think we’ve ever spoke with each-other, but it would be nice, yes.

                                                                                                            Given that the ongoing work only targets base, a tracking issue on the GHC Gitlab is plenty enough in terms of features (especially back-linking).

                                                                                                            We will surely need another platform if we are to tackle the large Haskell libraries that live outside of GHC (vector, aeson, async, bytestring, text, etc…).
                                                                                                            And I don’t even want to think about coordinating efforts for the larger ecosystem yet because that seems like a Sisyphean task!

                                                                                                            1. 1

                                                                                                              Oh yeah, that makes sense. For what it’s worth, we had a documentation session two years ago, that was led by Oskar Wickström. It seems to have worked out quite well, but as you say, it wasn’t careful coordination with all the stakeholders, it was more filling some obvious gaps in libraries where it’s lower risk to just send a PR and get incremental changes merged. The newbies also liked it as an excuse to deep-dive into a library, wwhile having a mentor to support them.

                                                                                                              So I think you’re right about docs in base needing a more careful approach. You’re still very welcome however to come hunt for volunteers at ZuriHac!

                                                                                                              And I don’t even want to think about coordinating efforts for the larger ecosystem yet because that seems like a Sisyphean task!

                                                                                                              True, and it makes me happy to see that goods docs are becoming a lot more valued in a lot of communities, and projects with exceptional docs are nowadays geting the appropriate amount of praise.

                                                                                                              1. 2

                                                                                                                You’re still very welcome however to come hunt for volunteers at ZuriHac!

                                                                                                                Thank you very much 🙏 I’ll make myself discreet. ;)

                                                                                                                it makes me happy to see that goods docs are becoming a lot more valued in a lot of communities

                                                                                                                I was directly impacted by how good was the Elixir documentation, and the stark contrast with the state of the Erlang docs, when I started programming. Clearly documentation is less viewed as a luxury and more as a part of what makes a language.