Very Secure

J.C. Catford's A Practical Introduction to Phonetics

December 26th, 2019

It may be worth drawing attention to the fact that the title of this book is, designedly, 'A Practical Introduction to Phonetics' and not 'An Introduction to Practical Phonetics', for it is, indeed, an introduction to general, or theoretical, phonetics, though it proceeds towards that goal in a highly practical way.

Readers are introduced to the phonetic classification of the sounds of speech by means of a series of simple introspective experiments carried out inside their own vocal tracts, their own throats and mouths. By actually making sounds (very often silently) and attending to the muscular sensations that accompany their production one can discover how they are produced and learn how to describe and classify them.

At first sight 'making sounds silently' may appear contradictory, but, as Abercrombie (1967) has aptly pointed out, speech is 'audible gesture' and the principal aim of this book is to enable the reader to discover and to analyse the gestural aspect of speech (upon which most phonetic classification is based) and to bring it under conscious control. This must be done, to a large extent, in silence, since the auditory sensations of loud speech tend to mask the motor sensations, which are the perceptual accompaniment of the gestural aspect of speech.

That this kind of experimentation is an effective means of acquiring a knowledge of the categories and principles of general phonetics I know from personal experience, for this was precisely how I learned phonetics as a boy, without a teacher, eagerly reading Sweet's Primer of Phonetics and constantly experimenting in my own vocal tract.

Although, as this reference to boyhood experience suggests, phonetics is a fascinating hobby for young people, it is primarily an indispensable tool for all those adults who have to work with language: students of linguistics, teachers and students of languages, teachers of the deaf, the hearing-impaired themselves who may be striving to acquire intelligible speech, actors, and many others. Armed with the understanding of the basic principles of phonetics which this book seeks to inculcate, they should be able to read and fully understand any specialist work on whatever aspect of phonetics is of special interest to them.

Much of the material of the book has been used for some years past at the University of Michigan, in teaching phonetics to large groups of students of linguistics, speech pathology, anthropology, languages, education, drama, and many other fields. I am grateful to all those students who contributed comments and suggestions, and I should also like to thank Dr Harriet Mills who read most of the text and made numerous valuable criticisms.

J. C. C.
AnnArbor,
Februam 1988

From the preface to the 2nd edition of J.C. Catford's A Practical Introduction to Phonetics

Catford's book on phonetics deserves more than a footnote in my incomplete Differences Between English-Spanish Pronunciation series. Reading and doing the exercises in A Practical Introduction to Phonetics is a pleasure. The curriculum of the average ESL-producing American school lacks a study of the art of pronunciation. Not only is the ESLtard unable to speak another language, but they1 don't understand their own ability pronounce words in their mother tongue! They rely on subconscious muscle memory acquired at a young age. A Practical Introduction to Phonetics's terse explanations, abstract diagrams,2 and bite-sized exercises provide a means for adult Americans to recover from one of the many missing elements in their education.

I became interested in understanding pronunciation after reading Bernard Shaw's Pygmalion. Inspired by the phonetician protagonist, I sought out a book on phonetics. A comment on the Amazon page of some mammoth linguistic textbook recommended Catford's book as a good way to learn about the field. After reading the preface and introduction in a pdf version found on b-ok.org, I bought a paper copy. The preface3 contains a gem of advice: when you attempt to pronounce new words, you need to mouth them out silently so you can focus on the position of your vocal tract organs. Their form determines the sound wave you will produce, but it is difficult to determine their position when they are vibrating from the air blown out by your lungs.4

The book has an intelligent layout of exercises. The exercises isolate concepts and slowly build off of each other. Learning to control one's vocal tract with these exercises is a good way to learn-to-learn, since you can practice phonetics at anytime without any props.5 After I learned how to pronounce many of the phonemes in the book, I was confident in my ability to learn how to make other sounds.6

Going through A Practical Introduction to Phonetics helped me fix long standing problems with my Spanish pronunciation. From the perspective of Catford's book, if you try to learn "just the Spanish r trill" then you are jumping ahead to exercise 44 and skipping fundamentals. It is better to take the time to learn the many different sounds from the many different languages in Catford's book than to tunnel vision a target foreign language.

  1. we []
  2. The book has anatomical diagrams placed next to schematics of similar devices to help illustrate the function of an organ. []
  3. The one quoted above. []
  4. When learning to pronounce foreign words the intuitive process is to repeatedly say a word until the sound made matches the sound produced by the foreign speaker. The folly of this method can be readily explained by an analogy to learning an instrument.

    Imagine while being instructed on how to play the piano you were asked to play back an isolated note. Instead of watching the instructor to see which key he pressed, you looked away and listened to the sound made and tried to press each key until you could hear the matching note. This ridiculous method is the way most people attempt to mimic the creation of a sound in a foreign language.

    Instead of trying to match the audio output directly, one should try to match the articulation of the foreigner. The correct sound will follow. []

  5. But if you live with other people, they may not be too amused once you start enunciating all your new phonemes. []
  6. I taught myself the loud finger-in-mouth dog whistle. This one must be practiced alone. []

TheFleet - A Systematic Exploration of the IRC Space

December 25th, 2019

TheFleet is a set of bots that will sail across the digital ocean and dock at the ports of the 260 or so irc networks listed on netsplit.de. The goal of the project is to do a systematic exploration of what is there. The first step is to collect the hostname, port, and list of all active channels for each irc network. The next step is to make a script that parks a logging bot in each found channel. There needs to be a separate script making sure the fleet of bots remain connected. TheFleet must have an interface for viewing the data collected.

To obtain a list of all channels for all networks I wrote a script that scrapes information off netsplit.de. This morning diana_coman informed me of a simpler method to get the channel list for each network with the command /list. I still need a way to get the list of channels from /list as a structured piece of data. My heathen client Limechat just opens up a popup that I can scroll through. I will look into seeing if I can use the backbone of logbot, :cl-irc, to create a script that grabs all the channels from every irc network using the /list command. I will format my list of all networks with all their channels into an sexpr structured as a list of plists, where each plist looks like1 ~

(:network "freenode" :host "irc.freenode.net"
:port 6667 :channels ("#ossasepia" "#trilema" "#lisp"))

Once I have the networks mapped to their channels structured as a list of plists, the next step is to iterate through the plists and park a logging bot in every channel. I plan to use a modification of trinque's logbot pressed to ben_vulpes's logbot-multiple-channels-corrected vpatch. The first modification is to change the db schema to include a column, "network", for the log table.2 Then I need to create a function connect-fleet. connect-fleet iterates through all the networks, and for each network divides its channels into lists the length of the network's max number of channels allowed per nick. For every channel group, a new thread is created with a bot connected to all channels in the group. The code is sketched out below. make-fleetbot and fleetbot-connect-thread should be small modifications to their corresponding make-logbot and logbot-connect-thread. max-channels-per-nick may wind up a hard coded lookup table for the ~260 or so irc networks.

(defun connect-fleet (networks)
  "Logs every channel in each irc network in networks"
  (mapcar #'connect-to-all-channels networks))

(defun connect-to-all-channels (network)
  "Connects a logging bot to all channels in the network, each bot runs in its own thread and connects to as many channels as possible."
  (mapcar
   (lambda (channel-group) (connect-bot-to-channel-group network channel-group))
   (get-network-channel-groups network)))

(defun connect-bot-to-channel-group (network channel-group)
  "Connects a bot to the channels in channel-group from network network and returns a plist containing the bot and the connection thread."
  (let ( (bot (make-fleetbot :host (getf network :host) :port (getf network :port) :channels channel-group)))
    (list :bot bot :thread (fleetbot-connect-thread bot))))

(defun get-network-channel-groups (network)
    "Takes a network and returns a list of a list of channels. The channels are grouped into lists the length of the max number of channels allowed per nick "
    (make-groups (getf network :channels) (max-channels-per-nick network)))

(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)))))

(defun max-channels-per-nick (network)
  "TODO: Create a way to find out the max channels allowed per nick for every network. The limit for freenode is 120."
  120)

(defun make-fleetbot (&key host port channels)
  "TODO: Implement")

(defun fleetbot-connect-thread (bot)
  "TODO: Implement")

My plan is to create 1 process for each irc network and then have each process create num-channels / max-channels-per-nick subthreads. Each subthread has a logbot connected to max-channels-per-nick channels.3 One question is whether or not there is a limit I will surpass of total-processes * total-subthreads allowed per VM. There should be about 260 processes each with a maximum of roughly 550 subthreads.4

The next step is to create a process on another server that makes sure that TheFleet is up and running, resurfacing ships whenever they sink. We can monitor the processes for each irc network, restarting them if they get killed. It will be more tricky to find partial deaths. We need to make sure that each subthread within each alive process is running with a connected bot. That is where the swank server may come in handy, each process should allow for another process to connect and issue commands in its sbcl environment. The script that is checking the individual subthreads can run on the same VM as TheFleet.

Once I have a fleet of bots connected I plan to make a simple web interface to visualize the db. The homepage will be a list of networks where each network links to a long unpaginated list of all channels sorted by activity.5 Channels can be clicked to see their logs displayed in the same daily format as i.e. logs.ossasepia.com.

To be continued.

  1. It may be worth including the key :linknames which points to a list of all the servers that comprise the network. We may also want to keep the channel list constantly updated as TheFleet is running, connecting to new channels as they appear for the first time in subsequent calls to /list. []
  2. Currently the logstable has the columns id, target, message, host, source, user, received_at:

                      id                  |  target   | message |        host         | source |  user   |        received_at
    --------------------------------------+-----------+---------+---------------------+--------+---------+----------------------------
     1a1aaa4e-41a0-4971-96e3-fe5d62d63649 | #whaacked | yo      | unaffiliated/whaack | whaack | ~whaack | 2019-12-24 19:24:04.979817

    The column names (which I believe are chosen to match :cl-irc's naming system) are a bit confusing, for example target is the word used for channel. I am not sure of the distinction between the columns "source" and "user", both of which imo should be "nick". []

  3. This means that I may move the logic of the connect-fleet function to a bash script. I don't know how to create a different top level process from within sbcl and I don't think it is possible unless I import a library to issue system commands. []
  4. Only freenode should take 550 or so bots to connect to all the channels. Most of the networks should require between 1-30 bots and consequently 1-30 subthreads. []
  5. The question of how to figure out which channel's logs to read will need some pondering. []

Humility, Self-Respect

December 23rd, 2019

The past ten weeks at DCU1 have both humbled me and increased my self-respect. Gaining self-respect while being humbled may sound contradictory. When someone is humbled they are made aware of their lower status. Self-respect comes from valuing oneself. So it would seem natural to lose self-respect when one is humbled. But if one does not have a real assessment of themselves, and instead their confidence comes from a distorted self-view, then they do not have self-respect at all. There is an aspect of self-respect hidden in the etymology. It is the ability to self-re-spect, as in look at oneself again. If you have confidence based on reality then self-respect is easy. If confidence is built on false premises then self-respect is difficult, because the moment you actually look at what's in the mirror you will break that flimsy confidence.

When I started at DCU, I produced an article titled What I Find Worthy of My Time. I tried to be humble with the content, but only barely, and nothing could make up for that pretentious title anyways. Pretentious is another word worth examining. I thought it meant "full of oneself" but that is not its meaning. American Heritage Dictionary gives the definition,

Claiming that or behaving as if one is important or deserving of merit when such is not the case: a pretentious socialite.2

I was claiming I found the time I spent valuable in order to signal my (false) sense of importance.

Weekly schedules and reviews revealed the title's foolishness. What I find worthy of my time? My eod/weekly reports said: anything! Week after week I had to admit "well.. I was going to get that done but then a surfpal came over..." or "I planned to surf for only 15 hours this week but really it was more like 30 hours..." Diana Coman told me she gathered I did not value myself too highly. Upon examination this made sense. If I valued myself, then why would I be so willing to give up time to other people or base activities? Clearly, I did not believe in my capability to use my time wisely. My actions showed I valued the dopamine kick of riding waves for a few hours higher than what I figured I could get done in the equivilant time.

Thankfully the problem of undervaluing my work is fading away. Sometimes there are setbacks, yesterday I spent over 30 minutes believing there was something wrong with my new computer because I didn't press the on button. When I waste time like that, man do I want to just start paddling for some waves. But often only a few minutes of work leads to a major life improvement. A one hour grammar study session cleared up a misunderstanding I've had for years about a large category of phrases in Spanish. Finding where to get a mosquito net will improve my sleep for the next nine months. I figured out a plan to get my fleet of bots connected to freenode with a spare fifteen minutes. These gains that occur from small effort make me question myself anytime I think it's a good idea to wander away from my desk.

Going forward I would like my writing to portray an accurate self-view that demonstrates both humility and self-respect. This is a challenge since it is easy to come off as either pretentious3 or unnecessarily meek. The best way to accomplish my goal is not to focus on what words to use while writing, but rather to do good work every day. Then I can publish self-respecting, humble pieces by just writing about what I do.

  1. younghands.club []
  2. This is the first definition of three. The other two are:

    Showing or betraying an attitude of superiority: made pretentious remarks about his education.
    Marked by an extravagant or presumptuous outward show; ostentatious: a pretentious house.

    []

  3. For example I wrote another article titled Candidate components for whaack's first build. The wording implies I am some authority on the matter surveying my options, which was not the case. []

My First Summer In The Saltmines

December 23rd, 2019

I entered the saltmines for the first time at 17. I had picked up a few programming skills at a younger age that helped me land a job over the summer. The first skill I acquired, which still helps me to this day, is the ability to type quickly. In early middle school I had a weekly class where we used a program called Type To Learn. Doing exercises from that program formed habits that permit me a 110wpm typing speed. Towards the end of middle school, I took my first programming class. I used RealBasic to program some interactive visual animations. I remember distinctly making a ball bounce on a screen; it grew and shrank as it went up and down since its size was defined as a function of its y coordinate. With some free time I played with Autoscript V3, a programming language for windows that had readily available functions for simulating key presses and mouse movements. Then later I learned a bit of scheme and java in high school classes. During free time in high school I taught myself some python and set up a web server running django. The programming experience I obtained by 17 is much less than a kid can/should have at that age, but it was more than most do.

So with these basic skills I got an internship at Morgan Stanley through my high school Stuyvesant. The internship was a mentorship program where I met for lunch weekly with one employee while working for a separate team within the company. My mentor was the salesman type. He told me to read How to Win Friends and Influence People by Dale Carnegie. According to him, that was the most important book to succeed in business. I learned from the book something akin to the idea that people do what they think is in there best interest. But I partially blame Mr. Carnegie for my having picked up the bad habit of bending what I say to match what I believe people want to hear.

For the job portion of the mentorship program, I was assigned to a team of three close friends. They had joined Morgan Stanley together and, unlike my social mentor, kept separate from the other employees. In the only meeting I went to with them, they got into a loud fight with another team.

We worked on a project called TAP, Temporary Access Protocol. Morgan Stanley had just gone through a merger or some other major bureaucratic event that had changed compliance rules throughout the company. I was supposed to help the team build a unix tool where users could request permission to access files and a superior could grant that permission for a set period of time. The work they gave me was first to teach myself perl and then do some exercises to learn how to write regular expressions. The team also had me study the Kerberos authentication protocol. So for a big chunk of the internship I was getting paid $15/hour to learn. Eventually I had to write a piece of code that sent out an email when an event happened, and I ended the internship doing some QA testing for the team.

My cubicle was positioned next to this loud, fat lady. While I was teaching myself perl she just filed her nails, making a phone call now and then. Naive to the way of the world, I was surprised that someone could work in an amazing company like Morgan Stanley while doing jack shit. At lunch one day I asked my team leader just what is it she does here. He explained to me that there were many people in the company who did nothing, and those who did do something could usually have their jobs replaced by a script.1

There was more ridiculousness I saw go on within the walls of Morgan Stanley's skyscraper at One New York Plaza near Bowling Green. My classmate at Stuyvesant who also got an internship there had been abandoned by his team. His manager never gave him any assignment, so he would just come to work for 40 hours a week and be paid to do whatever he liked at his desk. He used his paid free time to work on some graphic art and make a video game. Recalling the insanity at Morgan Stanley only serves to reinforce my "extract from" rather than "work for" attitude towards the salt mines.

  1. He warned that it was not good politics to write said scripts. []

The Preassembled Machine

December 22nd, 2019

The ever helpful ticos unboxed all the parts I ordered1 and assembled my computer for me. It looks reasonably put together, but my knowledge of computer assembly is zilch. I don't even know where I'd place my two hard drives with this setup.

ticocomp-1

ticocomp-2

The interface to the motherboard has no cover. That appears a recipe to expediate the dust collecting process.

ticocomp-3

  1. Save for the SD card reader, which they did not include and did not bother to tell me it was missing until after I was picking up the package from the post office. []

Finding Meaning in a Deterministic World (Part 4)

December 22nd, 2019

Continued from part 3.

The best shot at finding one's way is through submission to a worthy master. Left alone, one is destined to explore paths that lead to nowhere. Only through following the instructions of someone who knows which branches to follow and which to avoid can one move efficiently towards a goal. Thus, in a quest for some notion of individuality I have wound up on my knees.

The process of submitting to diana_coman and joining young hands began when I announced my plans in channel to move to Costa Rica and start doing something with my life. My message was not directed to her, but diana_coman congratulated me and asked what I had been working on. To which I had to respond ~ "nothing." She invited me to #ossasepia1 and advised me to switch my attitude from "I can start helping" to "I'll ask for help and do what I'm asked to do, today."

Speaking with diana_coman, which started on September 11th and has continued to the present, has changed my view of the people who comprise2 TMSR. I did not have a full appreciation of her mental prowess until we had a few back and fourths. Her ability to parse my own words better than I could myself and quickly reply to messages with meaningful responses is something I could not have understood by just reading her blog. Having gained tremendous respect for diana_coman, I also readjusted my opinion of the other lords.3

Shortly after speaking with diana_coman, I submitted to her and joined young hands. I don't recall the exact moment I pledged because it felt only a formality. From the moment I begun conversing with diana_coman, I was following her advice.4 She helped me make important decisions that affect me to this day. For example, before I pledged diana_coman motivated me to be more systematic in my search for a place to live in Guanacaste and make more out of my trip to Japan and Korea by assigning me to document the journey.5

Diana Coman played her hand first and made it in my best interest to submit to her. It is my duty to return the favor and make it in her best interest to remain my master. I started with doubts on my ability to do the later, but respect for myself and diana_coman6 has calmed those worries. I'm grateful for the way my interest in bitcoin helped me find a way to agency7 via the unexpected path of submission to diana_coman's judgement.

  1. Technically to #spyked as well. []
  2. I incorrectly wrote the word comprise as compromise when I published this article. []
  3. When I was passively reading the logs, I the ridiculous notion that the lords who didn't speak much in #trilema didn't do much either. Gotta watch out for the quiet ones. []
  4. Well, Will's "surprisingly" convenient interpretation of her advice. []
  5. With a great camera, too! []
  6. Respecting your master means respecting their ability to choose their pages. []
  7. And thus meaning. []

Finding Meaning in a Deterministic World (Part 3)

December 21st, 2019

Continued from part 2.

Men have agency, but they pay a price for every wrong decision. What, is one going to act irrationally to prove to themselves they have free will? No, despite having agency men must try to make the right turn at every juncture. That is the meaning of life, to come up with the best move for each proposed game as you walk along destiny's path.

Which games to play and which to ignore? This is the most important question in the world. The first game to play is obvious. It is the game of physical health. To be lazy about the maintenance of one's own body is a deep moral failure.1 No matter what you decide to do it always pays to be well fed and well rested.

The next game to play is loosely titled ~ take the bitcoins2 from the USG and put them in the hands of The Most Serene Republic. Yes, of all the things one could do with their life I see no wiser choice than to partake in a variant of this game. Not only does playing pay out handsomely,3 but the act helps kill the cancerous state.

Having a general notion of this game, but not knowing who or what comprised TMSR, I wandered into a chat channel4 with men having conversation that demonstrated they had a better understanding of everything. regarding bitcoin. I went in and out of the channel, making a few interactions and reading the logs, but I never engaged fully for reasons that can be summarized with the words cowardice and vanity. I was intimidated5 by those who understood this game far better than me and feared the work required to play.

Continue to part 4

  1. This is my memory of a quote from trilema about fat people, but I am unable to find the link to the source. []
  2. The value created by collectively collecting bitcoins is a fine example of how people create meaning. Without self conscious entities being the ones firing transactions, bitcoin would just be a set of gas molecules playing out a process. []
  3. Provided you can safely keep a bitstring a secret. Not an easy task! []
  4. We are jumping back in time to late 2014 / early 2015. []
  5. I incorrectly wrote the word intimidated as intimated when I published this article. []

Finding Meaning in a Deterministic World (Part 2)

December 19th, 2019

Continued from part 1.

Philosophizing is nothing but mental masturbation unless it guides one's decisions. With this in mind, I needed a way to rationalize taking action while believing in determinism. The paradoxical answer I've come up with is: it was predetermined that men would have agency.

All events to come will be played out according to the laws of physics. But this is not mutually exclusive with agency. When one observes two processes or pieces of matter interacting, they can describe one as the causant and the other as the reactant.1 With a flame under a pot of water, the flame is the causant and the water is the reactant. With or without the water in the pot, the flame remains a flame. With or without the flame, the water in the pot turns to gas or stays a liquid. Agency is the state of being the flame.2

Given men have agency, the inner workings of the mind will be a major cause of one's life outcomes. So you can send any "oh determinism means no free will means no reason I should try" ideas packing. That settled, we can question what to do with one's life.

The way I answered that a year ago was to take the least resistance path to what I perceived would bring happiness: weed, surfing, and girls. I have no regrets and the surf lifestyle is certainly better than the lifestyle of the sad lot of office drones in Goolag. But having no regrets does not mean I am happy with the choices I made.

Although men have agency, one is not free from the consequence of one's actions or lack thereof. As much as I enjoyed myself, I felt pain from seeing my btc addy have its UTXO's turn into STXO's.3 In addition to getting poorer I was getting dumber, actively by smoking weed and passively by forgoing intellectual activities such as learning a new language. I knew I was stunting my development, but I did not understand4 to what degree.

Continue to part 3

  1. Please forget your chemistry lingo, I'm making my own words here! []
  2. Since reactions can happen in simultaneous directions, agency is scalar. []
  3. spent transaction outputs. []
  4. Or rather hid from myself []

Setting up trinque's logbot on centos 6 with sbcl, quicklisp, swank, and postgres

December 19th, 2019

While this guide goes over how to setup logbot, it should be a useful reference for anyone who wants to start a sbcl process on a remote machine and then be able to interact with that process through their local repl1 - connecting / disconnecting and firing off subthreads at will.

I. Install SBCL 1.4.14

Connect to your centos6 VM as root. You can download sbcl 1.4.14 from my new codeshelf.2

wget http://ztkfg.com/wp-content/uploads/codeshelf/logbot_on_centos6/sbcl-1.4.14-x86-64-linux-binary.tar.bz2
keksum sbcl-1.4.14-x86-64-linux-binary.tar.bz2
3ed51048236e419fb0d0321a1dd71f33da7fa2055682824cb07a2bda2053b3d3925510d34fcae3e9727f24bf3398bbc342b6c2fd86d12ceb7b94eeba0e0c57a0

bzip2 -cd sbcl-1.4.14-x86-64-linux-binary.tar.bz2 | tar xvf -
cd sbcl-1.4.14-x86-64-linux
./install.sh

II. Install quicklisp and swank.

Create and ssh into the user that will be running your program.3
Then download quicklisp either from quicklisp.org or from my codeshelf.

wget http://ztkfg.com/wp-content/uploads/codeshelf/logbot_on_centos6/quicklisp.lisp
keksum quicklisp.lisp
f71b197472043b0bf7cce9e44437e75b485ca3d6f32eb3e7da5687d94964b535aadc059e4cf34ad42927cb18de044aa2ac93894193d2e5ffec5ceabde948c25a

Load quicklisp, then inside the repl: install quicklisp, set (load "~/quicklisp/setup.lisp") to run when you start sbcl, then install slime so that you can start a swank server.

sbcl --load quicklisp.lisp

(quicklisp-quickstart:install)
(ql:add-to-init-file)
(ql:quickload "quicklisp-slime-helper")
(quit)

III. Start and connect to the swank server.

Make a file named start_swank.lisp, with the following contents:4

(defvar *alive* t)
(load "~/quicklisp/setup.lisp")
(ql:quickload :swank)
(swank:create-server)
(loop (sleep 10000) (if (not *alive*) (quit)))

then start the server.

nohup sbcl --script start_swank.lisp &

Now you have a swank server running. If you have a local emacs with slime installed, you can connect by using a terminal to start an ssh tunnel

ssh -L 4005:localhost:4005 USER@123.123.123.1235

and then within emacs run slime-connect to connect to the swank-server on localhost with port 4005

m-x slime-connect; ret; ret;

If you enter

*alive*

into the repl and get back T, you are connected!

IV. Grab trinque's source.

UPDATE: If you want to connect to multiple channels, you'll want ben_vulple's vpatch logbot-multiple-channels-correct

The vpatches that constitute trinque's code can be found here. Some of the vpatches use keccak for hashing, some use sha512sum. So you will need two versions of V, or a V that can handle both forms of hashing, to press everything.

Once you've grabbed the sources place them in the

~/quicklisp/local-projects/

directory of the user that will be running the swank server.

V. Install & Setup Postgres 9.4

ssh into root. First you will download the repository information to be able to install postgres94 with yum. I mirrored the repository rpm on my codeshelf.6

wget http://ztkfg.com/wp-content/uploads/codeshelf/logbot_on_centos6/pgdg-redhat-repo-latest.noarch.rpm
keksum pgdg-redhat-repo-latest.noarch.rpm
1d9c48fb19d05368b87a9c1bc0287c02f89653adbd0dc820be9b77c733c7ce6b1a07c146d6e98219c38a5bace3d42f192519f356e2f95f9062def849363cf2be

rpm -ivh pgdg-redhat-repo-latest.noarch.rpm
yum install postgresql94 postgresql94-server postgresql94-contrib

Now that postgres v9.4 is installed init the db

/etc/init.d/postgresql-9.4 initdb

That command will have created a conf file

/var/lib/pgsql/9.4/data/pg_hba.conf

Edit this file changing

# IPV4 local connections
host all all 127.0.0.1/32 ident

to

# IPV4 local connections
host all all 127.0.0.1/32 md57

Now start the db, and set it to start on boot.

/etc/init.d/postgresql-9.4 start
chkconfig postgresql-9.4 on

Then hop in the postgres shell.

su postges
psql

Once inside the postgres shell, run the following commands, changing the values in capital letters as appropriate. Note that the
NONROOTUSER needs to be the same as the name of the user created in step II. that will run logbot / the swank server.:

create database logbotdb;
create user NONROOTUSER with encrypted password 'THEPASSWORD';
grant all privileges on schema public to NONROOTUSER;
\q

Reconnect into the logbotdb and create the necessary extensions.

psql logbotdb

create extension if not exists plpgsql;
create extension if not exists pgcrypto;
create extension if not exists "uuid-ossp";

These last three create extension commands are in trinque's logbot.sql file that we are about to run. However, I had to run these manually in the shell while su'd to postgres. The NONROOTUSER does not have permission to create the extensions.

Now ssh into the NONROOTUSER and edit logbot.sql removing those three lines above.

--- create extension if not exists plpgsql;
--- create extension if not exists pgcrypto;
--- create extension if not exists "uuid-ossp";

Then run

psql -f logbot.sql logbotdb;

You're done! If you run

psql logbotdb;

and then in the postgres shell:

\dt

You should see two tables log and outbox. If everything looks good you can refer to the instructions at the end of step 3 to start the swank server that will run logbot. Once the swank server is running connect your local slime repl and then follow the logbot instructions.

---

Future steps to improve the setup process:

1. Slime and postgres9.4 and all related packages should be stored on a codeshelf.
2. Quicklisp, slime, and eventually sbcl should be signed.
3. There may be a better way to create/run the start_swank.lisp script.
4. It may be worth creating a vpatch removing logbot.sql create extensions lines and then adding the instructions on how to create the extensions while root to logbot's INSTALL file.

  1. Well the "r", "p", and "l" are local. The evaluation happens on the VM. []
  2. Note: I tried other versions of sbcl to no avail. The default version installed with yum has an asdf version incompatible with the libraries used by logbot. The most recent versions of sbcl on sbcl.org wouldn't compile on my machine. I found this version of sbcl on sourceforge. []
  3. On digitalocean you will need to allow your newly created user to accept connections from your machine by copying over the authorized_keys from root. While inside root run:

    adduser newuser
    mkdir /home/newuser/.ssh
    cp ~/.ssh/authorized_keys /home/newuser/.ssh/authorized_keys
    
    chown newuser /home/newuser/.ssh
    chown newuser /home/newuser/.ssh/authorized_keys

    []

  4. The infinite loop that sleeps for 10,000 seconds each iteration to keep the process running works well, but I do not think it's the right way to do what I want. I tried to run the script without the infinte loop with sbcl --load start_swank.lisp. However this did not work with nohup because of the way nohup redirects stdin/stdout. Using --load may work with screen, but screen does not come preinstalled on centos 6. []
  5. replace USER and 123.123.123.123 accordingly []
  6. This is put on the codeshelf for convenience. The rpm file is not the source, but rather the file that contains the location of the source. []
  7. This will allow you to later be able to connect to the database via cl's postgres library with the "encrypted" (i.e. hashed) password. []

Finding Meaning in a Deterministic World (Part 1)

December 19th, 2019

My teachers during childhood pushed Catholicism. The goal of life was to live according to Jesus and to make it into heaven. I believed them until I was roughly nine,1 when I caught my mother putting money under my pillow on behalf of the tooth fairy. I was pissed and immediately put two and two together asking her, "so Santa Claus, the Easter bunny, abrakadabra,2 and God are all lies too?" My mother conceded the first three were made up, but held that God was real. Thus began the atheism phase. I was ready, willing, and able to argue with anyone that God does not exist.

The other world view tossed onto me was to serve the state.3 Unlike with Catholicism where religious leaders directly said to live a life serving God, there was nobody who explicitly said that one should dedicate their life to the USG. But being instructed to recite the pledge of allegiance4 daily and having to listen to the constant parroting of the propaganda networks talking points made the implicit message clear. America was the beacon of light that created democracy, the only "fair" form of government where everyone had a voice. It was one's life duty to maintain its existence.

Rejecting both of these philosophies early on, I fell into a mild nihilistic depression. People who believe in God or the state can use this as a reason to get up in the morning. Countless gold medal winning athletes use their faith in God to push themselves to victory. I was missing their useful delusion.

At MIT I took an introductory philosophy course that gave me some time to think about some of these bigger questions in life. One topic the class went over was free will.5 From what I discussed in the class and from reading a translation of Tolstoy's War and Peace I became convinced (and am to this day) that we live in a deterministic world. I see the universe as a process playing out a linear flow of events determined by an initial condition and a set of rules.6

This may be the same view I had during my "nihilistic depression." Except now I had a way to articulate it. And since I had captured my thoughts into words, I could start to move the perspective to a healthier point of view.

Continue to part 2

  1. Diana Coman's little one beat me to it. []
  2. My parents told me that automatic doors opened when one said abrakadabra. So I would shout abrakadabra as I walk into commercial buildings with doors that opened via sensors. I liked this power, my childhood self didn't do anything to test whether or not it was real. []
  3. The importance of the state was an emphasis at Stuyvesant High School, given that it was a government run magnet school. Stuyvesant's entrance-exam-only admittance criteria made for an interesting student body, but the administration was atrocious. Teachers get to pick where they work within NYC's Department of Education via seniority. Many awful teachers near retirement choose to teach at Stuyvesant. They always get exemplary performance reviews, because those reviews are based on the students' results on local tests. Although the local tests are meant to asses knowledge in specific subjects, in reality they are only basic literacy tests that every Stuyvesant student excels on no matter how poor their instruction. []
  4. Which went something like ~
    I pledge allegiance to the flag of the United States of America. Thank you very, very much for letting us little kids live here. It really, really was nice of you. You didn't have to do it. And it's really not freaky to have little, little kids mindlessly recite this anthem everyday and pledge their life to a government before they're old enough to really think about what they're saying. This is not a form of brainwashing, this is not a form of brainwashing, this is not a form of brainwashing. This is really the greatest country in the whole world. All the other countries suck. And if this country ever goes to war, as it often wants to do, I promise to help go and kill all the other countries' kids. God bless Johnson and Johnson. God bless GE. God bless Citigroup. Amen.

    []

  5. I know, I know, quite the cliché topic. But when asked "do you believe in free will?" the question has a little more punch to me, given my name. []
  6. This view remains the same whether or not the code that weaves the universe contains a random function. []