made with Findka

Haven't tried it--but I'm glad you linked it. I had heard about EntityDB, part of Keechma, a while ago, I think on ClojureVerse. I hadn't been able to find it from searching though.

In looking through the rest of the docs, Keechma looks really interesting to me. I'll probably take a deeper look as I work on the guide.

Just posted Landing Pages With Clojure And Firebase (https://jacobobryant.com/post/2020/landing-pages/)

Also lots of UX improvements to Findka and the beginnings of a recommender system. Now would be a great time to try it out ;) https://findka.com

I've also made some updates to the parent article (posted here last week).

You don't have to deal with record labels for one thing.

I had a conversation once with someone who was doing a music startup for a while. He said his startup pivoted to podcasts (specifically for executives/business people) because it was easier to make money.

It is a little subtle. For small things they're isn't much difference, but I like that Rum is decomplected from ratoms, and rum's mixins felt more straightforward to me than using form-2 and form-3 components in reagent. I felt like I had a complete understanding of rum after going through just the readme, whereas I remember having to search in lots of different places to find various documentation for reagent. Part of the reason for that is probably because the reagent documentation has to cover ratoms. As for Vue, I haven't used it myself, so I don't know if "mixin" means the same thing in that context or not.

I just used the official docs myself (lots of time staring at the query reference), but I've seen people recommend learndatalogtoday.org

That seems a little off to me--I acknowledge that crux and Datomic are quite different, but they have a lot more in common with each other then they do with rdbms etc

@DanTheMercer @KialoHQ Woah, Kialo looks super cool! Never heard of it before.

Yeah I like it a lot! It's funny; when I first saw it a while ago, I dismissed it without much thought because it used macros to define components and I thought mixins looked weird. ("In Reagent, components are just functions--so simple!"). I changed my mind after actually going through the readme.

I prefer rum over reagent as it's simpler and easier to grok IMO. Also for re-frame, I think the core concepts can be taught with less surface area--derivatives for derived values and probably a roll-your-own event-handler for effect isolation. (I'm planning to take a closer look at citrus also). Then re-frame can be mentioned for additional learning.

Ring: definitely. Compojure: planning to use reitit; I like the data-driven routes a bit more. Datomic: I am leaning more away from crux now that I think about it more (other thread).

Thanks for the offer! I think the most helpful thing would be code review. I'm planning to develop a full-featured app along with the guide; each section will start out with a link to a particular branch of the app on github, so readers can jump in to the source if they like and use the article for support. I can message you periodically when I push code if you don't mind.

It's possible that my thoughts on the importance of code/data locality are colored by my work on music recommendation. The algorithm I devised uses quite a few queries and needs to run fast since it runs during the user's listening session, and the locality did make a difference there. You make a good point; it probably doesn't matter for most applications. I'll test it out when I get to that section. Using plain datomic cloud would make things a lot easier for sure.

Although bitemporality isn't likely to be needed much in solo projects, Crux is still designed to be a general-purpose DB, no? In any case, even if I don't go with plain Datomic Cloud, I was thinking last night that I'd probably prefer Datomic On-Prem over Crux anyway as it's more featureful and the no-free-updates-after-12-months thing probably won't be an issue in most cases.

Got it. Yeah, I'm going for a large (broad, really) scope since I think that's the main thing that's missing - a roadmap of how all the pieces fit together. To compensate I'll be writing the whole thing breadth-first rather than depth-first.

Trying to understand your suggestion better--are you just saying you think the scope is too large? And better to focus on a slice of the outline I've given?

In general I'm intending for this to be fairly high-level. So I'll be giving direction on what things to learn and how to put them together, but for actually learning the individual things, I'll probably just give links to existing resources most of the time.

Ideally, by the end of the guide, readers are then familiar enough with the ecosystem that they can continue learning + mix and match libraries as they like without much guidance.

This is basically just an outline of a course I'm planning to write. I think one of the main downsides of Clojure is just the amount of time it takes to get up to speed with it. So I'm trying to help out with that.

Yeah, I'll throw a mention in. That part was mainly a joke, though I am fairly set on vim myself.

thanks for letting me know, I'll fix that.

I interrupt your regularly scheduled tweets to bring you this recording of me playing The Older I Get by Skillet

https://jacobobryant.com/watch/v/0_92Ok_0CxQ/
Want a distraction-free Twitter feed? http://findka.com
Also works with Reddit, HN, Youtube (and you can manually enter RSS feeds for anything else)
@paulg My favorite one: embrace, extend, extinguish

Sorry about that. I did read the rules before posting, a few times--could you clarify how this is a violation? Are you worried that I'm shilling? Or is it a violation simply because it links to a service targeted at founders (so it is technically advertising, although I'm not affiliated)? If the latter, I'd recommend clarifying that in the rules.

I'm thinking about trying it out, but ~$500 up front feels a little to steep just for joining a club. On one hand maybe it helps as a weeder, but it also reminds me of honor societies in college (I.e. not much real value provided, just trying to make you feel prestigious so you give them money).

So if anyone has actually joined it, I'd love to hear what you thought about it (and some background info about you + your startup for context).

The only review piece I've been able to find on it so far is this article: https://medium.com/@MarcHoag/why-every-startup-founder-needs-to-join-foundersnetwork-now-4fb708d45264

gnoosic.com is pretty good also.

I worked full-time on algorithmic music recommendation for about 5 months last year[1] (started working on it as a side project in 2016). I've always thought that, ultimately, an algorithm should be the best--after all, you can have it use human-curated data as an input. While my algorithm isn't amazing, it works far better for me than Spotify or Pandora ever did, so I've been using it myself regularly. I pivoted to a general-purpose recommender system idea[2] last november, but I'd love to go back and work more on music later on.

(Music was just too hard to get started in--I spent far more time trying to find a way to integrate my algorithm into playback sources than actually working on the algorithm)

[1] https://lagukan.com

[2] https://findka.com

Weeklyish update on Findka: 10 integrations down, 1 recommender system to go
https://jacobobryant.com/blog/2020-01-27/
Example of what the result of that looks like: http://jacobobryant.com
Integrations for Findka are finally done (for now). There are integrations for Pocket, Spotify, Youtube, Reddit, http://Last.fm, Twitter, Hacker News, Github, Goodreads and RSS. Pocket is a catchall: you can use it for non-article items by setting a tag (e.g. "podcast")
A somewhat sad reality I've been thinking about: if all your code is clean, you're moving too slowly.
Perks of marrying an Asian: "This is too sweet for me, you can have it"

yeah, it never hurts to just give it a try. I think it depends on how much you like to roll your own stuff too. e.g. before I tried fulcro, I didn't even like re-frame that much--I preferred plain reagent. I did like a lot of the ideas behind fulcro, I just didn't need all of it... and the parts I did need, I felt like I could re-implement them (while tailoring the implementation to my specific project) in much less time than it would've taken me to do it with fulcro.

little side note: all content imported with Findka is published in Atom/RSS (e.g. https://jacobobryant.com/feed/). Fairly soon I'll start working on the recommendation/content discovery portion of Findka, which will also integrate with RSS. No need to wait around for @bluesky ;)
Just finished an integration for... twitter!
https://jacobobryant.com/posts/

I haven't, mainly because of this:

"The whole point of Fulcro is to manage the complexity of large apps, not to make small apps simple/easy. So there's a threshold of app size/complexity below which it doesn't make sense to use Fulcro. At the very least, I simply misjudged where that threshold is."

So to reiterate, I'm not saying Fulcro is bad, rather that there's overhead, and the overhead turned out to not be worth it on my current project. My experiences don't give much insight about how fulcro fairs at keeping large projects sane, which is Tony's focus.

@AdriaanvRossum @tiktok_us It's all good! Thanks for building simpleanalytics, I'm looking forward to trying it out :)
@AdriaanvRossum @tiktok_us (I can't even sign up with gmail, so I'm guessing something else is wrong and it's just a bad error message)
@AdriaanvRossum @tiktok_us ;)
(This is from an incognito chrome window)
Findka now auto-embeds your youtube videos, e.g. https://jennyobryant.com/watch/v/WF66-5TOsKo/
@beders s/you linked/you replied to/
@beders For now, the closest stable approach I can think of is what I described in the post you linked, and for experimentation, factUI I think is a better path than datascript. See halgari's comments on https://www.reddit.com/r/Clojure/comments/6rncgw/arachneframeworkfactui/

If factui had pull expressions I'd be extremely interested
@beders Datsync is alpha/experimental. Interesting as a research project but I wouldn't use it in production. When I tried building an app with Web After Tomorrow architecture, I ended up rolling my own sync (https://jacobobryant.com/post/2019/ion/)
@beders Posh uses heuristics for refreshing queries, so it can be unreliable (I ran into that). AFAICT only good way now to drive a UI with datascript is to either refresh all the queries on every change (not scalable) or set up a tx listener and refresh queries by hand (a bit low level)
Have to wait for Youtube's stamp of approval though; for now, the integration is limited to the first 100 users (and there's a warning screen in the oauth flow).
It's actually kind of cool to see the chronology of my essays and videos together (though a few of the guitar covers do make me cringe a little :) )
Just finished a youtube integration for findka. so on https://jacobobryant.com you can now see videos I've uploaded on the left and videos I've liked on the right, mixed in with all the other content.

https://jacobobryant.com/blog/2020-01-13/

This started out as a generic blog post but (unsurprisingly) ended up with a lot about Clojure (the two middle sections), so here it is.

Some misc work updates, including
- (no longer) using airtable as a backend
- some new architecture for Findka
- workflow improvements

https://jacobobryant.com/blog/2020-01-13/
Released some updates for http://findka.com today. Still pretty toyish, but should be easy to use now. Next up is adding more integrations + building the recommender system (the fun part).

Thanks for the repost :)

I should rewrite the readme - when I first created this repo, I was abstracting a bunch of code from the framework thingy I described here. Since then I've launched two other apps, but not really using the same approach (from the trident.web ns).

I do still use trident all the time though; it's just a place to put any code I write that I might want to use in multiple projects. I've set it up so it's easy to split the code into separate artifacts based on dependencies--so even though trident has a lot of different stuff in it, you shouldn't have to take in unwanted dependencies to use any given ns.

The parts I use the most are:

Apparently it can result in problems with upgrades: https://forum.datomic.com/t/change-ec2-instance-type/1249/5

However I have been thinking about this, and I would like to try it at some point.

I'd be down to write a tutorial on this. Short answer is use % to jump between parens and = to re-indent an sexpr (E.g. After visually selecting it with v%). Combined with the rest of vim's (more common) editing features, that works great. It's very fast and (unlike paredit/parinfer) never gets in your way.

(also, learn how to use fireplace to execute code from within vim)

I thought seriously about learning emacs since so many people recommend it, but I decided not to after reading this: https://blog.jeaye.com/2015/10/24/emacs-vim/ His comments on tabs and buffers/windows especially stuck out as that's a critical feature for me in vim.

If you're only mildly in to vim, sure give emacs a shot (and cursive!)... But otherwise, I don't buy the "just learn emacs" argument :)

In the past I had used Planck a few times for scripting, but lately I've been getting an error whenever I try to run it. So I tried Babashka this time and it really is 👌

AWS Battles, Episode 1: in which our hero triumphs over evil and gets a Datomic app to deploy successfully
https://jacobobryant.com/post/2019/aws-battles-ep-1/
The root of the issue is, I believe, that I'm using Datomic's solo topology for production which is unsupported. However, the production topology has a 10x price increase (for the EC2 instances) and I'm just a solo dev, so I'm making do.
You can always take the Benjamin Franklin approach:

"Sir

The Bearer of this who is going to America, presses me to give him a Letter of Recommendation, tho’ I know nothing of him, not even his Name. This may seem extraordinary, but I assure you it is not uncommon here. Sometimes indeed one unknown Person brings me another equally unknown, to recommend him; and sometimes they recommend one another! As to this Gentleman, I must refer you to himself for his Character and Merits, with which he is certainly better acquainted than I can possibly be; I recommend him however to those Civilities which every Stranger, of whom one knows no Harm, has a Right to, and I request you will do him all the good Offices and show him all the Favour that on further Acquaintance you shall find him to deserve. I have the honour to be, &c."

https://founders.archives.gov/documents/Franklin/01-23-02-03...

@dustingetz @djwhitt With tmate you don't need to set up the shared server, just run tmate on your local machine, and it outputs an ssh command that others can use to connect to your machine.
@JohnFis87569576 @paulg I use Clojure full-time, and I think Lisp is as relevant as it's ever been.
Actually, this is where it would get really interesting--I may not have the energy to fully research a topic myself, but I could publish what I think so far and be open to pull requests.
I think which wrist you wear your watch on is not (directly) related to handedness. I'm right-handed and started out wearing my watch on my right wrist since I was fairly young and didn't know that was uncommon. Many years later I tried switching to my left wrist. It felt weird at first, but it didn't take long to adjust. Now it feels weird to have it on my right wrist.

(It's also nice to have it on my left wrist while I write etc).

Here's one I did recently: https://jacobobryant.com/post/2019/pipeline/ (aggregate all the content you like on your personal website).
I've recently started working on a general-purpose recommender system that uses Atom/RSS feeds as the main data source. So now I'm trying to make it easier for people to generate those feeds, hence this article.
Shameless plug: I've recently started working on a recommender system/search engine built on RSS/Atom feeds (https://findka.com).
> Hackathons in and of themselves do generally have structure. But what I’m referring to here is a structure that integrates innovation into your day-to-day, versus one day a year. If you’re going to infuse a culture of innovation throughout your organization, you’ll need to keep at it. Otherwise, it’s like going all out at the gym once a year in pursuit of physical fitness. You won’t see nearly the same results you would if you make it a consistent, regular habit.

Perfectly sums up how I feel about hackathons. I'd rather have a little time every week to work on whatever I want rather than binge once a year.

https://prismjs.com/

I like it a lot. Simple, works great. Examples (these snippets are highlighted for bash and clojure): https://jacobobryant.com/post/2019/learn-clojure/

Here's how I would do it, given the vector of parsed maps:

``` user=> (def cats [{:name "Toonces" :skill "driving" :age "7"} #_=> {:name "Garfield" :skill "sleeping" :age "10"}])

'user/cats

user=> (first (filter #(= "Garfield" (:name %)) cats)) {:name "Garfield", :skill "sleeping", :age "10"} user=> (defn coerce [x] (update x :age #(Integer/parseInt %)))

'user/coerce

user=> (map coerce cats) ({:name "Toonces", :skill "driving", :age 7} {:name "Garfield", :skill "sleeping", :age 10}) user=> (defn coerce [x] #=> (-> x #=> (update :age #(Integer/parseInt %)) #_=> (update :skill keyword)))

'user/coerce

user=> (map coerce cats) ({:name "Toonces", :skill :driving, :age 7} {:name "Garfield", :skill :sleeping, :age 10}) ```

EDIT: and the first part can be done like this (modifying your code slightly): ``` user=> (require '[clojure.string :as str]) nil user=> (require '[clojure.java.io :as io]) nil user=> (defn parse-cat [line] (zipmap [:name :skill :age] (str/split line #" ")))

'user/parse-cat

user=> (def cats (with-open [rdr (io/reader "foo.txt")] (mapv parse-cat (next (line-seq rdr)))))

'user/cats

user=> cats [{:name "Toonces", :skill "driving", :age "7"} {:name "Garfield", :skill "sleeping", :age "10"}] ```

At least, that works if your file is space-separated, e.g.: name skill age Toonces driving 7 Garfield sleeping 10

Also, you could combine the parsing and coercing with comp: (def cats (with-open [rdr (io/reader "foo.txt")] (mapv (comp coerce parse-cat) (next (line-seq rdr)))))

https://github.com/jacobobryant/site

This is the source for my personal website. I originally wrote it with Hugo. I'd been wanting to rewrite it in Clojure for a while and finally got around to it this week. I'm very happy with the result; it's much more minimalist (and easily extensible!) than the old setup.

Lucid probably spends more on sales ;)

(former employee)

My favorite instance of this was Mailgun, who html encoded the apostrophe, and then html encoded the resulting text.

O'Bryant -> O'Bryant -> O'Bryant (screenshot: https://twitter.com/obryant666/status/1163638029212250112/ph...)

> I don't think that really impacts practical discussions of death.

Thanks! hm... my recommendation for both ions and the trident/flexbudget architecture is an extremely tentative "maybe."

Ions can be pretty finicky, at least until you figure out all the gotchas (I should write another post about this). I think they're good if either 1) you're building something serious/long-term (I'm doing this with my current startup), or 2) you want to use the project as an opportunity to learn more about Datomic (which is what I did with FlexBudget). If you're building a simple project and are thinking that ions will make it simpler, I wouldn't count on it. Firebase's document db would probably be better (as much as I'd hate to trade datomic for a document db). Or maybe simply datahike on a digitalocean instance.

I'm not using the datomic<->datascript sync for anything serious, just flexbudget. I'd only recommend it if experimenting with that kind of architecture is interesting to you as an end in itself. Lately I've actually been more interested in learning Fulcro myself.

On the other hand, if your app doesn't need to fetch any data past the initial page load, the flexbudget architecture might actually work out nicely. e.g. the entire backend for flexbudget, not including the generalized trident code, is <100 LOC: https://github.com/jacobobryant/flexbudget/tree/master/backend/src/bud/backend

If you decide you do want to experiment with ions/trident, feel free to email me! I might be able to give you a few pointers here and there.

Yeah, I and another guy worked on a startup together for a few months trying to do this as a backend-as-as-service (firebase but with Datomic instead of a document db basically). I ended up bailing after a few months, and I think my ex-cofounder moved on too, but I did take some of the ideas we worked on and made a budgeting application with it: https://jacobobryant.com/post/2019/ion/ (see the last couple sections especially).

Agreed, though I think it'd need to be more accessible for that to happen. e.g. I'd love to have a lite version of datomic that runs on firebase. Something like that would be a much better on-ramp for small projects than the current offerings.

I've been wondering lately if you could somehow layer datascript on top Firebase's DB while having reasonable performance. It'd just need to be good enough that you could use it until switching to Ions made sense.

Performance. With parens, if anything rendered in `MyComponent` changes, the parent component will also be re-rendered. With square brackets, `MyComponent` can be re-rendered individually.

"As a startup, process speed and transparency are your secret weapons when competing for candidates with large companies."

Amen. I've known people who got through Google's interview process, but even then the response is "Great job, we'll let you know within a few months if there's an opening on a team you can join."

Not a great response when you're graduating soon and you've got concrete offers from other companies that will expire.

From the article: "In retrospect, I think our test was a bit longer and more difficult than ideal. If I were to do this over again, I would design the test to take about 4 hours."

Seems reasonable to me.

Hi, a little shameless self-promotion/request for feedback. I've been working on a music recommendation algorithm for a while. Short demo: https://youtu.be/Rr2R1fSZwPo. It's meant to be used in basically the same way as Pandora--i.e. mainly hands-off, you just listen (and skip songs you don't want to hear) while the algorithm picks which songs to play. Question: based on the demo, would you want to use something like this if the algorithm worked really well? (It is launched already, but it's not easy to install right now). If I can get a little traction with this, I'm hoping later to build a streaming service on top of it specifically for indie artists (i.e. with a business model that helps them make more money vs. other streaming services. Happy to chat more about that if anyone's interested).

I'm a big fan of Firebase (Firebase when I can, AWS when I have to). Right now I use it for auth and hosting, but I'll keep this article in mind. I'd be interested to try out cloud functions some time.

A lot of (most?) of the benefit of macros comes not from writing them yourself, but from using macros that others have written. Even if only 5% of the people are writing macros, that 5% likely includes many library authors. Making it harder for them impacts their downstream users too, even if those people aren't actually writing macros.

IMO the macros in Clojure make it easier for library authors to produce KISS, high-level interfaces for the rest of us.

For me, as an early stage startup founder, I'd prefer SaaS. At this stage I don't want to have to think about anything that could've been handled for me. At a later stage I might prefer self-hosted, but not sure.
I use firebase for authentication and have been quite happy with it, but if this provides better integration with mailing lists out of the box, that would be compelling to me. Although I use firebase for authenticated users, I also have a mailing list sign up form with just an email field. I ended up creating my own confirmation email flow because I needed it to work for both people who created an account and people who just used the email form. It would've been nice not to have to do that.

thanks :)

By the way, if you do brew install mpc, you can then do mpc toggle to play/pause and mpc next to skip (I added that to the docs after you went through the install process). Alternatively, you could do pip2 install Mopidy-Iris and then go to http://localhost:6680/iris to get a graphical UI

I'm using the cheapest topology, solo. I'm paying ~$35/month, though that includes a few things like domains I've got on route53. I'm also serving two different apps from the same datomic system fyi--it's quite easy to do so actually. So I think the price isn't bad, even if you're just planning to use it for hobby projects. $30/month/project would be a little much, but $30/month for all your projects is ok for me.

For learning datalog I just used the official getting started guide (https://docs.datomic.com/on-prem/getting-started/brief-overview.html). it might be simplest to start out with datomic free (i.e. the in-memory version) since you can mess around with it without having to install anything.

https://lagukan.com/ (also at https://news.ycombinator.com/item?id=20554599)

Datomic ions have been so nice for building this--e.g. the turnaround time between writing a new feature and deploying it to production is the shortest I've ever experienced. And I don't even want to think about what it would've been like writing all the queries in SQL ;)

Yeah if I give the presentation again I'll be sure to record it! The content is basically a mix of Tonsky's The Web After Tomorrow + this blog post I wrote a little while ago: https://jacobobryant.com/post/2019/ion/
though since writing that post, I had factored a lot of the code out into a separate repo (https://github.com/jacobobryant/trident), so the presentation covered that a little bit too
Also just saw in your other post you mentioned you were thinking of moving to utah/switching to software engineering. I'm happy to chat if you've got any questions about the tech scene (or whatever) here, feel free to DM me if you want!

It's consistent. By convention, only functions that return either true or false end in ?, and as you've mentioned, some doesn't return a simple boolean.

There are uses for this, for example from the docstring: clojure.core/some ([pred coll]) Returns the first logical true value of (pred x) for any x in coll, else nil. One common idiom is to use a set as pred, for example this will return :fred if :fred is in the sequence, otherwise nil: (some #{:fred} coll)

Hey u/c_a_l_m! I went to BYU and am still living in Provo. I'm currently doing a startup using Clojure + Datomic. There's a Clojure meetup (was in Lehi, but they're moving it to Draper) every 4th Wednesday. It's pretty small--usually ~6 people--but I've gone the past three times and I've enjoyed it. I gave a presentation at the last one and it went well; I was thinking about re-giving it for the dev club once fall semester starts.

If you guys are interested, I'd be down to try starting a small meetup on campus for Clojure or perhaps functional programming in general.

I remember seeing a job posting from your team a while ago on the CS Slack's #jobs channel. It warmed my heart :)

yeah, really happy to see tuples. I've been taking a hash of multiple values and using that as a unique key on a project I'm working on right now

https://cljdoc.org/d/trident/docs/0.1.3/doc/readme

I posted several weeks ago about building an app with Datomic. I've been moving a lot of code I wrote for the app into a separate library, and Trident is the result. Ironically, none of the documentation I've written so far has anything to do with Datomic. As I started working on the library, I got sucked into building a little tools.deps-based build system for it, and that's mainly what I've documented so far. It's basically my attempt at bringing the convenience of leiningen to tools.deps without sacrificing power.

(If anyone's curious about the term "Trident": I named it after the gum, a pack of which was on my desk while I was thinking of a name. But it's also the logo of a college I went to, so I guess I could go with that explanation too.)

Recommendations

Nothing in life prepares you to navigate the AWS console. Nothing.

Periodic plug for http://bench.co  , particularly if you're stressing on business bookkeeping prior to tax season. I never bought back so many hours so cheaply.

when starting a startup, it's important to make good decisions and not bad ones
(11/11) “I got to work. I wrote letters to the governor. I wrote letters to Obama..."
@CalligraphicCMS @kamranahmedse I agree. I think there may be a disconnect with the workload/responsibilities of current day students versus the nostalga. I distinctly remember when I finally finished college (and double part time jobs) and was so happy to now "only" have to work a 9 to 5.
@patrickc @patio11 @stripe I just realised both of your names are Patrick 😂 I usually identify you guys by your usernames.
When I was getting started it seemed very unclear how to go from “Python script” to “a real business”.

A few words that break down the seemingly impossible to something mathematically digestible: https://dcgross.com/the-power-of-ten-playbook/

Lillian (5): Wait why is it morning in Chicago if it is night in Japan. *long explanation* Me: And that’s why it is 8 PM at night here but 5 AM in Chicago. Lillian: Wait the time is different too? Me: Yes. Lillian: Why not just have it be 8 PM everywhere and just be daytime there

Every recipe: sauté onions for 5 minutes until golden

Every time: takes 20+ minutes until any visible change has occurred
The more I work w/startups, the more I believe they should ignore traction metrics (ARR, growth rate, etc) until they're close to product/market fit.

Once you report that you grew 50%/mo & hit $3k MRR, your team & investors will focus on optimizing traction instead of learning.
Some words on our favorite topic, productivity: https://dcgross.com/improvising-for-productivity/
TIl: ‘ethically sourced’ cocaine is a growing thing. Obviously, this is ‘woke coke’
My new Harvard course: General Education 1066, "Rationality."
We launched a new feature

Live visits showing up in your dashboard

Get your popcorn ready 🍿

https://simpleanalytics.com/nomadlist.com

Recently, I have given the following Clojure presentation for a group of C# programmers: https://orgpad.com/o/fa4eb667-cbbb-4d85-8a96-ca0cdac7b5b1 . It is an interactive website build in our Czech startup Orgpad. The startup is entirely build in Clojure and Clojurescript and we are super happy with it, all the tools and libraries. It can be used to sort out hard problems, organize plans, work in teams, etc. For more info, see https://orgpad.com. I believe that the weaknesses of Clojure are hard start for beginners and not enough good documentation, and hopefully our startup can be used to address this void. Any feedback is welcomed.

https://preview.redd.it/17v9yfqaudc41.png?width=2715&format=png&auto=webp&s=36deefed11543e75e9829356cb3ea3b09a5f7a78

I work for BYU, a university in Utah. Specifically, I work on a small team of four developers that writes various apps for the Humanities Department.

Now, I am not a junior. I learned Clojure seven years ago, fell in love, and sold all I had for the pearl of great price. (I exaggerate. But not really).

But what has me making this post on reddit was my surprise and delight when, on recently coming back to school, I found there was a group using Clojure, and even training new developers in the Clojure arts!

My boss has said that he's found the most success with CS students not advanced very far in their curriculum, as they have fewer bad habits to unlearn.

I think this is totally neat! I thought the Clojure community should know about it.

Reasons I like Clojure:

  1. Extremely expressive. (dynamically typed, functional paradigms map/filter/reduce)

  2. Functional, reduce bugs, better to do point #3. (data first, immutable, HOF, etc)

  3. Easier to write concurrent and parallel code to reduce infrastructure costs while in bootstrap phase.

  4. "Cross-compatible" can be used for both the frontend and backend, can be run on any JVM etc, can use anything I want in the Java world.

  5. Potentially faster iteration cycles and reliable than competitors?

Reasons I might not use Clojure:

  1. Cognitive overhead of learning a new language and the difficulty of finding additional developers/training if the startup needs to scale.

  2. Hard to find examples of the language with large scale.

  3. Decent but not as vibrant of an ecosystem in regards to tooling and other packages as other communities (Python/Golang).

Academics: Missing deadlines since at least 670 BC.

(SAA 10, 255)
One thing I noticed working at YC: if you can *just* manage to not blow yourself off-course on a consistent basis you are doing better than most.

Working at a normal job there are only so many ways you can get off-track. Being a founder opens up a lot more degrees of freedom :)
I'm very excited that "A History of Clojure" has been accepted at HOPL-IV. I hope to see some of you in London at the conference! https://hopl4.sigplan.org/
The google chrome "articles for you" feature is the best recommendation system I regularly interact with.

(best = I am consistently interested in a high % the recommendations)
@PetarLalovic I’d have to really think to come up with an ordinal ranking, but in terms of repeated salience:

Geeks underprice themselves. Cron jobs and SaaS apps are underdeployed. Automatic email is scandalously underdeployed. “School” is not near efficient frontier for learning. Coffee.
Wow, checked email while on vacation today and saw all the github sponsor notifications - thanks everyone!
@visakanv Would love to hear what your list of implications is.

I'll give everyone one, which I don't think is contingent on self-identification as a celebrity or media worker: there is likely no asset you own or will soon own as valuable as an email list of people who like your stuff.
Immutability as the default in #Clojure solves many of the same problems as microservice architecture without the complexity of orchestration and operational costs.
He’s got exceptionally poor client qualification, is actively hostile to better branding, refuses to focus on what he is good at, charges too little, and has poor collection practices which are downstream of working for an unending collection of muppets. https://twitter.com/visakanv/status/1210219953099440134
@paulg Very true. Unfortunately, since we’ve all been conditioned to passively receive content instead of seek it out, creators have lost the leverage of bringing people to where they are.
Think twice about building a business on a platform some other company controls. The more popular the platform is, the less compunction they'll feel about crushing you. https://twitter.com/AlexSaundersAU/status/1210100907909750784
@patio11 @devonzuegel I support a conspiracy theory in which all specious science-themed claims are designed to sell breakfast cereal. Meyers-Briggs, 4 and 8 hand position on steering wheels, all of it. Breakfast cereal.
something I've thought about for 2020

I post only a small fraction of what I actually read

If I started a newsletter

-highlights, notes of books & papers I've read
-essays I've written
-article & video recommendations
-other stuff I find interesting

would you sign up for it?
My mom: "I printed out @jack's tweets and your @knightcolumbia article to read later."

Me: "Oh, great."

My mom: "How do you come up with this stuff?!?"
Second, the value of social media is shifting away from content hosting and removal, and towards recommendation algorithms directing one’s attention. Unfortunately, these algorithms are typically proprietary, and one can’t choose or build alternatives. Yet.
Twitter is funding a small independent team of up to five open source architects, engineers, and designers to develop an open and decentralized standard for social media. The goal is for Twitter to ultimately be a client of this standard. 🧵
@checkwarner Only $34? You run a lean machine! 😇