Alex Raichev

Lessons Learned from a Bicycle Accident

Last week i wiped out on my usual bicycle ride home from work. Nothing hospital-serious, but i did sustain three nasty abrasions on my arm and leg, red badges of negligence as i will explain.

During my recovery i learned several important lessons that i pass on here as advice in hopes that it may help you and my future self.

  1. If you want to take tight turns on a bicycle, check that the tires have enough air, e.g. have pressures within the suggested ranges printed on the sidewalls. Through carelessness i let my front tire deflate so much that it collapsed on a tight turn, pulling the bike out from under me and throwing me to the ground. Additionally, if you want to corner at high speeds, you should look through the turn, brake before entering, lean the bike in a separate phase, and exit with speed and confidence.

  2. If you have an abrasion, burn, or laceration, practice moist wound care to speed up healing, reduce pain, and reduce scarring compared to other wound care practices. More details from a hospital unit in Japan that practices the method.

  3. Moist wound care can be cheap and natural, according to various traditional practices, case studies, and clinical trials i read about on the internet.

    • To clean the wound, you can use clean water with a pinch of salt. Avoid strong antiseptics, such as iodine or hydrogen peroxide, because they are toxic to all cells, including the ones needed for healing.
    • To help prevent infection and keep the wound moist, you can apply virgin coconut oil to the wound topically several times a day, or maybe some other traditional ointments, such as turmeric paste, aloe vera, or honey. I found many historical and anectdotal reports and a little clinical research suggesting that these ointments help. For the first 48 hours of treatment, i applied UMF 15+ manuka honey to my wound, but after near continuous intense burning and little sleep, i stopped. The pain disappeared immediately and never returned. A few days later and for the rest of my treatment i used coconut oil. In the future i will avoid strongly antibacterial honeys.
    • To further keep the wound moist and protect it from dirt and scratches, you can use banana leaves or potato skins held fast to the wound with cloth bandages and secured by a clip. Be sure to sterilize the leaves or skins by boiling them for at least 20 minutes or steaming them in a pressure cooker for at least 15 minutes. You can also sterilize the cloth wrap by the same methods and then dry it out in the oven or sun; video instructions here. While you are hunting for banana leaves or potato skins, you can wrap the wound with plastic cling film, which is sterile and non-adherent. I would not use plastic wrap as a long-term solution, though, lest the plastic leech some toxic chemicals into the wound. I used banana leaves foraged from trees in my neighborhood and vouch for their merciful non-adherence. Here is some research on banana leaf dressing.
  4. Take internal medicine while healing. Zinc (from food or supplements) for boosting the immune system, vitamin C (from food or supplements) to help your body make new skin, and anti-inflamatories, such as fresh turmeric and ginger infusion, in case your immune response gets out of hand.

  5. Look out for signs of infection: extreme wound swelling, extreme pain, swollen lymph nodes, fever. The treatment above will help your immune system battle infection, but if it appears to be losing after the first few days of care, then you might need to enlist the help of strong antibiotics. In that case, seek trained medical assistance.

Author: Alex Raichev
Date: 2017-02-26
Tags: advice
Permalink, Comment

How to Eat Better

I think Ran Prieur sums it up well in the following points, which he elaborates on his webpage here.

Author: Alex Raichev
Date: 2017-02-06
Tags: advice
Permalink, Comment

Doomsday Planning for Less Crazy Folk

A good guide by Michal Zalewski here

Author: Alex Raichev
Date: 2016-04-01
Tags: advice
Permalink, Comment

Adding Celery with RabbitMQ to a Django project on Webfaction

I recently added Celery with RabbitMQ to one of my Django projects on Webfaction. Along the way, i read lots of documentation, encountered difficulties, and got advice from the helpful staff at Webfaction. What worked for me in the end are the instructions below. May they might work for you too and save you some pain!

I'll assume that you've already added Celery with RabbitMQ to your Django project in your development environment (encapsulated within a virtual environment) and have that working as desired. If not, follow the Celery docs. By the way, the latest version of Celery, version 3.1.13, works with Django out of the box and no longer requires installing the additional django-celery Django app.

Now, let's add Celery with RabbitMQ to your production environment (encapsulated within a virtual environment) on Webfaction.


  • Ssh into your Webfaction server. All the command line instructions below take place in that session.
  • Also log in to your Webfaction control panel on the web
  • When following the instructions below, replace text of the form <stuff> with text appropriate to your situation. For example, replace <username> by your Webfaction username.

Install and configure Erlang

  1. From your Webfaction control panel, create a new application with App category: Custom, App type: Custom app (listening on port). Note the port number that gets assigned to your app.
  2. Go to Erlang's download webpage and copy the link to the latest .tar.gz version of Erlang
  3. In your ssh session, download the latest version of Erlang (currently OTP 17.1): wget <the Erlang link you copied>
  4. Unzip it: gunzip -c otp_src_17.1.tar.gz | tar xf -
  5. Change to the directory created: cd otp_src_17.1
  6. Configure the build: ./configure --prefix=/home/<username>/
  7. Make it: make
  8. Install it: make install

Test Erlang

  1. Run Erlang on the port assigned to your Erlang app (noted in the first step): epmd -port <your Erlang port> -daemon
  2. Check that it is running by looking for an epmd process: ps aux | grep epmd

Install and configure RabbitMQ

  1. From your Webfaction control panel, create a new application with App category: Custom, App type: Custom app (listening on port). Note the port number that gets assigned to your app.

  2. Go to RabbitMQ's download webpage and copy the link to the latest binary .tar.gz version of RabbitMQ (currently 3.3.4)

  3. In your ssh session, download the latest binary version of RabbitMQ: wget <the RabbitMQ link you copied>

  4. Unzip it: gunzip -c rabbitmq-server-generic-unix-3.3.4.tar.gz | tar xf -

  5. Simlink RabbitMQ to the Erlang lib directory: cd ~/lib/erlang/lib/; ln -s ../src/rabbitmq_server-3.3.4 rabbitmq_server-3.3.4

  6. Edit $HOME/rabbitmq_server-3.3.4/sbin/rabbitmq-defaults:

    # comment these lines:
    # add these lines:
    LOG_BASE=/home/<username>/logs/user/rabbitmq # create this directory!
  7. Create the RabbitMQ log directory: mkdir /home/<username>/logs/user/rabbitmq

  8. Edit $HOME/rabbitmq_server-3.3.4/sbin/rabbitmq-env:

    # add to the end
    export ERL_EPMD_PORT=<your Erlang port>
    export RABBITMQ_NODE_PORT=<your RabbitMQ port>
    export ERL_INETRC=$HOME/.erl_inetrc
  9. Create $HOME/hosts, replacing dweb125 with your Webfaction hostname prefix: developmenthost.developmentdomain developmenthost
    ::1      developmenthost6.developmentdomain6 developmenthost6 dweb125
  10. Create $HOME/.erl_inetrc:

    {hosts_file, "/home/<username>/hosts"}.
    {lookup, [file,native]}.

Test RabbitMQ

  1. Make sure you have Erlang running. Start RabbitMQ via ./rabbitmq_server-3.3.4/sbin/rabbitmq-server -detached, then check on its status via ./rabbitmq_server-3.3.4/sbin/rabbitmqctl status, and look for a line with {amqp,<your RabbitMQ port>,"::"}.

Install and configure Celery

  1. Within your ssh session, activate the virtual environment for your Django project and install Celery via pip install celery.

  2. Assuming you've already configured Celery to work in your development environment, all that's left to do is add the following line to the production version of your Django settings file:

    BROKER_URL = 'amqp://guest:[email protected]:<your RabbitMQ port>//'

Test Celery

  1. Within your ssh session and Django project directory, run celery -A <your Django project> worker -l info

That's it. Fyew! You now have Erlang, RabbitMQ, and Celery installed and running on Webfaction.


I've heard that controlling Erlang + RabbitMQ + Celery with Supervisor is a good idea. Will look into that.

Author: Alex Raichev
Date: 2014-08-02
Tags: advice
Permalink, Comment

Advice from Ran Prieur

"For the record, here's what I practice and preach: 1) Make money the easiest way available to you, short of crime. 2) If you radically reduce your spending, you will not have to make as much money, and you might find that the sacrifices of low spending are more meaningful and empowering than the sacrifices of high earning. 3) The most valuable use of money, after basic survival, is to carve out a small space where you can pursue quality of life on your own terms."

Author: Alex Raichev
Date: 2014-07-27
Tags: advice
Permalink, Comment

7 Rules for Communicating Clearly and Concisely in Email

Written by Leo Babauta 2007-10-05

As email is the prevalent form of communication for many web workers, it’s gotten a lot of attention: how to handle your email, how to empty your inbox, email etiquette, and more.

But perhaps not enough time is spent learning about how to communicate with email. And more specifically, how to communicate clearly and concisely, two crucial aspects of communication that are often overlooked.

How many times have you received a rambling and incoherent email? How many times have you hit “Delete” because you have no idea what the person wants and no time to sort through the long message?

The truth is that people don’t have time for long emails, and they don’t have time to try to find out exactly what you want. You have to tell them, in as short an email as possible.

Misunderstandings are also a problem, because of the nature of email. People are often ambiguous, and their messages are interpreted differently than they intended, leading to a waste of time and energy.

Communicate clearly and concisely with the following rules.

  1. Use the minimum amount of sentences. I’ve been using the 5-sentence rule, but you can use more if needed. The question is: how many sentences are needed to communicate what you’re trying to communicate? Or how few sentences can you get away with. Cut it to that number, and no more. That ensures that you’re not wasting the time of the recipient, and that your email actually gets read (people tend to put off reading longer ones, and might even delete them).

  2. State what you want right away. Don’t write a long introduction, telling your life story, or any story for that matter. People aren’t interested. They just want to know what you want. So state that, in the first sentence. Skip the niceties. Don’t make the recipient wade through 10 paragraphs to find what action is needed for the email.

  3. Write about only one thing. There have been numerous times when I read an email, saw the action needed, and went and did it … only to find out that three other things were also needed to respond to the email. I’ve also responded to the first part of an email and not to others, just because I didn’t have enough time.

    If you write about multiple things, with multiple requests, you do two things: 1) make it likely that your email actually won’t be read or acted on; and 2) make it likely that even if it is acted on or responded to, the recipient will only do one of those things.

    Instead, stick to one subject, with one request. Once that’s done, you can send a second one, but don’t overwhelm the recipient if at all possible.

  4. Leave out the humor and emotions. These don’t come across well in an email. Even if you use emoticons. There’s just no way to express tone, inflection, etc. … and there’s no way to know if the recipient understands that you’re joking. If you’re communicating in person, you can see that the person didn’t understand the humor, and say, “I was only joking!” But not in email.

    So, unless you know the person well, and you know they’ll understand that you’re joking, leave out humor. It’s a risk that you don’t want to take.

  5. Use “If... then” statements. As email is a back-and-forth method of communicating, and it can take a day or more for a response (in some cases), you want to limit the number of times a message has to go back and forth. To do that, use “if … then” statements, anticipating the possible responses to your question.

    For example, if you want to know if a person has received a response to an inquiry, instead of asking if they’ve received a response, and then waiting for a reply, and then sending another email based on that reply, try doing it all in one email:

    “Have you received a response from Mr. X yet? If so, please finish the report by Tuesday and email it to me. If not, can you follow up today and let me know the response?”

    By anticipating the possible responses, and giving a desired action for each possible response, you’re cutting a lot of wasted back-and-forth time.

  6. Review for ambiguity, clarity. Once you’ve written an email, take a few seconds to read over it before pressing the Send button. Read it as if you were an outsider — how clear it it? Are there any ambiguous statements that could be interpreted the wrong way? If so, clarify.

  7. Revise for conciseness. As you review, also see if there is a way you can shorten the email, remove words or sentences or even paragraphs. Leave nothing but the essential message you’re trying to communicate.

Author: Alex Raichev
Date: 2012-04-24
Tags: advice
Permalink, Comment

Why no comments? I used to do public comments but found that moderating and maintaining them took too much time in front of the computer, time better spent playing outdoors. So these days I only do private comments, that is, you can email me comments regarding a post by clicking the 'Comment' link at the bottom of the post.