Road to Wigan Pier

(For context, this book was published in 1937.)

Orwell spends the first half of the book traveling to various towns in early 1900s England and attempting to experience the lives of those living there. Throughout, the theme is of the general squalor in which the lower class exists, and how it’s not something they’re really going to be able to get themselves out of magically, or through hard work alone.

He spends time as a coal miner, actually going down into the mines on a regular workday, and describes the terrible working conditions, underpay, and long hours of the miners. He goes into their homes and describes the terrible living conditions, decrepit architecture (unpleasantly small spaces packed with too many people, no gardens and generally no happiness), lack of toilets (one for many houses), often no plumbing, etc etc.

On questioning his own status as an intellectual in light of his experiences with the coal miners:

“In a way it is even humiliating to watch coal – miners working . It raises in you a momentary doubt about your own status as an “ intellectual ” and a superior person generally . For it is brought home to you , at least while you are watching , that it is only because miners sweat their guts out that superior persons can remain superior . You and I and the editor of the Times Lit . Supp . , and the Nancy poets and the Archbishop of Canterbury and Comrade X , author of Marxism for Infants — all of us really owe the comparative decency of our lives to poor drudges underground , blackened to the eyes , with their throats full of coal dust , driving their shovels forward with arms and belly muscles of steel .”

This continues for the first half, generally describing how shitty it is (for the lower class(es)) in early 1900s England.

For the second half of the book Orwell unleashes an absolutely withering tirade against socialism as a political movement. He attempts to describe what would need to be done to lift people out of poverty and generally make things better, but ends up targetting the mis-steps of the socialist movement in being overly trivial and petty, and generally pushing away anyone who would want to join it. Orwell views Socialism as the necessary, obvious, and only direct counter to Fascism (which is the more obvious evli) but laments that socialism in its current form is just generally stupid and needs to get its story together.

On the contradiction of trying to build a utopia:

“The tendency of mechanical progress is to make your environment safe and soft ; and yet you are striving to keep yourself brave and hard . You are at the same moment furiously pressing forward and desperately holding back . It is as though a London stockbroker should go to his office in a suit of chain mail and insist on talking medieval Latin . So in the last analysis the champion of progress is also the champion of anachronisms.”

I found this section of the book both fascinating and hilarious. Basically, Orwell points out that the things we value in humans are our courage and strength (especially physical beauty as it relates to being fit and strong). But contradictorily, we’re striving to build some sort of a utopia which would be safe and soft (as he points out in the quotation above)— and therefore make unneeded the types of strength and physical courage which we value. He actually goes so far so to ridicule the idea:

“But in a world from which physical danger had been banished—and obviously mechanical progress tends to eliminate danger—would physical courage be likely to survive? Could it survive? And why should physical strength survive in a world where there was never the need for physical labour? As for such qualities as loyalty, generosity, etc., in a world where nothing went wrong, they would be not only irrelevant but probably unimaginable. The truth is that many of the qualities we admire in human beings can only function in opposition to some kind of disaster, pain or difficulty; but the tendency of mechanical progress is to eliminate disaster, pain and difficulty. In books like The Dream and Men Like Gods it is assumed that such qualities as strength, courage, generosity, etc., will be kept alive because they are comely qualities and necessary attributes of a full human being. Presumably, for instance, the inhabitants of Utopia would create artificial dangers in order to exercise their courage, and do dumb-bell exercises to harden muscles which they would never be obliged to use.”

This is funny! From almost 100 years ago, Orwell is predicting EXACTLY the situation we have today: Disney Land world where there are no real physical challenges, but everyone spends their time doing dumb-bell exercises to harden muscles which they’ll never be obliged to use. Brilliant!


On Marxism’s failures to relate to reality:

“I have very seldom met a convinced Socialist who could grasp that thinking people may be repelled by the objective towards which Socialism appears to be moving. The Marxist, especially, dismisses this kind of thing as bourgeois sentimentality. Marxists as a rule are not very good at reading the minds of their adversaries; if they were, the situation in Europe might be less desperate than it is at present. Possessing a technique which seems to explain everything, they do not often bother to discover what is going on inside other people’s heads.”


“It is a pity that Marxists nearly always concentrate on letting economic cats out of ideological bags; it does in one sense reveal the truth, but with this penalty, that most of their propaganda misses its mark. It is the spiritual recoil from Socialism, especially as it manifests itself in sensitive people, that I want to discuss in this chapter. I shall have to analyse it at some length, because it is very widespread, very powerful and, among Socialists, almost completely ignored.”


On worshipping the Machine (as socialism does):

“Put a pacifist to work in a bomb-factory and in two months he will be devising a new type of bomb. Hence the appearance of such diabolical things as poison gases, which are not expected even by their inventors to be beneficial to humanity. Our attitude towards such things as poison gases ought to be the attitude of the king of Brobdingnag towards gunpowder; but because we live in a mechanical and scientific age we are infected with the notion that, whatever else happens, “progress” must continue and knowledge must never be suppressed. Verbally, no doubt, we would agree that machinery is made for man and not man for machinery; in practice any attempt to check the development of the machine appears to us as an attack on knowledge and therefore a kind of blasphemy.”


On combatting Fascism:

“In order to combat Fascism it is necessary to understand it , which involves admitting that it contains some good as well as much evil . In practice , of course , it is merely an infamous tyranny , and its methods of attaining and holding power are such that even its most ardent apologists prefer to talk about something else . But the underlying feeling of Fascism , the feeling that first draws people into the Fascist camp , may be less contemptible . It is not always , as the Saturday Review would lead one to suppose , a squealing terror of the Bolshevik bogey – man . Everyone who has given the movement so much as a glance knows that the rank – and – file Fascist is often quite a well – meaning person — quite genuinely anxious , for instance , to better the lot of the unemployed . But more important than this is the fact that Fascism draws its strength from the good as well as the bad varieties of conservatism . To anyone with a feeling for tradition and for discipline it comes with its appeal ready – made . Probably it is very easy , when you have had a bellyful of the more tactless kind of Socialist propaganda , to see Fascism as the last line defence of all that is good in European civilisation . Even the Fascist bully at his symbolic worst , with rubber truncheon in one hand and castor oil bottle in the other , does not necessarily feel himself a bully ; more probably he feels like Roland in the pass at Roncevaux , defending Christendom against the barbarian . We have got to admit that if Fascism is everywhere advancing , this is largely the fault of Socialists themselves . Partly it is due to the mistaken Communist tactic of sabotaging democracy , i.e . sawing off the branch you are sitting on ; but still more to the fact that Socialists have , so to speak , presented their case wrong side foremost . They have never made it sufficiently clear that the essential aims of Socialism are justice and liberty . With their eyes glued to economic facts , they have proceeded on the assumption that man has no soul , and explicitly or implicitly they have set up the goal of a materialistic Utopia . As a result Fascism has been able to play upon every instinct that revolts against hedonism and a cheap conception of “ progress . ” It has been able to pose as the upholder of the European tradition , and to appeal to Christian belief , to patriotism and to the military virtues . It is far worse than useless to write Fascism off as “ mass sadism , ” or some easy phrase of that kind . If you pretend that it is merely an aberration which will presently pass off of its own accord , you are dreaming a dream from which you will awake when somebody coshes you with a rubber truncheon . The only possible course is to examine the Fascist case , grasp that there is something to be said for it , and then make it clear to the world that whatever good Fascism contains is also implicit in Socialism .”


On Socialism needing to get its shit together:

“For a long time past , certainly for the last ten years , the devil has had all the best tunes . We have reached a stage when the very word “ Socialism ” calls up , on the one hand , a picture of aeroplanes , tractors and huge glittering factories of glass and concrete ; on the other , a picture of vegetarians with wilting beards , of Bolshevik commissars ( half gangster , half gramophone ) , of earnest ladies in sandals , shock – headed Marxists chewing polysyllables , escaped Quakers , birth – control fanatics and Labour Party backstairs – crawlers . Socialism , at least in this island , does not smell any longer of revolution and the overthrow of tyrants ; it smells of crankishness , machine – worship and the stupid cult of Russia . Unless you can remove that smell , and very rapidly , Fascism may win.”


tweetstorms about #bitcoin and #crypto

Lots of good blockchain related content here…


~ @desantis


Bonus link

The Four Layers of the Blockchain

Why Tokens Signal the End of an Era

View story at

Adding spheres to a scene using ARKit

Just some spheres floating above my bed


First we’ll want to set up the basic ARKit scene. All this is boilerplate provided if you create an ARKit project in XCode

//  ViewController.swift

import UIKit
import SceneKit
import ARKit

class ViewController: UIViewController, ARSCNViewDelegate {

    @IBOutlet var sceneView: ARSCNView!

    override func viewDidLoad() {

        // Set the view's delegate
        sceneView.delegate = self

        // Show statistics such as fps and timing information
        sceneView.showsStatistics = true

        // Create a new scene
        let scene = SCNScene()

        // Set the scene to the view
        sceneView.scene = scene

    override func viewWillAppear(_ animated: Bool) {

        // Create a session configuration
        let configuration = ARWorldTrackingSessionConfiguration()
        configuration.planeDetection = .horizontal

        // Run the view's session

    override func viewWillDisappear(_ animated: Bool) {

        // Pause the view's session

One nice thing to add when developing with ARKit is the debug point thingies:

// Goes in viewDidLoad()
sceneView.debugOptions = ARSCNDebugOptions.showFeaturePoints


Now, we’ll create a separate sphere class to abstract away the SCNNodes which will contain the sphere:

//  Sphere.swift

import Foundation
import ARKit

class Sphere: SCNNode {

    static let radius: CGFloat = 0.01

    let sphereGeometry: SCNSphere

    // Required but unused
    required init?(coder aDecoder: NSCoder) {
        sphereGeometry = SCNSphere(radius: Sphere.radius)
        super.init(coder: aDecoder)

   	// The real action happens here
    init(position: SCNVector3) {
        self.sphereGeometry = SCNSphere(radius: Sphere.radius)


        let sphereNode = SCNNode(geometry: self.sphereGeometry)
        sphereNode.position = position


    func clear() {


Now, when we want to add a sphere, we can do something like this

    func addSphere(position: SCNVector3) {
        print("adding sphere at point: \(position)")
        let sphere: Sphere = Sphere(position: position)
// if we keep an array of these babies, then calling
// sphere.clear() on each will remove them from the scene

Insert into scene

Now for the interseting bit. To calculate the position at which we’d like to place the sphere, we can take the position of the camera and add a transform in the direction the camera is facing. All this code could be executed in a button press handler, for instance.

I found this handy screenSpacePosition function in a stack overflow post, it’ll do the vector math addition along the z axis. The distance is negative because we want to go further into the scene.

    func sceneSpacePosition(inFrontOf node: SCNNode, atDistance distance: Float) -> SCNVector3 {
        let localPosition = SCNVector3(x: 0, y: 0, z: -distance)
        let scenePosition = node.convertPosition(localPosition, to: nil)
        // to: nil is automatically scene space
        return scenePosition

then, in the button press handler:

if let cameraNode = self.sceneView.pointOfView {

	let distance: Float = 0.3 // Hardcoded depth
    let pos = sceneSpacePosition(inFrontOf: cameraNode, atDistance: distance)    

    addSphere(position: pos)


Another way to do this would be to try to add the object “into” the scene, at a depth which is the location in z space of the object in front of the camera. We can do this with a hit test:

if let cameraNode = self.sceneView.pointOfView {

	let width = sceneView.frame.size.width;
	let height = sceneView.frame.size.height;

	let distance = sceneView.hitTest(CGPoint(x: width, y: height), types: [.existingPlaneUsingExtent, .featurePoint]).first!.distance;
	let pos = sceneSpacePosition(inFrontOf: cameraNode, atDistance: Float(distance))

    addSphere(position: pos)

And that’s all for this post!

LSTM Adventures

Following this as a guide:

1: Started by training with the single-layer LSTM

model = keras.models.Sequential() 
model.add(kl.LSTM(256, input_shape=(X.shape[1], X.shape[2]))) 
model.add(kl.Dense(y.shape[1], activation="softmax")) 
model.compile(loss="categorical_crossentropy", optimizer="adam")


  • final loss after 20 epochs: 1.9054
  • time to train (approx): 1hr
  • mostly gibberish words, but word lengths and spacing look right!
  • can handle opening and closing quotation marks
  • sometimes gets ” ‘?’, said the . “

the mort of the sorts!’ she katter wept on, ‘and toene io the doer wo thin iire.’

‘io she mo tee toete of ther ’ou ’ould ’ou ’ould toe tealet ’our majesty,’ the match hare seid to tee jury, the was aoling to an the sooeo.

‘he d crust bi iele at all,’ said the mock turtle.

‘ie doersse toer miter ’hur paae,’ she mick turtle replied, ‘in was a little soiee an in whnl she firl th the kook an in oare

the rieet hor ane the was so tea korte of the sable, bnt the hodrt was no kently and shint oo the gan on the goor, and whnn hes lene the rueen sas so aeain, and whnn she gad been to fen ana tuiee oo thin shaee th the crrr asd then the was no toeeen at the winte tabbit wat she wiite rabbit wat she mitt of the gareen, and she woole tee whst her al iere at she could,

*note: I tried this again with a 512 unit single layer LSTM, the results were along these lines:

‘i con’t sein mo,’ said alice, ‘ho would ba au all aare an ierse then and what io the bane af in eine th the bare aadi in the cinrsn, and she was soit ion hor horo aerir the was oo the cane and the was oo the tanl oa teing the was soie in her hand

and saed to herself, ‘oh tou dane the boomer ’fth the semeen at the soiee tf the bareee and see seat in was note go the pine afd roe banl th the grore of the grureon,

Training time was slightly longer, and the results are not meaningfully different. One observation here is that training for 20 epochs might be too short…

2:  Added another LSTM layer

model = keras.models.Sequential()
model.add(kl.LSTM(256, input_shape=(X.shape[1], X.shape[2]), return_sequences=True))
model.add(kl.Dense(y.shape[1], activation="softmax"))
model.compile(loss="categorical_crossentropy", optimizer="adam")


  • final loss after 20 epochs: 1.5144
  • time to train (approx): 2hrs
  • seems to fall into loops
  • closer to ‘english’ words

and mowte it as all, and i dan see the that was a little boom as the soog of the sable it as all. and the pueen was a little boowle and the thing was she was a little boowle and the that was a little boowle and the that was a little boowse and the thing was the white rabbit say off and the thing was she was a little boowle and the that was a little boowle and the that was a little boowse and the thing was the white rabbit say off and the thing was she was a little boowle and the that was a little boowle and the that was a little boowse and the thing was the white rabbit say off and the thing was she was a little boowle and the that was a little boowle

3: Trying again with 3 LSTM layers

model = keras.models.Sequential()
model.add(kl.LSTM(256, input_shape=(X.shape[1], X.shape[2]), return_sequences=True))
model.add(kl.LSTM(256, return_sequences=True))
model.add(kl.Dense(y.shape[1], activation="softmax"))
model.compile(loss="categorical_crossentropy", optimizer="adam")


  • final loss after 20 epochs (took much longer!):
  • time to train (approx): 2.5 hrs
  • real words, better sentence structure… but it’s also falling into pretty small loops.
  • Different seed text results in the first line being quite different but then quickly devolving into the same loop of the hatter and the mock turtle going back and forth.
at the way that the was to tee the court.

‘i should like the dormouse say “ said the king as he spoke. 
‘i don’t know what it moog and she beginning of the sea,’ the hatter went on, ‘i’ve sat a little sable. 
‘i don’t know what you con’t think it,’ said the mock turtle.

‘i don’t know what it moog and she beginning of the sea,’ the hatter went on, ‘i’ve sat a little sable. 
‘i don’t know what you con’t think it,’ said the mock turtle.

‘i don’t know what it moog and she beginning of the sea,’ the hatter went on, ‘i’ve sat a little sable. 
‘i don’t know what you con’t think it,’ said the mock turtle.

4: Single Layer GRU (for comparison with the single layer LSTM)

model = keras.models.Sequential()
model.add(kl.GRU(256, input_shape=(X.shape[1], X.shape[2])))
model.add(kl.Dense(y.shape[1], activation="softmax"))
model.compile(loss="categorical_crossentropy", optimizer="adam")


  • final loss (20 epochs): 1.87897 (approx the same as the 1 layer LSTM)
  • time to train: 40 minutes (faster!)

tone of the hoore of the house, and the whrt huon a little crrree the sabbit say an in oish of the was soiereing to be a gooa tu and gerd an all, and she whrt huow foonnge to teyerke to herself, ‘it was the tait wuinten thi woils oottle goos,’

‘hht ser what i cen’t tamling,’ said alice, ‘ih’ le yhit herseree to teye then.’

‘i shanl sht me wiitg,’ said alice,

‘what ie y sheu wasy loteln, and teed the porers oaser droneuse toe thet, and the tored harden wo cnd too fuor of the word the was soteig of the sintle the white rabbit, and the tored hard a little shrenge the fab foott of the was sotengi th theee th the was soe tabdit and ger fee toe pame oo her loot ou teie the was soee i rher to thi kittle gorr, and the tar so tae it the lad soe th the waited to seterker

Still gibberish, though more english words. Training for more than 20 epochs might be the key!

Here’s a graph of the loss dropoff over time



Personal Goodreads Ranking Method

This is how I rank books I’ve read.

[link to my goodreads account]

Goodreads uses a scoring system where you can give a book a number of stars out of 5. The usefulness of a scale like that is in using its full range, for instance if I were to rank all books 3, 4, or 5, the scale has really become a 3 point scale and has lost some resolution.

So I’ve been scoring books based off these semantics:

1 star: “Did not like it”. Really not a fan. Wouldn’t recommend, and would probably actively recommend against reading it. Some books have this score, which is surprising because it likely means that I finished reading it (and probably shouldn’t have). Either not worth the time I spent reading it, or made me upset for having wasted my own time.

2 stars: “It was okay”. Reasonable. Not life changing. Not going to recommend it. Pretty much totally neutral. Most recently I read a book about ‘tips for sleeping better’ which I gave a 2. It’s pulp, probably pretty good pulp, but pulp nonetheless.

3 stars: “Liked it”. Worth the read, probably wouldn’t recommend it readily. Most books get this score. High quality average book.

(4 and 5 I’d both call “favorite” or “top books”)

4 stars: “Really liked it”. Really good, I would recommend this to a friend looking for a read. This book will stick with me and become good intellectual fodder to chew over, or a story which I still think about. Probably if you know me you’ve heard me spout some knowledge or something from this book.

5 stars: “It was amazing”. 10/10, everyone should read this book. I’ve never read a book twice but I should really probably read this book twice. Or thrice. This score means the book has drastically changed my worldview, broadened my imagination irreversibly, and/or given me whole new language for thinking and talking about certain ideas.

One-Straw Revolution


This book is Zen and the Art Of Motorcycle Maintenance-esque, in that the first half is about this Japanese guy’s life work and discipline of running a self-sustaining farm, and the second graduates into his life philosophies (as farming has taught him) at length.

Of course, I haven’t ever read ZatAoMM, so I could be off on the comparison.

Fukuoka’s got a pretty small farm (by modern industrial farming standards), an acre for grains and veggies, and 5 or so acres for a mandarin orange orchard. People come to live on his farm to be disciples of his way of life, the farm sustains about 15 people at a time. It’s mostly self sufficient apart from a few purchased goods: soy sauce and vegetable oil, things which would be impracticle to self-produce, and I’m sure some amount of salt/spices/tools, etc are also purchased. They sell a mandarin oranges for profit.

Fukuoka was a research scientist in microbiology and agriculture before falling ill, and while in the hospital realizing that western agriculture was bullshit and that he was going to go do it differently.

He calls his practice do-nothing farming, his mentality is that letting the natural systems do their work means that the farmer can do less. He doesn’t use pesticide to kill insects eating the plants, which allows other insects higher up the food chain to stop the ones eating the plants, and other animals to eat those in turn. Avoiding pesticides allows the whole food chain to reach a happy fixed point, a dynamic equilibrium. Pesticides also have side effects of burning nutrients out of the soil over time. So letting nature run its course means that the farmer doesn’t have to spend the time applying pesticides, and the soil is allowed to grow strong as well. Win-win.

The numerical yield from his farm is the same or higher than that of comparable farms using much more labor-intensive processes.

His grain planting practice was particularly interesting, rice in the warm season and rye/barley in the cool. He doesn’t do any of the complex flooding and transplanting process usually associated with rice farming, instead scattering (he calls it ‘broadcasting’, which I quite like) rice seed in spring among the previous season’s rye and barley, harvesting the rye/barley and letting the rice grow, scattering rye seed, harvesting the rice and letting the rye/barley grow, and so on. All the while he also scatters clover seed, which forms a nice low base layer to help the soil retain moisture and help keep the seeds from being eaten by birds.

Fukuoka’s life philosophies are largely that humans have created a whole bunch of extra work for themselves (see pesticide example), which then begets more work to sustain the side effects, etc.

He says we’ve lost touch with what tastes good, with our natural ability to determine what foods are healthy and what foods our body needs at a given time. He says that really, food straight from the gardens simply prepared is truly delicious, but we’ve convinced ourselves that we need more complex preparations for food to be worthwhile.

I found the book in a list of permaculture/no-till farming authors, this certainly fits the bill. Last week I broadcasted some spinach seed in my vegetable patch in the backyard, as the most accessible version of an experiment of his technique. So we’ll see if the birds eat it or what.

Revenge of Geography

Great book to follow up on Accidental Superpower, slightly more academic and much more depth. Kaplan spends more time discussing history geopolitical understanding, as well as on deeper exploration into various regions around the world.

Starting with Central Europe, he works through the rest of Europe, the Eurasian Heartland, Russia, China and neighboring seas, Japan, Southeast Asia, India and the subcontinent, and the Middle East, finishing with an analysis of the US especially in regards to Mexico.

Indian Subcontinent

I was particularly interested in the tension in between India and Pakistan (given my family origins). The subcontinent has a more complex geography than it appears at first: India is broken up by horizontal rivers on a vertically organized peninsula, and further by highlands and mountain regions. This has prevented a unified India for much of its existence, despite partial consolidation of power in the north or south at various time periods. Kaplan states that historically, control of the subcontinent has stemmed from joint control of Delhi and Lahore. The formation of Pakistan is a geographical anomaly and a curiosity in that the border between the two nuclear nations has become hyper-militarized without any sort of true “geographical logic” as grounds. The steppe from Afghanistan (another almost-failed state whose mountainous geography defies central control) to northern India has no defined demarcation. To Kaplan, Pakistan represents the history of invasion of India from the northwest, poised on the border in nation-state form.


The US-Canada border is geographically logical: there is the intra-Canadian isolation affected by the Canadian Shield, dense forestation on the border, and the Canadian climate driving the population to be pushed up against the southern fringe. The US-Mexico border is not this way. Kaplan points out that the American tactic of investment in remote conflicts in the Middle-East is trivially misguided (or at least that continued investment will be) compared to investment in assisting in the development in Mexico. Militarized borders trend economically and sociopolitically in the direction of the less developed nation: the solution is that a more developed and stable Mexico will create joint prosperity in the US. Over time, Mexican immigration into the US will see a demographics shift (especially in the southwestern states) which has already begun, an increase in Latino and Spanish-speaking peoples which will influence the culture of the country.

Kaplan emphasizes the joint importance (and long-term prevalence) of geography with the actions of “Great People” to self-determine. He has no illusions that geography is not a predetermined fate — and also no illusions about ignoring geographical lessons in the hopes of a post-geography world.

Highly recommended.