677 karma · joined May 4, 2012
I'm looking forward to Public Observatory Night resuming in person someday. :(
Coding in Clojure with Emacs CIDER - with it's integrated code editor and REPL - is the most fun I've ever had with programming. The immediate feedback, the incremental building up of functionality, the ability to interactively evaluate nested expressions at any depth - it all feels very fluid and natural and immediate once you learn a few keyboard shortcuts.
Seriously, it was what finally got my programming mojo back after going stale from decades of C++ & Java. In my search for "something better" I also had good experiences with Ruby, Python, and Groovy and I also used their REPLs occasionally, but those REPLs never became central to the coding experience as it is with Clojure. (maybe I was missing out)
Really dude?
Even if it weren't so slow, there are some features I'd need before considering it for even quick/casual coding tasks:
Library loading, Paredit (or parinfer), Flexible eval (sexp, form, selection), Easy help/reference and function signature help (like Eldoc).
https://crypto.stackexchange.com/questions/202/should-we-mac...
Ha! Love it.
Yes, and I assume this is implied, but compromise must strike an acceptable balance. When things get too one-sided it's generally a recipe for trouble.
A good rule of thumb is for both partners to estimate their contributions or compromises to be 60+% of the total, and then there's some chance that it'll be fair (i.e. most people over-estimate their contribution/sacrifice)
I think a lot of relationship issues result from a struggle over balance/fairness because they aren't sufficiently dedicated to the others' interests and well-being.
Not an issue for me, nor anyone else I know who has retired early. Maybe the same sort of energy that supports early retirement also leads to a fully engaged post-retirement life.
As long as you love to learn or create (or both) you will have a shortage of free time, even in retirement.
Off the top of my head, I spend time on: foreign language, guitar, writing, blogging, photography/videography, programming challenges, fitness, meditation, cooking, history, math, politics, biking, kayaking, hiking, golf, travel, volunteering, reading books/magazines/news, watching movies/shows, surfing the web, home improvement and repair, investing.
And that's just the fun stuff. There's still bills, taxes, paperwork, repairs, laundry, dishes, on and on.
Honestly, I still don't have anywhere near enough time and am annoyed by how much time sleep steals. I have no idea how I went 30 years with 50 hours lost every week to work, not to mention raising a family.
It's a trite saying, but true: you won't be bored unless you're boring!
And there are tricks for dealing with cities, like parking on the edge and biking in. Or finding RV friendly lots using google maps satellite images.
Lately cities have far less to offer (no museums, galleries, restaurants, etc.) so it’s hike and bike and enjoy the beautiful country.
It’s cavernous, bad acoustics, drab and utilitarian, geometrically weird and therefore hard to navigate, and finding conference rooms is like a habitrail adventure with lots of dead ends and backtracking.
It’s just an all around unpleasant space (to me) that has no good explanation other than lack of caring.
But I do think it looks super interesting outside.
But I’ll never forgive Ghery for that horrific turd called the Weisman art museum at U of MN. Tear that thing down.
https://gist.github.com/mchampine/dca965226148dfd19d5e4d7f3d...
Most of it was done for a weekly Clojure programming challenge run by Eric Normand in his PurelyFunctional.tv newsletter. You can see all the entries at https://gist.github.com/ericnormand/fbc9b6386a66c1ece590930d...
It's pretty nice. There's a introductory course on mediation, a daily meditation, and lots of theory and interview podcasts.
Harris takes you through lots of variants of 10 minute meditations, focusing narrowly (on body sensations, breathing, sights, sounds, etc.) or very broadly (taking in everything at once), or a few on wishing happiness on others.
He emphasizes, to an almost extreme degree, the search for "self", for the thinker of thoughts. It gets a bit repetitive, but the goal is keep looking but never find the self and therefore see that "self" is simply an illusion of the mind. With practice you will experience more and more the pure state of experiential flow. An interesting aspect is learning to treat your own thoughts as another "input event" appearing in consciousness, just as sensory inputs are. You observe your thoughts, but learn not to become "lost in thought".
There's also some great practical wisdom about the waste of negative thought loops, the finite nature of life, and a habit of gratitude.
He has a great bit on "the last time" which ruminates on the idea that eventually you will do everything for the last time (and you probably won't even know it. But what if you did? How would it change your attitude toward even mundane experiences?).
Also that experience is largely determined by attitude. There are miserable people in the Carribean on luxury yachts, and joyful people in the dark in freezing rain (for example on a great wilderness adventure). And it's your ability to steer your mind that makes the difference.
Good stuff.
The idea that this incident demonstrates that any city will go up in flames immediately if the police take the day off is a misreading this specific moment in history.
See: https://en.wikipedia.org/wiki/Murray-Hill_riot
That's not to dispute the idea that cities will generally retain order if police are absent. I imagine it varies wildly from one time and place to another.
Shortly thereafter, C++ arrived in the form of "cfront" which was a cross-language translator that would generate .c and .h files from .cxx and you'd compile those with a C compiler. There was no actual C++ compiler at first.
Except that key provisions of the act were struck down in 2013. Those provisions prevented states with a history of disenfranchisement from changing their voting laws. Since the court ruling several of these states have started back on the path of disenfranchisement.
I never broke a bone as a kid, and not only spent half my youth outdoors but was a daredevil.
Summer: Tree climbing, as high as 50'. Constant bike riding on and off road, skateboarding, go carts, dirt-bikes (hill climbs, jumps), jungle gym, stilts, pogo sticks, trampolines, swings, water-skiing, touch football, street hockey, basketball, and soccer.
Winter: Flexible flyer sledding on steep hills with frequent collisions and wipe-outs (that was half the fun), snowmobiles, tubing, skiing, skitching (when streets are snowy/icy you hold on to a car's bumper and hitch a ride)
One of my own kids has the daredevil streak also and built huge jumps for bikes in summer and snowboards in winter. They'd jump over cars.
No broken bones (lacerations, bruises, sprains however)
On the other hand, I saw a kid break his leg at 2 mph by falling off his bike against a curb.
I assumed however that we'd be going all the way down to the bytes. I spent quite a long time with "A Layman's Guide to a Subset of ASN.1, BER, and DER" as a close companion, though it looks like letsencrypt has created a friendlier intro: https://letsencrypt.org/docs/a-warm-welcome-to-asn1-and-der/
While it's relatively rare that you'll have to understand the encoding, it can be a lifesaver to have that skill if you're looking at some raw dump of of a cert (or other BER/DER encoded data).
I had a co-worker once who was famed for having a BER/DER decoder in his head. He'd look at a hex dump and point to a spot somewhere in the middle and declare something like "there's your problem: the cert signing bit isn't set in your key usage extension".
Neat! I can't find anything in Clojure that does that, so I guess I'd have to use java.util.zip via Clojure ineterop. But making records and doing queries is easy:
> generate classes at runtime using the headers in each CSV
In Clojure:
(ns gtfs.core
(:require [clojure.data.csv :as csv]))
(defn load-records [f]
(let [csv-data (csv/read-csv (slurp f))]
(map zipmap
(->> (first csv-data) ;; First row is the header
(map keyword)
repeat)
(rest csv-data))))
(def agency-maps (load-records "data/agency.txt"))
(def routes-maps (load-records "data/routes.txt"))
;; etc.
(count routes-maps) ;; 30
(first routes-maps)
;; {: route_id "1-100",
;; :route_short_name "1",
;; :route_long_name "Ligne 1",
;; :route_desc "",
;; :route_type "3",
;; :route_url "",
;; :route_color "#B22E75"}
> defines a 'select' function to make queries easy to write ;; Query for long_name and route_color
(def route_ln_color (map #(select-keys % [:route_long_name :route_color]) routes-maps))
(take 2 route_ln_color)
;; ({:route_long_name "Ligne 1", :route_color "#B22E75"}
;; {:route_long_name "Ligne 2", :route_color "#B22E75"})One small tip for the author: clojure.data.csv would simplify csv handling. Its readme includes a simple routine to transform the data to maps.