I feel like being able to run things locally is really valuable as well. This has been one of my biggest issues with stuff like aws where it’s very difficult to have an offline local environment. You have things like localstack, but it’s not perfect.
I think you’re on to something. Given how software is generally built to the lowest standard possible, there are more and more exploits piling on as a result. The details of any modern tech stack is far beyond human comprehension. It’s just not possible to meaningfully audit all the code and all the different interactions within it. The whole thing is just a giant house of cards.
This is the curse of working in tech. As long as things are working smoothly from customer perspective then the pleas to spend the time to deal with the tech debt are ignored. Yet, when enough debt piles up and things start breaking then it’s the people who’ve been warning about the problems the whole time who get blamed.
There are plenty of greenfield projects out there.
yup, that thing’s a nightmare alright
When a project is developed for a while, a lot of initial design decisions can become invalidated as business needs evolve. New features have to be added, and in many cases they go against original assumptions about how the project would be used. At that point you have to start making hacks and kludging new features in. This creates a lot of special cases and surprising behaviors making overall project brittle and hard to maintain. That’s what’s known as tech debt.
In an ideal world you would have time to do proper redesign to accommodate new features, clean up problems as you go, and so on. However, in reality there’s usually just not enough time to do any of that so people just pile on features at the cost of overall development becoming harder and more error prone. This is a great discussion on the subject incidentally https://medium.com/@wm/the-generation-ship-model-of-software-development-5ef89a74854b
I made a script for grabbing reddit videos that’s been working pretty well for me, needs Babashka to run https://babashka.org/
#!/usr/bin/env bb
(require '[clojure.java.shell :refer [sh]]
'[clojure.string :as string]
'[cheshire.core :as cheshire]
'[org.httpkit.client :as http]
'[clojure.walk :as walk])
(defn http-get [url]
(-> @(http/get url {})
:body))
(defn find-base-url [data]
(let [results (atom [])]
(walk/postwalk
(fn [node]
(when (and (string? node) (.contains node "DASH"))
(swap! results conj node))
node)
data)
(some-> @results first (string/replace #"DASH_[0-9]+\.mp4" ""))))
(defn find-best-quality [names audio?]
(->> ((if audio? filter remove) #(.contains (.toLowerCase %) "audio") names)
(sort-by
(fn [n]
(-> n
(string/replace #"\.mp4" "")
(string/replace #"[a-zA-Z_]" "")
(Integer/parseInt))))
(last)))
(defn find-parts [base-url data]
(let [url (atom nil)
_ (walk/prewalk
(fn [node]
(when (and (map? node)
(contains? node :dash_url))
(reset! url (:dash_url node)))
node)
data)
xml (http-get @url)
parts (->> (re-seq #"<BaseURL>(.*?)</BaseURL>" xml) (map second))
best-video (find-best-quality parts false)
best-audio (find-best-quality parts true)]
[(str base-url best-video) (str base-url best-audio)]))
(defn filename [url]
(let [idx (inc (.lastIndexOf url "/"))]
(subs url idx)))
(defn tsname []
(str "video-" (System/currentTimeMillis) ".mp4"))
(let [data (-> (first *command-line-args*) (str ".json") http-get (cheshire/decode true))
base-url (find-base-url data)
[video-url audio-url] (find-parts base-url data)
video-file (filename video-url)
audio-file (filename audio-url)]
(sh "wget" video-url)
(sh "wget" audio-url)
(sh "ffmpeg" "-i" video-file "-stream_loop" "-1" "-i" audio-file "-shortest" "-map" "0:v:0" "-map" "1:a:0" "-y" (tsname))
(sh "rm" audio-file video-file))
Foam is pretty good https://foambubble.github.io/foam/
I find this tends to be more of a case in bigger companies where middle management becomes dominant.
O7
I’m not the one sealioning into your threads to harass you 🤡
Seems like my home is actually living rent free in that head of yours. 😂
I’m sure somebody will do a proper write up in a few days.
sorry, I haven’t looked if there’s a more detailed analysis yet
here’s a good overview of what happened https://www.thestack.technology/crowstrike-null-pointer-blamed-rca/
I find small services work fine for well defined and context free tasks. For example, say you have common tasks like handling user authorization, PDF generation, etc. Having a common service to handle that is a good idea. This sort of a service bus can be leveraged by different apps that can focus on their business logic, and leverage common functionality.
However, anything that’s part of a common workflow and has shared state is much better handled within a single application. Splitting things out into services creates a ton of overhead, and doesn’t actually address any problems since you have to be able to reason about the entirety of the workflow anyways. You end up having a much more difficult development process where you need a bunch of services running. Doing API calls means having to add endpoints, do authentication, etc. where within a single app you just do a function call. Debugging and tracing becomes a lot more difficult, and so on.
looks AI generated to me
you curse the past you for being so selfish
and like 4 of them aren’t birds but venomous spiders trying to disguise themselves and murder you