Very Secure

TheFleet Test Run Results and Next Steps

January 22nd, 2020

Two weeks ago I launched 2 fleets on 2 separate VMs. Each fleet connected to 7 networks.1 I was only able to connect to 7 networks per VM because I use a separate sbcl process for each network, and quicklisp uses 70MB of memory by itself. My VMs have 1GB of RAM. At the time of writing, VM1 collected 20,203 messages and VM2 collected 43,410 messages.2 An example query of the data on VM1:

fleetbotdb=> select message, target, networkname from irclog where LOWER(message) like '%btc%';
  message                              |    target     | networkname
  -------------------------------------------------------------------+---------------+-------------
  hey MrBTC                                                         | #nostalgic    | DejaToons
  get that other retard with that btc referal                       | #VHSTAPES.ORG | DejaToons
  !btc                                                              | #VHSTAPES.ORG | DejaToons
  !btc nzd                                                          | #VHSTAPES.ORG | DejaToons
  [BTC_DUMP] (ZeaS|SaInT-DeViL): -2.07% 9042.921019276757 -> 8855.5 | #pos          | D4RCnet
  Bought 0.1847727 BTC for 1640.35 USD                              | #pos          | D4RCnet
  [BTC_DUMP] (ZeaS|SaInT-DeViL): -2.34% 8852.59497206704 -> 8645.1  | #pos          | D4RCnet
  [BTC_DUMP] (ZeaS|SaInT-DeViL): -2.04% 8642.408379888288 -> 8465.9 | #pos          | D4RCnet
  [BTC_DUMP] (ZeaS|SaInT-DeViL): -2.44% 8716.312068028039 -> 8503.9 | #pos          | D4RCnet
  (9 rows)

There were a few problems I encountered that disconnected most of my bots. On VM1 it appears the only networks I am still connected to are DejaToons and deguino.net. On VM 2, Omninet. I am never 100% sure of my connection status to various channels/networks because to get that information I need to manually dig through logs.

Here are some of the error messages I received from the networks where I am sure I disconnected:

DigitalIRC - ERR_YOUREBANNEDCREEP: shire.digitalirc.org snup97 "You are not welcome on this network. G-Lined: join/part spam. Email https://tickets.digitalirc.org for more information."

Crippler - Sent me TOOMANYCHANNELS errors and then I couldn't reconnect.

GeekSheed - ERROR: "Closing Link: snup97[167.172.17.162] (User has been banned from GeekShed (You are banned from GeekShed for 8d! Reason: Malicious bots, clones and drones are prohibited by the Network TOS. :You may appeal it at http://www.geekshed.net/bans/?setby=Coyote%60&seton=*%40167.172.17.162&time=8d&reason=Malicious bots, clones and drones are prohibited by the Network TOS.))"

P2PChat - NOTICE: spinnaker.p2pchat.net roco44 "*** You are banned from P2PChat (either stay on or off (3 days))"

AustNode - ERR_YOUREBANNEDCREEP: Koala.SG.AustNode.org roco44 "You are not welcome on this network. Z-Lined: suspicious host. Email NetAdmins@AustNode.org for more information."

BDChat - NOTICE: irc.bdchat.com roco44 "*** You are banned from BDCHAT ([CaNdy_SHop_US] [CaNdy_SHop_US]). Email admin@bdchat.com for more information."

freenode - ERROR: "Closing Link: 68.183.107.30 (Excess Flood)"

SceneP2P - ERR_YOUREBANNEDCREEP: Wintermute.SceneP2P.net roco44 "You are not welcome on this network. G-Lined: Invalid channel. Email banned@scenep2p.net for more information."

On VM1 my bots logged 19,519 channel joins 19,276 channel disconnects. On VM2 4,440 joins and 4,354 disconnects. I discovered that only a few of these disconnects were due to being kicked from a channel. So somehow I am getting into reconnect/disconnect cycles that show up as spam. This gets me banned from the network.

My next steps forward are as follows:

  1. Reduce memory overhead from using quicklisp to load cl-irc and its dependencies.
  2. Create a strategy / command for being able to see which networks/channels I am currently connected to across my VMs.
  3. Investigate why I did a reconnect/disconnect dance with certain networks.
  4. I saw in the logs that some networks said I was joining too many channels. I should investiage why, since the number of channels my nicks join are capped at the network's reported max-chans-per-nick limit.
  5. Investigate Excess Flood problem with freenode.
  6. Increase delay before reconnecting to a network. Remove cl-ircs auto reconnect on kick.
  7. Publish vpatch for ircbot's reconnect bug.
  1. VM1: DigitalIRC, DejaToons, deguino.net, D4RCnet, Crippler, GeekShed, P2PChat.
    VM2: freenode, DALnet, ircHax0r, Omninet, SceneP2P, BDCHAT, and AustNode []
  2. These were messages of type PRIVMSG, i.e. normal user/bot messages. There were about 100,000 messages total if we include join/part messages. []

Computer Build Plan

January 21st, 2020

diana_coman: that's where everything else should come from; so: what's the goal of this plan of yours?
whaack: diana_coman: The goal is to ensure I have what I need and know what to do in order to execute a timely, safe, and proper build of my computer.
whaack: safe means I don't open up the possibility of breaking something, and proper means I don't make a mistake that requires me to do undo a bunch of work to fix.

First we will ensure I have what I need to build the computer.1 Below is a list of all the tools, cables, consumables, screws, and parts I will use - with their location specified in a footnote.

Tools

  • Screwdriver set2
  • Small pliers (to grip hard to reach items)3
  • Rechargeable compressed air sprayer4
  • Flashlights5

Consumables

  • Zip ties (100x 200mm and 100x 100mm)6
  • Thermal Paste 2g (4x)7
  • Thermal Paste Cleaning Supplies
    • 90% Ethyl Alcohol (about 1/2 liter)8
    • Qtips (~200x)9
    • Coffe Filters (~100x)10

Screws

  • General Screw Package:11

    • Thumb phillips screws M6 * 6 (10x)
    • hexagon head phillips screws M6 * 6 (25x)
    • Pan head phillips screws M6 * 6 (25x)
    • Steel standoffs screws M3 * 5 + 7 (15x)
    • Brass standoffs screws M3 * 5 + 7 (15x)
    • Phillips flat head coarse thread screws M5 * 10 (15x)
    • Phillips recessed truss head screw M3 * 5 (25x)
    • Phillips recessed truss head screw M3 * 6 (25x)
    • Insulation washers (25x)
  • Extra 6-32 x 1/4" screws (100x)12
  • Internal Fan Screws (4x)13
  • Thumb screw for GPU (1x)14
  • Screws for PSU (4x)15
  • 4 Hand Screws for Tempered Glass Panel16
  • 2 Thumb Screws for Back Panel17

Cables

  • PSU Cables18

    • 24pin Mobo Cable (1x)
    • 8pin CPU Cable (2x)
    • 6pin / 2pin Split PCI-e Cable (3x cables, 2 connectors)
    • SATA Cable (3x cables, 4x connectors)
    • Molex Cable (1x cables, 4x connectors)
  • Monitor Cables19

    • Power Cable
    • HDMI Cable
    • Display Port Cable
    • USB 3.0 Upstream Cable
  • Case Cables20

    • Front Panel Audio/Mic Jack Cable
    • Front Panel USB Cable
    • Four Front Panel Button / Lights Cables (+P LED, -P LED, POWER SW, RESET SW)
    • SATA Cable for case lights
  • Fan-to-motherboard cable (attached to fan) (2x)
  • CPU Fan cable (attached to CPU heatsink) (1x)
  • SATA 6Gbs cable (3x)21
  • Ethernet Cable22

Internal Components

  • Case Fans (2x)23
  • Motherboard24
  • CPU25
  • CPU Heatsink26
  • Graphics Card27
  • Ram Stick (2x)28
  • Primary SSD29
  • Backup HDD30
  • SD Card Reader I failed to purchase the right part. I ordered a card reader with the wrong bay size for my case. I will order a simple USB one through my mailing address.

Accessory Parts

Now that we have the full list of parts and where they are located we can map out a plan for building the computer. This is what is done so far:

1. The motherboard is screwed in.
2. The fan on the front-panel side is installed.
3. The CPU is locked into its slot on the motherboard.

The heatsink is currently attached to the CPU, but this was done for storage purposes. It must be unattached to apply the thermal paste.

I will first install all the parts, minus the GPU, then attach all the cables, and then install the GPU.35

0. Preperation (30min)

1. Clean and vacuum desk, setup good lighting, and remove all food/liquids from the premace.
2. Put cups/bins on desk to place screws in.
3. Comb hair and tie it in a bun (I have noticed I have dropped hairs into the case)
4. Charge air blower (Done night before)
5. Open case.
6. Do preliminary cleaning of the case with air blower.

1. CPU Installation (Estimated time: 1hr. The reason for the long time is because I need to make sure I can place the heatsink on the thermal-pasted CPU gracefully by first practicing the process a few times.)

Parts Used: CPU, CPU Heatsink (And later: CPU Power Cable)

First, I will apply thermal paste to the CPU with the one pea sized point method as recommended by Arctic, my thermal paste supplier. Then I will carefully attach the heatsink on top of the thermal pasted CPU.

2. HDD Installation (Estimated time: 10 min)

Parts Used: HDD + 4x Pan head philips M6 * 6 screws (And later: SATA cable to motherboard and PSU SATA Power Cable)

I will take out the mount from the case, and put the HDD in the mount. I will take care to think which of the two locations is the best position for the HDD, and also to consider how the SATA power cable will attach to the PSU as well as how the SATA Data transfer cable will attach to the mobo.

3. SSD Installation (Estimated time: 10 min)

Parts Used: SSD + 4x Phillips recessed truss M3 * 6 screws (And later: SATA cable to motherboard and PSU SATA Power Cable)

I will put the SSD on the bottom slot on the opposite side of the motherboard. Then I will screw it in by inserting the screws from the other side of the case into the SSD. The entry point for the screws can be seen in this picture. (I am using the SSD slot where in the picture 2 of the 4 screw holes are covered by the fan's power cable.) Just like the HDD, I will take care to consider how the two SATA cables will connect.

4. Ram Stick Installation (Estimated time: 4 min)

Parts Used: 2x Ram Sticks

I will carefully plop the two sticks into their slots, in the same place they were when I disassembled the machine.

5. Upper Left Fan Installation (Estimated time: 6 min)

Parts Used: 4x Fan Screws, 1 Fan

I will screw in the fan as positioned in the top left of this picture.

6. Plug Shit In (Estimated time: 20min)

The following cables will be attached more or less in the order listed:

Main 24pin MOBO Power cable
CPU Power Cable
Fan Power Cables (2x)
1 SATA cable from the PSU should connect to the case lights, the SSD, and the HDD.
SATA cables from HDD/SDD to MOBO.
All front panel cables (Audio/Mic Jack, USB cable, Power/Reset Button + LEDs)
PCI-e Power Cable for GPU

6. Graphics Card Installation (Estimated time: 8 min)

Parts Used: Graphics Card + 1 Thumb Screw

I will place the graphics card in the PCIe slot and then screw it in with the thumb screw.

7. Cleanup (Estimated time: 15 min)

1. Zip tie cables together.
2. Clean with compressed air again.
3. Close front and back case.
4. Place built computer under desk.

The next steps, outside the scope of this article, are to plug in the keyboard/mouse/monitor and install Centos + all necessary drivers.

  1. One missing item is the motherboard's IO Shield. This will increase the rate at which my computer collects dust. I was not able to find any shields from a preliminary search. []
  2. Located on floor next to case []
  3. Located on floor next to case []
  4. Located on floor next to case []
  5. Located on nightstand []
  6. Located in PSU Box []
  7. Located on nightstand []
  8. Located under sink in bathroom []
  9. Located under sink in bathroom []
  10. Located in cabinet under coffee machine []
  11. Located on floor next to case []
  12. Located on floor next to case []
  13. Located in parts-box in tupperwear containing fan []
  14. Located in parts-box in tupperwear containing fan []
  15. Located in PSU box in plastic box []
  16. Attached to case []
  17. Attached to case []
  18. Located in PSU box []
  19. Located under monitor or attached to monitor []
  20. Already connected to case []
  21. Located on floor next to case []
  22. Located on desk. []
  23. One located in case another located in tupperwear in parts box []
  24. Already in case []
  25. Already in case []
  26. Already in case []
  27. Located in protective sleeve inside parts-box []
  28. Located in tupperwear in parts box []
  29. Located in box on desk []
  30. Located in box on desk []
  31. Located on desk []
  32. Located on desk under the monitor []
  33. Located on desk under the monitor []
  34. Located under the desk []
  35. GPU Is installed last because it makes it harder/impossible to plug in certain cables. []

Panamá Bien Vestido

January 20th, 2020

While packing my bags for Panama I asked dorion what the gents usually wear to their weekly Junto meeting. I was happy to hear I would finally have a use for the blazer that's been collecting dust in my closet. Dorion told me that anyways he always goes out bien vestido because, "I never know who I'll meet and in a lesser part because it trolls casual 'culture.'" Well his lesser reason seemed a great reason to me. So I arrived at the youth hostel, Selina, with a tie on. I bathed in the indignation and other reactions I got from being decently dressed.

Shortly after arriving, dorion popped in the hostel for a drink. We went to Selina's rooftop which has a great view of the bay and the city's skyline. One of the bartenders working there asked us why we were both so well dressed. She then seated us at a table that had a Reserved card on it. The table was positioned to let us enjoy the nice view, and the bartender sat with us for our first drink. Our conversation floated between Spanish and English; we discussed with her shocking topics such as why the US no es el mejor país.

Later, she took a photo of us.

panama-1

After we got drinks on the roof of Selina's, Dorion and I went for a walk around Casco Viejo. We ran into a local who had grown up in the town and worked in finance in Chicago. He knew about the various buildings and he had a back and fourth with dorion about the history of the town. I (unintentionally) got a hilarious mug of him in the corner of the picture I took of one of JP Morgan's buildings.

panama-4

Iglesia de La Merced

panama-2

American Trade Hotel & Hall

panama-3

Panama Metropolitan Cathedral

panama-5

Paseo de Las Bóvedas

panama-7

whaack

panama-8

I slept in the next morning, exhausted from the previous day of travel.1 Around noon I went on a bike ride on La Cinta Costera - a road that juts out into the bay. The view was nice, but it was hot and at times the smell made me ill.

panama-9

The city has swings setup under the bridge. Because that's exactly where a parent would want their kids to hang out.

panama-10

Panama's bay changes drastically with the tide.

panama-11
panama-12

After the bike ride I returned to the hostel and then took a cab to meet jfw. We went to the roof of his building and had coffee and beer.2 We chatted about a few topics. While we were discussing his work for tmsr-os, jfw made a statement that stuck with me. He said computing may have left the world of math3 and entered the realm of biology.4 After our chat we walked over to the networking meetup. During the event I met most of the Junto crew that I would be seeing the next day.5 After the event jfw, dorion, and I got a bite at a diner.

Conspiring pageboys

panama-13

The following morning I went to go see the Miraflores Locks at the Panama Canal. It was inspiring to see big business taking advantage of a major engineering accomplishment. What would it take to get to the serenity of mind required to see this project to completion?

I was curious about what appeared to be a leak coming out of the corner where the wall of the canal meets one of the gates. You can see what I'm talking about in the picture below. If you know/have a guess why this exists, please comment.

panama-14

The ship waits patiently.

panama-15

Gates are closed.

panama-16

The water level becomes equal in each compartment, a bell rings, and those ~600 ton gates begin to open.

panama-17

The ship is pulled by trolleys.

panama-18

The gates begin to close.

panama-19

The apparent leak from the right compartment to the left compartment continues, even when the left compartment is draining and the right compartment is filling.

panama-20

The next ship begins to enter.

panama-21

After my trip to the Miraflores Locks I took another daytime stroll through Casco Viejo and then went long boarding east along the bay.

panama-29

A daytime shot of the cathedral.

panama-22

Look at that crystal clear water.6

panama-23

For dock operating hours, please refer to the moon.

panama-24

Am I back in NYC?

panama-25
panama-26
panama-27
panama-28

On the way back from long boarding I saw two siblings I had met at the hostel in a fish market and joined them for some beer and ceviche. The market has a large food court with a decent number of little restaurant fronts. As you walk in the food court all the waiters are calling you to try to get you to sit down at their table. When our waiter went to the bathroom he told us to only speak with his friend while we waited for his return. His request suggested the tables did not belong to individual restaurants and so ostensibly another waiter could swoop by and steal a client.

panama-30

After ceviche we went to climb up Cerro Ancón, a hill that overlooks the city. I had to turn around before reaching the top so I could get back in time for Junto.

Obligatory flower picture.

panama-31

A view from ~ half way up the hill.

panama-32

The below picture is not supposed to be of the vulture. I saw some rodents7 adorably hoping around. You can see two of them in the center of the pic if you look closely.

panama-33

Some buildings near the Junto meetup. I did not get a photo of El Tornillo,8 the building where the Junto meeting was held.

panama-34

I had a great time during Junto. Chad gave a nice introduction to music theory. He kept everyone engaged by making the talk a discussion rather than a monologue lecture. He even had us work out exercises from a music theory text book.

Afterwards most of the group went to dinner together. Six of us divided into two teams of 3 to do shared orders. Each squad ordered the same - a plate of cheese fries to start off and then this large meat/rice dish that was basically delicious taco filling. Dorion made an "executive decision" to douse our squadron's pile of food with hot sauce. No complaints.

It was a pleasure to meet jfw and dorion's group. The dinner was a nice mix of laughs and discussions of life goals. Seeing how jfw and dorion make good use of a time with smart individuals serves as motivation to build a similar group of friends here in CR and anywhere else I may go in the future.

  1. My flight on Monday left at 2:30pm. But I had to wake up at 3:45am to get in a cab to Santa Cruz at 4:00am so I could catch the 5:00am bus to San Jose. For future reference: tickets for the bus to San Jose can be purchased at mibus.cr []
  2. I had a coffee and he had a beer. []
  3. Where a complete understanding is the goal. []
  4. Where complexity is too great, and some parts must accepted as black boxes. []
  5. I also made a connection with someone who has available free lance work. I sent him my resume and am currently in conversation with a recruiter. []
  6. Just kidding, it's a blue wall. []
  7. Perhaps they are bunnies, but I'm not sure. []
  8. The Screw []

Spanish Pop Study - An Attempted Translation of Dollar by Becky G and Myke Towers

January 12th, 2020

During my ongoing vacation, I spent 2 hours on a youtube video bender listening to Spanish pop songs. I heard refined music performed by: Becky G, Bad Bunny, Natti Natasha, Ozuna, Rosalia, J. Balvin, Anuel AA, Jhay Cortez, and more. I went from song to song, picking the next video from one of youtube's recommendations. Working through the lyrics supplemented my usual studies1 - grammar exercises and speaking with my older Catholic landlord faltan slang practice. 2

Without further ado, my attempted translation of Dollar by Becky G and Myke Towers :

===

Becky G begins with the hook, letting Myke Towers know that she is not interested in the words-only-type.

Si tuviera un dólar cada vez (Cada vez)
Que tú me dices que me amas (¡Shoo!)
Estaría tomando té con la reina Isabel (La queen)
No pago mi renta con palabras, no valen nada (Ah)

If I had a dollar each time (each time)
That you told me you love me (shoo!)
I would be drinking tea with Queen Isabel. (The Queen)
I don't pay my rent with words, they're not worth anything.3

Tú tienes fama de picaflor (Pica, pica)
Pero conmigo eso no sirve, mi amor (No)
Tengo entrenado (Ey), el corazón (Corazón)
Y tus promesas no me llaman la atención (¡Shoo, shoo!)

You're known for being a player4 (playa, playa)
But that doesn't serve me, my love (No)
I trained (ey) my heart (heart)
And your promises don't call my attention. (shoo! shoo!)

Les dices lo mismo a las que se te atraviesan
Árbol que nace doblao nunca se endereza
No puedes tenerme (No, no)
No soy una de esas y eso a ti te jode la cabeza

You say the same to the girls who pass by you
A tree born bent never straightens
You can't have me
I'm not one of them, and that fucks with your head

Hook x2

Myke Towers responds to Becky G

Si te pagaran por cada vez que te hablaran
Ya tú fueras billonaria, tu rutina diaria
Seria ignorar todos los babosos
Que te van con la misma labia, los tienes con rabia

If you were paid for each time they talked to you5
You'd already be a billionaire,6 your daily routine
Would be to ignore all the creeps
That come to you with the same talk, you have them mad.

Si cobraras por foto
Hasta Donald Trump pidiera préstamo
Ella los DM no contesta, no
Puso que se separó de su novio
Y el Internet se cayó
Le tiran hasta los que no hablan español

If you were to charge for photos
Even Donald Trump would ask for a loan7
She doesn't answer DMs, no
She posted that she broke up with her boyfriend
And the internet fell down
They thrown themselves at her, even those that don't speak Spanish.

To be continued

  1. I listened to the songs while simultaneously reading the lyrics. A future exercise would be to try to transcribe the song before confirming the lyrics. []
  2. I learned las cinco doce (the 512) refers to Percocet 512, a muscle relaxant. And un picaflor (a hummingbird) is slang for a player. []
  3. The lyrics as reported by Google are "no vale nada" but this is likely incorrect because valer should be conjugated in the plural third person as valen, since it is "las palabras - the words" that are worth nothing. []
  4. Literally: You have the fame of a hummingbird. []
  5. Instead the correct translation may be "If you were paid for each time they talked about you" []
  6. I am uncertain about whether Ya tú fueras billonaria is translated correctly. Fueras is the imperfect subjunctive of "to be" so the line is literally translated to "Already you were (a) billionaire." But this does not make sense. So I chose to translate fueras in the indicative conditional. The point of confusion may be on 'ya'. Ya is loosely translated as "already." But it is really a different time adverb that has no equivalent in English. []
  7. Pidiera is another example of a verb where I'm confused as to why it is conjugated in the subjunctive imperfect. []

Humble Bitcoin Beginnings

January 10th, 2020

I have a vague memory of learning about bitcoin. Of course, at the moment I discovered bitcoin's existence, I did not know how central a role it would play in my life. I heard it was being used to order drugs on the Silk Road to dorms at MIT. I thought that was absolutely awesome, and soon I bought some bitcoins on Coinbase and used them to order a fake ID.1 The coolest part of buying contraband online was the currency that enabled the process. I had always raised an eyebrow at the In God We Trust money system, and this bitcoin thing appeared to have answers to some of my long standing questions. But it seemed just about no one else at MIT gave two shits about bitcoin.

How could this be? Really, I could not find anyone interested in a piece of code that leveraged number and game theory to make people fortunes? Was there another global social economic project consuming an exponentially increasing amount of energy? Was the story of the secret author Satoshi Nakamoto, the Mtgox collapse, and the arrest of Ross Ulbricht not enticing enough? Seriously, what the fuck?

I looked around and found a bitcoin group that met once a week. I attended a few sessions, but the conversation was dull. There was a lot of the, "we don't want to sound like crazy libertarians." and "we're interested in the technology but not the politics." As if there were such a thing as apolitical technology.

I also attended a small presentation at MIT by Gavin Andresen. I had a weak understanding of how the protocol worked, and at the time found his talk informative. But there was one awful habit he had where he would finish explanations with gesticulations while saying "and with some hand-wave hand-wave we get it to work."2

I went to a couple of MIT's annual Bitcoin Expositions. During my attendance I met some of the power ranger cast: Gavin Andresen,3 Andreas Antonopoulos4, James D'angelo,5 Charlie Lee,6 and Peter Todd.7 Fwiw, I found Mr. Todd reasonable. He gave a talk on why Simplified Payment Verification "SPV" wallets are junk.

I also signed up for and then later dropped a class at MIT called "Blockchain Technologies: Decentralize all the Things." As written in my first ever qntra article: If the name didn't give away the cognitively handicapped nature of the material, then the syllabus (archived) should. So yeah, there was not much to see at MIT with regards to bitcoin. Doesn't look like things have changed, either.8

  1. I was 19 at the time, usaschawitz has a 21-year-old age requirement for buying alcohol. []
  2. With some hand-wave hand-wave we make 8GB blocks work. Or with some hand-wave hand-wave we make bitcoin-without-signatures work. Why not? []
  3. Ex head power ranger. []
  4. Popular alctoin shill. []
  5. Charismatic guy who made a Bitcoin 101 series on youtube. []
  6. The Litecoin scammer who worked at Coinbase. []
  7. Power ranger with occasional moments of clarity. []
  8. The mission statement on bitcoin.mit.edu:

    The MIT Bitcoin Club is one of the first blockchain clubs in the world that continuously strives to educate members on the foundation and the latest innovation in blockchain technology. In doing so, we nurture a community of leaders that are passionate about the technology and want to contribute to the atmosphere of students leaders that aim to be at the forefront of the blockchain space. []

Computer Disassembly Notes

January 5th, 2020

The computer's case is divided into three sections. First there is the main room, the spacious center that contains the motherboard.

onarrival-3

There is a space below for the PSU.

onarrival-14

And there is a gap for routing cables between the mount for the motherboard and the back of the case.

onarrival-15

I began disassembling by trying to take out the right fan.

disassemble-1

I unplugged its power cable from the motherboard and then went to undo the zip tie that held it to other cables. I tried to properly unlock the zip tie, but after 30 minutes of frustration I just snipped it with scissors.1

disassemble-2

Removal of the right fan requires removal of the front panel. But the screws holding in the front panel are over tigthened. When I try to unscrew them I start tearing the grooves in the screw. So I was unable to remove the front panel, and thus left the fan in its spot. I went on to the other fan; I unplugged its power cable from the motherboard and unscrewed its 4 screws.

onarrival-8
disassemble-3
disassemble-4

Next up, the RAM. I laid the computer on its side so that there was no chance of the sticks falling down as I popped them out.

disassemble-7
disassemble-8

After taking out the RAM I started to unplug everything from the mobo.

First, the main power supply cable.

disassemble-9

Then the cables for the front panel lights.2

disassemble-10
disassemble-11
disassemble-12

The front panel cables enter into the main room, exit through the top into the cable storage section, and then enter back again into the main room at a lower point closer to their destination on the motherboard.

disassemble-15

disassemble-13

Next I unplugged the CPU power supply. The cable entered the main room from the bottom and climbed upwards through a gap in the space between the GPU and the motherboard. The GPU does a good job tucking in the CPU's power cable. I will need to remember to plug in the CPU power cable before installing the GPU, because you cannot pass the head of the cable through the gap between the GPU and the motherboard.

disassemble-16
disassemble-17
disassemble-18

Next I unplugged the cable3 that was connected to the mobo under the GPU.

disassemble-23
disassemble-19
disassemble-20

Then I took out the GPU. There was one thumb screw that attached it to the back panel. After undoing the screw, I popped the GPU out of its slot just like RAM sticks.

disassemble-26
disassemble-27

The cable on the bottom left was for the audio jacks for the front panel.

disassemble-28

Next I unscrewed the PSU. One screw was stuck like the screws in the front panel. But I had to get the PSU out. I used a flat head, and I pressed the screwdriver hard into the bar of the philip's cross with the least dammage. With a lot of normal force I was able to get it to turn. When I took the screw out, I learned that the difficulty came from it being the wrong screw.4

disassemble-30
disassemble-31
disassemble-32
disassemble-34

With all the motherboard's cables unpluggged and the PSU removed, I embarked on removing the mighty heat sink. This took some time. There was a lever I had to pull to release the pressure on the latches that hold the heat sink to the mounting bracket. Even once the pressure was released and the latches were unlocked, I had trouble unhooking them. There were various video guides online on how to remove the heat sink, but they all said "it's easy" and then skipped ahead without showing how they unhooked the latches. If you shake the heat sink aggressively you will stumble upon the way the latches unhook. But if you are trying to do the job cautiously, it is not immediately clear how to get them undone. The correct method is to push the latch on one side of the heat sink towards the heat sink so it pushes out the latch on the otherside. Then once you have one side unhooked you pull the heat sink in the other direction.

disassemble-33

Next I cleaned off the thermal paste on the heat sink and the CPU. As mentioned in the logs, at first I did not have a solvent to properly remove the thermal paste. I bought 90% ethyl alcohol; I could not find the 99% isopropyl BingoBoingo recommended. I scrubbed and scrubbed forever with cotton swobs and coffee filters.

disassemble-35
disassemble-36
disassemble-61

disassemble-38
disassemble-45

I cleaned the CPU while it was still locked into the motherboard. There is no better way to have that delicate part held firmly in place. If you spill a drop of solvent on the motherboard you can wait for it to evaporate, no problem. If you dammage a pin on the CPU, you're fucked.

The last step was to unscrew the motherboard. I felt a bit silly doing this. I had no other place to store the mobo, so I knew I was immediately was going to screw it back in. The process took a bit of time, because once again there were problems with some of the screws.

disassemble-50

The reflected light on the CPU's pin array was beautiful.5

disassemble-53

disassemble-55

The stripped case.6

disassemble-56

  1. I may have been able to get the zip tie if I had a bobby pin. I was using a screw driver head that was not tiny enough. []
  2. I am not 100% certain of each of these little cable's function. I will have to investigate when I open my computer back up. []
  3. This cable was for the USB slots on the front panel. []
  4. Thank you supplier who shall no longer be named. []
  5. The result of my camera work does not quite capture this. []
  6. Except for that fan... []

A Few Thoughts on Lisp and Programming in General

January 2nd, 2020

I noted in my most recent progress report for TheFleet that I have a bad methodology while programming.1 One issue is I begin to implement programs before having a good understanding of what their entire structure should look like. The larger problem is I don't fully map out plans before executing them: I write articles without outlines, disassemble computers without having necessary tools, cook new meals without recipes, go to the store without a shopping list, etc. These attempts to shortcut to a goal is the hallmark of stupidity through laziness.

The "figure it out while you go" mentality is costly when programming. Testing and fixing bugs takes time; it's a huge waste if that time goes into a script that doesn't even solve your problem. The CL development environment enables bad behavior because it reduces the friction for compiling and executing small chunks of code. Sending functions into the snappy repl can make you feel like you're doing a whole lot when in reality you're getting nothing done.

For tasks like cooking there is a clear delineation between the planning step and the execution step. However the line between mapping out a problem and writing a program to solve it is fuzzy. What is a program if not a formally defined plan?

The syntax of lisp allows for perhaps the most terse possible text representation of an abstract syntax tree. Thus it might be a good exercise to make a flow chart of what TheFleet needs to do in the form of an ast.2 But TheFleet's implementation requires concepts that I am not sure belong in that notation, like threads running functions that handle random inputs at random times in the future. So I am not certain this is a worthwhile exercise.3

As a final thought, I'd like to mention my personal understanding of the folly of using Common Lisp on a modern day machine. The beauty of lisp is its ability to neatly express solutions to closed problems. But is there a benefit from a CL program that is "15% shorter" than its python equivalent if it takes 471,556 additional lines of sbcl to be able to use it?

~/sbcl-1.4.14$ cloc ./
    1833 text files.
    1743 unique files.
    364 files ignored.

http://cloc.sourceforge.net v 1.64  T=9.72 s (153.2 files/s, 62448.5 lines/s)
---------------------------------------------------------------------------------------
Language                             files          blank        comment           code
---------------------------------------------------------------------------------------
Lisp                                  1095          39905          75460         426310
C                                      105           4480           7760          31973
C/C++ Header                           134           1146           1847           5423
Bourne Shell                            63            767           1185           4029
Assembly                                11            721           1775           2825
D                                       45              0              0            319
make                                    24             75             60            278
HTML                                     5             10              0            185
CSS                                      3             41             11            184
Pascal                                   1              0              0             23
Windows Module Definition                3              0              0              7
---------------------------------------------------------------------------------------
SUM:                                  1489          47145          88098         471556
---------------------------------------------------------------------------------------
  1. I have ~no methodology, just a long list of stuff I know not to do. []
  2. As in draw one in my notebook. []
  3. And also I'm not certain whether lisp is the best language to implement the program in either. That said I don't plan to switch my choice of language mid project. (Although if I used python would I really be switching? I did write the web scraper for netsplite.de that grabbed the networks and their hostnames and ports in python. The only function I've written so far that was actually "in lisp" imo, was make-groups)

    (defun make-groups (lst group-size)
        "Breaks up lists into length group-size sublists, if the length of the list is not a multiple of group-size the last sublist will have a length of (mod (length lst) group-size)"
            (cond ( (null lst) nil)
    	         ( (<  (length lst) group-size) (list lst) )
    		 (t (append (list (subseq lst 0 group-size) ) (make-groups (subseq lst group-size) group-size) ) ) ) )

    []

Progress Report On TheFleet

December 31st, 2019

Yesterday, the first ships set sail accross the sea of IRC Networks to four small islands: UniBG, ShadowWorld, QuickFox, and OptiLan. The channels on these networks were empty of human activity. Most of the rows in my log db contained botspam such as

Now playing on Radio Mega-Hit: >50 Cent - Candy Shop (Feat. Olivia) (Pro50 Cent

I also attempted to dock 23 bots at DalNet, a larger network. But after the 4th or 5th bot connected, they all were kicked off the network w/ the message:

The maximum allowed connections from your host 200.100.50.25 has been exceeded.

So for the bigger networks I will either have to rotate through their channels or obtain a few more ip addresses.

**

There are two tasks I'm working on. The first is the channel-snagger, which keeps an updated list of all channels for all networks on a best effort basis. The second is fleetbot, the ircbot extension that keeps a set of bots logging the channels in that list, also on a best effort basis. Ideally channel-snagger puts the channels into a queue that fleetbot will draw from to assign channels to bots.

I. channel-snagger.lisp

Below is a list of (networkname, num_channels) for the 200 networks I found with at least one channel.

(freenode 12975)
(Frozyn 7182)
(EFnet 5070)
(DALnet 2712)
(OFTC 1874)
(synIRC 873)
(euIRC 719)
(IRCHighWay 579)
(FreeUniBG 465)
(P2P-NET 354)
(EuropNet 351)
(Mibbit 341)
(MindForge 307)
(IRC.tl 296)
(GIMPnet 286)
(SwiftIRC 278)
(SlashNET 272)
(GeekShed 269)
(PTnet 266)
(IndoGaul 238)
(AllNetwork 238)
(Aitvaras 202)
(2600net 185)
(DarkMyst 185)
(GeekNode 174)
(AnthroChat 153)
(Recycled-IRC 146)
(MagNET 122)
(UniBG 117)
(EnterTheGame 109)
(Tweakers 103)
(IdleChat 100)
(tchattons.com 99)
(Evolu.NET 99)
(Chattersworld 98)
(ForestNet 90)
(German-Elite 87)
(Otaku-IRC 86)
(VirtuaLife 84)
(SurrealChat.net 84)
(AnonNet 83)
(Chattersweb 78)
(Coolsmile.net 75)
(Gotham 74)
(DSNnet 72)
(OptiLan 66)
(Zoite 62)
(DejaToons 60)
(Sinsira 59)
(MagicStar 55)
(Apropo 54)
(SKYROCK 53)
(ForeverChat 53)
(TwistedNet 52)
(ShadowFire 52)
(IRCstorm 52)
(Immortal-Anime 52)
(DarkVoltage 52)
(GigaIRC 50)
(Chat-Solutions 47)
(Buddy.IM 46)
(SiberChat.Org 45)
(IrcWorld 45)
(Abandoned-IRC 44)
(Subluminal 42)
(Hub4Ever.Org 41)
(Xerologic 38)
(TripSit 38)
(BrasIRC 37)
(ScoutLink 36)
(DigitalIRC 36)
(BSDUnix 36)
(Anynet 35)
(LunarIRC 34)
(Global-Irc.Org 34)
(ForumCerdas 33)
(Netrusk 32)
(WNet 31)
(out-dated.net 31)
(GreekIRC 31)
(P2PChat 30)
(BrasPort 30)
(LUGS 29)
(IRCsource 28)
(MaddShark 28)
(ChatIRC 28)
(LichtSnel 27)
(ECNet 27)
(IRCnet.gr 26)
(Andromeda.Fr 26)
(NFNet 25)
(AustNode 25)
(PSIGenix 24)
(PowaNet 24)
(PC-Logix 24)
(SoylentNews 23)
(interlinked.me 23)
(Chatters 22)
(Blafasel 22)
(QuickFox 21)
(AlphaIRC 21)
(ShadowWorld.Net 20)
(ZwergenIRC 20)
(SA-IRC 20)
(Everchat 20)
(CakeForceUK 20)
(RisposteInformatiche 19)
(oz.org 19)
(mircphantom.net 19)
(IRC2 19)
(ChillNet 19)
(ChatIrc.net 19)
(tm-irc 18)
(MeFalcon 18)
(KernelPanic 18)
(Omninet 17)
(FDFnet 17)
(Albnetwork.net 17)
(Absoluty-IRC 17)
(FreshChat 16)
(Cognet 15)
(swissIRC.net 15)
(IRCFreakz 15)
(homo.net 15)
(ChatLounge 15)
(AfterX 15)
(TransAdvice 14)
(PurpleSurge 14)
(Italian-Amici 14)
(GreekChat 14)
(EntropyNet 14)
(IRC-Mania 13)
(Griefplay 13)
(Futuragora 12)
(Crippler 12)
(Chaterz.nl 12)
(Blitzed 12)
(UplinkIRC 11)
(SomeNet 11)
(PhatNET 11)
(Teepi 10)
(Striked 10)
(SceneCritique 10)
(RelaxedIRC 10)
(IRC-Ban.de 10)
(420-Hightimes 10)
(Station51.net 9)
(StarLink-IRC 8)
(RelicNet 8)
(ExodusIRC 8)
(Pilgerer 7)
(paranode.net 7)
(FyreChat 7)
(chatnets 7)
(BoredIRC 7)
(onzin.org 6)
(SoundsNWaves.net 6)
(KewlFun 6)
(D4RCnet 6)
(Black-Cell.net 5)
(IRDSI 5)
(GTAXLnet 5)
(DynastyNet 5)
(byxnet 5)
(BSDnet 5)
(AsylumNet 5)
(UKChatBox 4)
(RootWorlD 4)
(PIRC.pl 4)
(Genscripts 4)
(eXolia 4)
(Eagles-myIRC 4)
(degunino.net 4)
(BDCHAT 4)
(Ceviz 3)
(XeroMem 3)
(OSPnet 3)
(Langochat.net 3)
(ircHax0r 3)
(Fewona 3)
(Do-Dear.com 3)
(AureAWorld 3)
(DarkerNet 2)
(UnderMind 2)
(Snyde 2)
(SceneP2P 2)
(Powers.cl 2)
(MauriceRadioLibre 2)
(dreams-fr 2)
(DALNetwork 2)
(zeolia 1)
(kyunet 1)
(EsperNet 1)
(Canternet 1)
(AtomicEdge 1)

And here is the script I used to acquire the channels for these networks.1
For every network I:

  1. connect with an unauthed nick
  2. wait to receive the network's RPL_WELCOME-MESSAGE
  3. request a list of all the channels with /list
  4. wait for the RPL_LISTEND-MESSAGE, timing out after 35 seconds

I ran into a few errors related to connecting: 'BADHOST, 'USOCKET-TIMEOUT, and 'USOCKET-CONNECTION-REFUSED. I also saw an error from issuing the /list command

"You must be connected for at least 60 seconds before you can use this command."

I may want to try grabbing channels from different linknames2 to see if I can connect to the networks that threw USOCKET errors. I also need to do another scan for networks where I wait 60 seconds before issuing /list.

There are some big networks3 missing: IRCnet, Undernet, QuakeNet, Rizon, BSDUnix, Chatzona, IRC-HIspano to name a few. There are also discrepancies from the data I've collected and what's listed on netsplit.de. Netsplit.de lists EFnet having 9000+ channels but my EFnet responded to my /list command with only ~5000. It is possible this discrepancy is due to a large variance of number of channels on a day to day basis.

II. fleetbot.lisp

Before trying to connect the fleet of ships to a network I gave a look through the lisp cook book page on threads. The one tricky bit I did not see in that guide was how to do proper error handling. I'm surprised that a guide on this was excluded. From my experience dealing with threads often means dealing with file i/o or socket exceptions.

I learned that a thread cannot signal an error to its parent thread, so any error handling must occur inside the function that is passed to make-thread.4


;; handler-case is the basic "try-catch" tool of common lisp.
;; it takes an expression and then a list of error-clauses.
;; if an error occurs in the first expression, handler-case searches the error-clauses for a matching error and runs the corresponding code.
;; more details can be found here: http://www.gigamonkeys.com/book/beyond-exception-handling-conditions-and-restarts.html

;; incorrectly handles error because handler case is defined outside of the child thread that throws the error
(handler-case
  (sb-thread:make-thread
    (lambda () (error 'simple-error)))
  (simple-error () t))

;; catches error correctly since all error handling is done inside the child thread
(sb-thread:make-thread
  (lambda ()
    (handler-case
      (error 'simple-error)
      (simple-error () t))))

The biggest TODO item is to figure out a way around the maximum connections per host limit. Networks usually drop me after I connect more than 3 bots. So with a 120-channel-per-nick limit that means I can only log 360 channels per ip. The connections-per-host is likely on a per server bases rather than per network, so I could conceivably connect to 10 different links which would bring me to 3600 channels per ip. This is an ugly solution since when an individual server goes down I will miss logs from channels assigned to that server.

Some other items on the TODO list:

  • obtain the max-channels-per-nick for every network
  • learn about file descriptors + sockets. Look into the Select (2) syscall error
  • figure out the Socket error in "connect": EINTR (Interrupted system call) [Condition of type SB-BSD-SOCKETS:INTERRUPTED-ERROR]
  • log when a ship joins or leaves a channel

Lastly, a note on my methodology. After speaking with trinque and diana_coman and doing a bit of reflection I realized I have a common Common Lisp problem. My reasons for using the language are essentially that I think it's in fashion.

CL+emacs+slime lubes up a workflow that is painful with languages like c.5 Instead of using this to my advantage once my program is well thought out, i've been whackin' away: testing half-baked-functions as they're written, tweaking knobs randomly until something appears to work, patting myself on the pack for functions that do work, etc. etc. Going forward I will focus on scoping out the problem and fixing my own misconceptions before putting anything into the repl.

  1. The function populate-networks-with-channels takes a plist of networks from the channel-snagger and attempts to insert into that plist a list of channels with key :channels. If no channels are found, the value of :channels becomes a symbol representing an error. []
  2. A linkname is the hostname of an individual server on a network. []
  3. Big in terms of reported number of users and channels, but as I saw the reports on netsplite.de may be wildly inaccurate. []
  4. This makes sense. The main thread continues executing and leaves the "try-catch" block when the subthread gets spawned. So if the error were to be caught in the main thread, then it would have to schedule the catch clause at some random point further in its execution. []
  5. The process of testing a function you wrote by sending it from the file you're working on into a repl. []

Thoughts on Shrysr Leaving Younghands and Asciilifeform's Excommunication

December 28th, 2019

I'm taking the time to write about shrysr leaving, not for the sole purpose of passing judgement,1 but to reflect on my own situation and what I think about the cult aspects of younghands and tmsr. I can't discuss shrysr's departure without sharing my thoughts on the rating changes with asciilifeform. I said previously that I wasn't going to speak on that subject, but what can you do.

So to begin with shrysr, I believe during his last conversation with diana_coman she correctly assessed why he wanted to leave. I had internally experienced a flow of thoughts that mirrored the reasons diana_coman accused shrysr for packing his bags. My thoughts went something like ~ diana_coman has got me off my ass, helped me settle into a nice apartment, motivated me to get my hours done in the saltmines, prevented me from making bad investments after nights of drinking, helped me organize my schedule for 11 weeks straight, pulled me out of the haze of pot, put me to work on an interesting project, helped me acquire a personal computer, given me better methods to become bilingual, read all my articles and commented on them, etc. etc. But now there's nothing to stop me from walking away. I will continue my life at a much higher comfort level, and I can enjoy that comfort while dropping the hard work and getting back to surfing and weed. And I have the perfect excuse - asciilifeform got excommunicated unjustly, and I just won't stand for that! I entertained this thought, but let it pass. By acting on it I would be simultaneously betraying diana_coman and working against my best interest.

So I see shrysr's decision to leave as selfish2 and stupid. He's cashing out early and leaving diana_coman to eat a loss of time invested. Based on my own experience and what he said himself about receiving 10x the attention from diana_coman than from those he paid, I believe he would develop more at DCU than anywhere else. In sincerity I wish him the best of luck on his journey, I hope that he works harder than ever and blogs about his success.

But I do not see that happening. His website looks great now and has a handsome picture of him in some lab gear, but his blog has been lacking new content since he left. As far as I can tell, he has given up a path to meaningful and interesting academic work to twiddle css parameters until he makes his site shiny enough for him to get paid six figures of monopoly money.

The excommunication of asciilifeform is a more complicated matter. I have tremendous respect for him, and the situation has left me in quite a knot. I believe his side of the story and had I submitted to training under him, which I considered, I would likely be on the other side of the fence.3 He built tons of infrastructure and worked loyally for mp and others, and seeing him tossed to the side after his effort makes me believe it naive to become attached to any relationships within tmsr.

The only way I reconcile his having been tossed out is by hanging onto the idea that tmsr is only a place to grow and the moment the derivative of one's graph of progress over time becomes negative, that's it - no matter the max y value achieved. I am most cautious and aware of one point asciilifeform made, namely that mp picking up a bunch of noobs is perhaps his strategy to stay safely seated on his throne and keep the council well indoctrinated.4 There's not much I can retort to this, as it is true I trade my fidelity for a path to growth. I anticipate asciilifeform will call me a 'chained biorobot', and to some degree he will be right. But I would rather be a chained lion than an independent sand gnat, free to fly where I'd like --- until a gust of wind sweeps me to sea.

I don't doubt that shrysr leaving and running into the arms of asciilifeform is avoidance behavior. I think it is even worth gently reminding asciilifeform about his own prediction that leeches will come trying to make friends. Maybe now that shrysr is done sapping from diana_coman he'll see if he can get something from asciilifeform.

I do have doubts about the justification of asciilifeform's excommunication. As strong as those doubts are, I don't plan to use them as an excuse desert diana_coman and younghands. I hope asciilifeform respects that I took an oath and doesn't ban me from his chan for it. But I will see myself out if requested because I understand he sees diana_coman as chained to mp, and I would follow diana_coman's orders to leave his channel should I be so instructed. I have grown under her guidance, and I don't plan to start making exceptions to my pledge. Diana Coman keeps me "hypnotized" because she has this habit of giving advice that is in my self-interest to follow.5

  1. Although I will. []
  2. Misguidedly selfish. []
  3. The fence asciilifeform predicted would exist. []
  4. There are various other warnings asciilifeform's made that keep me on my toes. For example, mp is a talented writer with tits by his side. I don't question his ability to convince me of anything. []
  5. Even though following the advice may be painful in the short term. []

Review of An Outpost of Progress by Joseph Conrad

December 27th, 2019

Society, not from any tenderness, but because of its strange needs, had taken care of those two men, forbidding them all independent thought, all initiative, all departure from routine, and forbidding it under pain of death.

-Joseph Conrad, An Outpost of Progress

In Conrad's An Outpost of Progress two "men" have their umbilical chords that tether them to society severed. The protagonists Kayerts and Carlier are appointed first and second in command of a trading post after being dropped off on the coast of Africa. They begin their adventure full of excitement while the director of the Great Trading Company sails away, happy to leave the two imbeciles to fend for themselves. Kayerts and Carlier's self-deception and inability to perceive their environment eventually leads them to fight to the death over a sugar cube.

The short story is sprinkled with sarcasm and irony that mirror false promises of society. The irony begins with the title, An Outpost of Progress. There is no progress anywhere in the outpost, only a few white men withering away. The duo's doom is foreshadowed by the old stager, who, "with a quiet smile" says, "They will form themselves there." When the ship returns at the end of the story, Conrad informs us The Great Trading Company has become The Great Civilization Company "since we know that civilization follows trade." Kayerts and Carlier believe the ideas that Conrad intends to be ironic, while other characters in the book know what really goes on at the outpost.

The characters have different levels of understanding of the true nature of The Outpost of Progress, but they all participate in their own form of self-deception. Makola, the local on staff, has this thing with believing in evil spirits. Gobila, an old man from a neighboring village, believes white men are all brothers and immortals.1 Kayerts and Carlier continually kid themselves with regards to their own importance. Carlier says, "In a hundred years, there will be perhaps a town here. Quays, and warehouses, and barracks, and-and-billiard-rooms. Civilization, my boy, and virtue-and all. And then, chaps will read that two good fellows, Kayerts and Carlier, were the first civilized men to live in this very spot!" Carlier forgets that there was a pioneer before them who "died of fever." At one point the two read some literature lying around that contain protagonists with good qualities. Conrard writes that Kayerts and Carlier "discounted their virtues, suspected their motives, decried their successes, scandalized at their duplicity, or were doubtful about their courage." The two needed to discredit imgainary betters to cope with their personal failures.

Kayerts and Carlier are similar but not the same. Carlier is lazy just like Kayerts, but there are clues that show he has an inkling of intelligence. He does not swallow the director's flattery as does Kayerts. Later when they pass the grave of the first person put in charge of the outpost, Conrad's description of Carlier's question:

"He died of fever, didn't he?" muttered Carlier, stopping short.

hints at Carlier's suspicion of the narrative of that death. At the end of the story, Carlier has a moment of clarity. He has an independent thought, takes initiative, and breaks routine. Carlier admits out loud he and Kayerts are slave dealers and goes to get a sugar cube for coffee. In response, Kayerts acts on behalf of society and shoots Carlier.2 Having completed his duty to society, Kayerts hangs himself on the cross over the first pioneer's grave.

An Outpost of Progress is worth a few passes.3 Conrad writes that men are not able to grasp their surroundings, and meanwhile places tiny clues4 that are easily missed. The reader needs to be engaged to avoid the fate of Kayerts and Carlier.

  1. He does not let the death of the first white man from the Great Trading Company shake this belief. []
  2. At this moment Kayerts's level of self-deception becomes so high that he actually believes he has been shot by Carlier. []
  3. I was assigned to read the short story by diana_coma. This is perhaps the first book (albeit it's only ~30 pages) that I read a few times in succession. Conrad puts in foreshadowing that can only be recognized on subsequent rereads. For example, Carlier makes a note to Kayerts about how sturdy the cross is that he put upright and mentions that he was able to hang from it with both hands. This description is ominous when the reader knows Kayerts's fate. []
  4. Such as Carlier's mannerism demonstrating that he questions whether the first pioneer really died of fever. []