• Urban Prius living

    Not so long ago I stumbled upon a blog titled “Hotel Prius”, and I loved the idea. Being a Prius owner myself, I decided to give Prius living a test run. Being cautious person I am, I decided to give it a test run for a week in a familiar area.

    A Prius.

    Preparing for the journey

    First, I decided to tint my windows. In addition to making a Prius look much more pleasant, it keeps the car cooler throughout the day, and most importantly makes it hard to peek inside the car. Especially at night.

    Next, I ordered a Prius Gen III Camping Sleeper Conversion Kit. It’s just a fancy name for two belts to push down the rear seats, and two wooden platforms with detachable feet to cover leg space. And two custom cut carpet runners to cover up the panels. Nothing one can’t make in their own garage, if the money is tight.

    The kit requires front seats to be locked in the furthest possible position, rendering them unusable. So I only installed a panel behind a passenger seat. With the panel installed, I have nearly 7 feet of level surface to sleep on.

    Another problem with the kit is that it blocks the console from being opened (arm rest storage between driver and passenger seat). I stopped using console as a quick access box, and it doesn’t feel like a big loss.

    Sleeping platform. Laundry bag at the bottom.

    I packed all my clothes in a duffle bag, bought a small toiletries kit, and put the rest of my belongings in a backpack. Queen-sized sleeping bag I had came in handy as a bed (with a couple of travel pillows).

    Duffle bag with clothes and a sleeping bag.

    After a second night I swapped my sleeping bag with a lighter and more compact summer sleeping bag. That’s also when I added a 1.5 inch sleeping pad to my inventory.

    Prius in a sleeping position, with toiletries kit and a duffle bag on the left, sleeping bag on the right.

    View of a bed from the driver's seat.

    My backpack/briefcase is on the passenger’s seat, I always take it with me.

    Backpack on the passenger seat.

    In addition to all of the above, I took my guitar - even though it’s bigger than anything else I had to take with me, it’s a great source of entertainment.

    Guitar with a travel pillow on top, old backpack (now replaced).

    If you’re feeling impatient, links to all the items are at the bottom of the post.

    Sleeping in a Prius

    Night one

    First night in a Prius left me with mixed feelings. I parked in one of the corporate areas of the city at about 9 pm. I picked a well lit parking lot with some (but not much) evening traffic. I parked in one of the slightly darker areas of the parking lot (approximately one out of twenty parking spots was taken, and large number of cars made me feel safer).

    It was 74F outside, slowly cooling after a 100F day. I left my car in accessory mode (spoiler: bad idea), turned on the AC, locked the doors, and hopped on my bedding arrangement to the back of the car. I didn’t want to keep the windows open since I just got them tinted. And sleeping with windows rolled down felt a bit eerie.

    First thing I noticed was how obnoxiously bright instrument panel and GPS are. It was the opposite of stealthy, and it was plain annoying to sleep with those bright lights on. I reached out for my duffle bag, and pulled out a couple of towels to cover up both the instrument panel and GPS, as well as few AC control LEDs. This made me feel at ease, and I tried to doze off into sleep.

    Towels covering an instrument panel and a GPS.

    The parking lot lights were a minor annoyance, mostly filtered out by a 20% rear window tint. I’ve heard some people pass somewhere within 20 feet of my car a few times, but other than that it was quiet. Still, unfamiliar situation made it hard to fall asleep.

    And then a few voices and an engine noise disturbed my peace, pretty close to my car. I waited for about 10 minutes, and the noise didn’t go away. I raised my head to see what’s happening - turns out someone had a tire blowout a 2 parking spots away from me, and a pickup truck pulled in next to them to help with changing the tire. There were anywhere between 3 and 5 people walking around and talking.

    That’s when I quickly got dressed, climbed to a driver’s seat, and drove off to look for a quieter spot. It was 9:55 pm.

    I went to a more secluded, but still well lit parking lot behind one of the offices. Concentration of cars was about the same, but it looked like those cars were left there overnight. I picked a spot within 50 feet of other parked cars, where a tree was covering my car from the harsh street light.

    Parking spot by the tree.

    Accessory mode, AC, lock the doors. Climbed in the back, and after some restlessness (a fairly normal thing for me), I fell asleep. I woke up sometime around 11:30 pm. It was fairly hot in the car, and it was hard to breathe. Turns out accessory mode turned itself off at some point. Maybe the battery ran low, or maybe there’s a time limit of sort. I opened all the doors to air out a car for a couple of minutes while I walked around and stretched.

    In the meantime, I also noticed that because of the tinted windows, it’s nearly impossible to see what’s inside the car while only standing a few feet away from it. That was comforting.

    Second attempt, this time I turned on the car the usual way (by depressing the pedal). I used a foot brake for a peace of mind, set the AC to 68 degrees (with external air flow setting), locked the car, covered the instrument panel and a GPS, and climbed in the back.

    AC was blowing on my neck, but I was too tired to worry about it. The car cooled down and I climbed inside a sleeping bag (it was too hot before, and I was just lying on top of it). I’m used to sleeping on hard surfaces, so the setup felt comfortable enough. The light from surrounding light poles was a bit too harsh, so I covered my eyes with a T-shirt. I fell asleep.

    I woke up a few times throughout the night, but I feel like I’ve had enough sleep. I woke up with the sun at about 6:30 am, got dressed, opened all doors to ventilate the car, packed away a sleeping bag, and drove to work. I felt well rested, even though my throat and neck felt a bit sore from the AC directed at me.

    Oh, and it cost me $1.40 to have an AC running through the night. The car would turn on for about a minute every once in a while (30 minutes?) to recharge the battery.

    Night two

    This time, I found a perfect spot in a small parking lot behind an office. Less crowded than the previous time, but still well lit. I got lucky and found a space with no direct street light being visible when laying down.

    Prius parked in a small parking lot.

    Turn the car on, AC to 68 degrees, lock the doors, hop to the back seat.

    I’ve slept well for the first couple of hours, but I ended up waking up well rested at midnight. I stopped by my office and worked for a couple of hours. Back to the car to get 4 more hours of sleep.

    It cost me $1.38 to camp through the night with AC on.

    Night three

    My sleeping bag was too hot to use at room temperature, so I swapped it with a summer down filled bag. I also purchased a self-inflating sleeping pad for more comfort.

    Things are getting better from now on.

    Prius on top of a parking garage.

    Feeling more confident, I found a four-story corporate parking lot and drove to the top level. I parked at a well-lit spot without any direct lights coming through the windows. I easily fell asleep a tad bit past nine, and woke up at 6 am refreshed and well rested. Secluded spot, comfortable sleeping pad, summer sleeping bag, and increased confidence - all contributed to making sleeping in a Prius a delightful experience.

    This was also the night I learned a neat trick: if you recline the driver’s seat all the way, it becomes really easy to move between front seat and a sleeping area.

    Cost of running the car through the night: $1.63.

    Night four

    I decided to camp out in the same multi-level parking garage I did yesterday (it has high enough number of cars so that I don’t stand out - about one per fifty parking spots; and the foot traffic is very low to non-existent). I found another part of the garage with a roof access on a second level and pulled in there. After getting situated, I realized I didn’t account for all the lights - bright parking lot lights from other levels ended up shining right in my face. And even though I knew I couldn’t be seen behind the tinted windows, it did leave me feeling exposed.

    I slid to the driver’s seat and drove up a few levels to the previous spot. Doors are locked, AC is set to 68F, instrument panel is covered, driver’s seat is reclined. I climbed to the back, and fell asleep.

    It was a warm night, temperature outside was at 73F. It was hot enough for me to wake up two times through the night, but that was a minor inconvenience.

    Cost: $1.73.

    Night five

    It was one of the chillier nights, so sleeping was a very pleasant experience. I picked the same spot I used on the third night. Absence of direct lights visible from the car windows plays a huge role in making you feel safe.

    Cost: $1.53 while also bringing Nexus 6 to a full charge.

    Night six

    Picked another spot in a similar area, I parked under a broken street light in a well lit parking lot. I’ve slept well. Mostly due to this being a cooler night (65F).

    Cost: $1.29 while also bringing Nexus 6 to a full charge.

    Night seven

    I was stuck in traffic in the evening, and I fiddled with the GPS for a while. Turns out you can disable the obnoxiously bright screen by going into “Setup” -> “Display” -> “Screen off”. Pushing any button on the GPS turns the screen back on. I’m still using the towels to cover up the instrument panel and AC controls though.

    Another fairly cold night, which made sleeping more comfortable. I went back to the top of the parking garage. Night was a delight.

    Cost: $1.39, with full Nexus 6 charging.

    Impressions

    Stealthy living in a Prius is very comfortable. With tinted windows there’s just enough privacy, it’s safe and cheap to run AC through the night (cost averages to about $1.48 per night). There’s more than enough space for someone of my height (5’11”). It took me a couple of days to get used to feeling relatively exposed in public, but once I did - it was a breeze. Last five nights I have slept without any problems.

    Surprisingly, I’ve slept better in a Prius than I did in my own bed. Here I should probably note that I’ve been having troubles sleeping on an off for some time lately, and sleeping through the night in a car was a step up from where I was before.

    Lessons learned

    Some things I didn’t know before trying out sleeping in a Prius:

    • Pick a well lit parking lot, ideally with some cars of similar value parked overnight. Make sure there’s not too much foot traffic.
    • Park in an area without direct light source near you. Also account for lights visible from inside the car (light nearly a hundred feet away can still be bother).
    • If you’re using the AC, turn Prius engine on instead of leaving it in accessory mode.
    • Proper AC vent direction is important. Fiddle with those until there are no drafts in the sleeping area.
    • Use a sleeping mask to avoid being bothered by the lights if you couldn’t find area without visible light sources shining directly through the windows.
    • Since the temperature inside the car is regulated, summer sleeping bag is a must.
    • Sleeping pad is very helpful in making the surface softer. 1.5 inches made a huge difference in comfort.

    Items I used

    Storage compartment. Left to right, top to bottom: a travel pillow, miscellaneous items storage box, sleeping pad, sleeping bag, a book (I'm not an avid reader these days), emergency supplies backpack, 10000 mAh power bank, paper towels.

    Here are the items directly related to the trip which I either purchased or already owned.

    Future improvement ideas

    I have a great stealthy setup, but having more privacy would’ve been a nice bonus. I’ll probably look for some inconspicuous looking shades or curtains, provided that the setup doesn’t look too obvious.

    Philosophical implications

    This was an interesting experience. Inability to retreat to the safety of my house got me out of my comfort zone. Initial discomfort passed quickly, and a world of possibilities opened up to me.

    Not having access to a house made me, well, feel bored. And that’s amazing. Without having an ability to default to a TV, gaming platform, or even a laptop (it’s really not that comfortable to work on a laptop in a car) - I had to get creative. I got to play a guitar, a piano, sing, practice with a drum set. I worked on my blog (this article took multiple revisions and hours upon hours of time to look the way it does now). I went to Mozzart’s Don Giovanni publicly hosted in a nearby town.

    And I finished this article, which took me about 8 days of revisions and additions to finish.

    Now, thanks to self-imposed restrictions, I’m doing all the things I wanted to do.

    I’m a perpetual planner. And that sometimes becomes a problem, since I’m always looking forward to the next thing that’s going to happen, sometimes not paying attention to life right in front of me. With everything I have packed in a car, there’s nothing on the horizon. Nothing is far away. There’s no home to go back to, so I don’t rush anywhere. I savor every moment I have.

  • My experience with minimalism

    Minimalism was always appealing to me. The philosophy of not having more than one would need is close to my heart. Over the past few years, I’ve been “trimming the fat” off various parts of my life.

    I can’t recall when I started being drawn to a minimalistic lifestyle. I think my passion for minimalism originates in my desire for organization and order. It’s comforting to know that a world around me has a certain structure.

    I remember the time when I started living on my own. I just moved to United States, away from my family. All my life fit in a half-empty suitcase at that time. Few sets of clothes, a blanket, a pillow, some hygiene products, a small laptop. Moving to a new place was as easy as throwing few things in that suitcase.

    After some time, I started accumulating more things. A guitar. More variations of clothing. Cheap coffee table and a shoe rack from a dollar store. At that time I rented a room in one of the shady areas of the city. Adding a few pieces of furniture made a place feel like home.

    Time has passed, and I moved again. Left the furniture behind, took the rest. Still light, but I did have to make a few trips to move everything I needed. I got even more comfortable. A gaming PC. Significantly more junk here and there.

    That’s when I did my first big cleanup. I went through every item I owned, and tossed it a trash bag if I didn’t use it in the past 6 month. Old clothes, some action figures, other useless junk I accumulated. As a result, I tossed two big bags of stuff I didn’t need. I still remember the liberating feeling. Knowing that everything I own serves a purpose.

    It felt like I could breathe again.

    Years pass. I don’t rent rooms anymore, but apartments, houses. This comes with having to own more things. Real furniture. A TV. More musical instruments. Having to accommodate guests. Cooking supplies. A bike. Outdoor furniture.

    But I’ve kept the minimalistic mindset, and I still do periodical clean outs. Tossing almost everything I haven’t used in a past six months. Reducing what I own only to things that I need to have comfortable and enjoyable living.

    Today, I don’t think I can fit everything I own in that single suitcase. Hell, I most certainly will need to hire a truck for my next move. But that’s not important. Minimalism isn’t about the absence of things. If you feel like you don’t have enough - you’re probably doing something wrong. Minimalism is about not being excessive.

    For me, knowing that my belongings serve a purpose makes me feel content, clear-headed. It’s comforting. It feels right.

    Sometimes, I forget and start accumulating stuff. And that’s when I go back to reducing again. It’s not an obsession, but a healthy periodical maintenance. Often it takes months, or even years to get rid of certain things.

    Replace a queen sized bed with a Japanese futon mat. Digitalize the growing paper trail I keep. Travel the world for with a single suitcase.

  • Profiling slow bashrc

    I’ve recently noticed that it takes a long time for my bash to load. I’ve found following StackOverflow answer to be useful, and I based my solution to find a startup time hog in my ~/.bashrc upon it.

    First off, add following few lines to your /etc/bash.bashrc, ~/.bash_profile, or wherever you’d like to begin tracing the script:

    PS4='+ $(date "+%s.%N")\011 '
    exec 3>&2 2>/tmp/bashstart.$$.log
    set -x
    

    And add following few lines where you want to stop the trace:

    set +x
    exec 2>&3 3>&-
    

    Now start your bash session (you can simply open a new terminal Window for that). The above will create /tmp/bashstart.<PID>.log. To analyze it, I wrote a little Python script:

    import argparse
    import heapq
    
    parser = argparse.ArgumentParser(description='Analyze bashstart log for speed.')
    parser.add_argument('filename', help='often /tmp/bashstart.<PID>.log')
    parser.add_argument('-n', default=20, help='number of results to show')
    args = parser.parse_args()
    filename, n = args.filename, int(args.n)
    
    with open(filename, 'r') as f:
        q = []
        prev_time = None
        for line in f.readlines():
            line = line.split()
            if '+' not in line[0] or len(line) < 3:
                continue
            text = ' '.join(line[2:])
            seconds, nanoseconds = line[1].split('.')
            time = int(nanoseconds)
            diff = time - prev_time if prev_time is not None else 0
            prev_time = time
            heapq.heappush(q, (diff, text))
    
    for diff, text in heapq.nlargest(n, q):
        print float(diff) / 1000000000, 's:', text
    

    Save it as bashprofile.py, and run it as follows (replace file name with an appropriate):

    python bashprofile.py /tmp/bashstart.2831.log -n 20
    0.050056909 s: _powerline_init_tmux_support
    0.045323022 s: _powerline_setup_prompt
    0.044722024 s: _powerline_setup_prompt
    0.044423727 s: '[' -f /usr/local/google/home/ruslano/.local/lib/python2.7/site-packages/powerline/bindings/bash/powerline.sh ']'
    0.044364097 s: '[' -f /usr/local/google/home/ruslano/.local/lib/python2.7/site-packages/powerline/bindings/bash/powerline.sh ']'
    0.044137159 s: _powerline_init_tmux_support
    0.015839574 s: __shell_name=bash
    0.010850276 s: command which which
    0.010105462 s: PS2='\[\]  \[\] \[\]'
    0.010000598 s: PS3=' Select variant  '
    0.009837956 s: complete -F _svn -o default -X '@(*/.svn|*/.svn/|.svn|.svn/)' svn
    0.009767517 s: PS2='\[\]  \[\] \[\]'
    0.0095753 s: PS3=' Select variant  '
    0.007915565 s: other_utils=(ant automake autoreconf libtoolize make mount patch readlink)
    0.00771205 s: for script in version functions/selector cd functions/cli cli override_gem
    0.007008299 s: for gnu_util in '"${gnu_utils[@]}"'
    0.00693653 s: complete -F _crow crow
    0.006803049 s: complete -F _svn -o default -X '@(*/.svn|*/.svn/|.svn|.svn/)' svn
    0.006672906 s: for script in version functions/selector cd functions/cli cli override_gem
    0.005912399 s: for entry in '${scripts[@]}'
    

    In my example, Powerline turned out to be a massive hog. Looks like I’ll have to troubleshoot the speed or plain disable it.

    Don’t forget to remove the lines you added to your bash configuration files after you’re done profiling.

  • DidYouMean plugin for Vim

    DidYouMean Vim plugin is very simple: it asks you if the file you are trying to open is indeed the right file. How is this useful? Here’s how:

    DidYouMean plugin in action.

    Say you have two files with a similarly starting names: model.py and model_test.py. You type vim mo, you hit tab to autocomplete the name, you hit enter. In vanilla Vim, you’d be opening a new file: model, since that’s where shell’s tab-completion stopped. DidYouMean detects such a nuance and asks you if you wanted to open model, model.py, or model_test.py.

    Simple idea, and instantly after trying this out, I would really expect this feature to be included in vanilla Vim.

  • Lessons learned: engineering productivity

    I enjoy optimizing the way I work: the less time I can spend on something without sacrificing quality - the better. Below are few ideas on the subject of engineering productivity I’ve successfully applied in my career.

    Don’t work long hours

    A fascinating paper was released in 2011 by a group of Israeli researchers, who studied the factors which affect if prisoners were given a parole or not (source: Extraneous factors in judicial decisions.

    First prisoner in a morning has approximately 65% chance of being released. With every next case, the chance dropped significantly, reaching nearly 0% starting with the third case. After returning from a lunch break, odds of a prisoner being released went back up to 65%. And once again, with each new prisoner the odds decline rapidly.

    A graph of favorable parole decisions given by the judges.

    Authors of the paper suggest that making decisions depletes a limited mental facility. People start looking for shortcuts and making mistakes.

    Working long hours is something we’ve all done more than once. Be it an upcoming deadline, fascinating problem, or a personal project. The problem with working too long is that you’re doing a poor job without realizing it.

    I try to avoid working more than 7 hours a day, and there are people who get an incredible amount of work done under an even shorter amount of time.

    This is probably explained by a phenomenon called “ego depletion”: the idea that self-control or willpower draw upon a pool of limited mental resources that can be used up. When the energy for mental activity is low, self-control is typically impaired, which is what is considered to be a state of ego depletion.

    Dangers of burning out

    Another problem with working too long - is a possibility of a burnout.

    A while back I worked as a freelancer for a client of mine. I worked long hours from home office. This was my first time working from home for such a long period of time, and I made a number of mistakes in the beginning. One of which was working too much.

    I’ve put in a number of 12-hour marathons in order to get more work done. I was on call most of the time. I became overwhelmed with all the work I had to get done. I started losing interest in work and feeling like things are getting out of my control. Every day felt like a bad day.

    Those are the symptoms of a burnout. Feeling of life spinning out of control and feeling like nothing you do makes any impact.

    I broke out of a mental prison of a burnout by getting a better work-life balance, enforcing exercise routine, and never working more than 8 hours a day. 7 in most cases.

    Work-life balance

    Another thing I learned from working from home is how to keep a work-life balance. Not having a separate office and living in a 1-bedroom apartment with my wife, I had to barricade myself in a far corner of a bedroom and turn it into a physically separated office space. That was the space I worked in, and it remained empty after I was done and until I started the next work day.

    Work-life balance deserves a special say: it’s the difference between doing an amazing job and going insane. Set aside time and place for work, and never allow a bleed-through. Don’t be on call if you can avoid it. Don’t open or reply to work-related emails at your spare time. Office is for work and home is for family.

    Distraction-free environment

    Everybody is aware that interruptions hamper productivity, but not everyone actively avoids interruptions during work. Replying to a text message, quickly checking your social network notifications, or looking up that one thing you’ve been forgetting to look up for days - all of this impairs your mental ability to complete the task within a desired time frame and, more importantly, with high quality.

    According to various studies it takes from 20 to 30 minutes to get regain the same level of concentration and productivity after a single act of disruption. A 2014 study from George Mason University found that students composed lower quality essays when interrupted only a few times throughout both planning and writing phases. Distracted students performed considerably worse, even though they were given additional time to complete an assignment in order to make up for the interruptions.

    Know your tools

    Use a single editor well

    This is lower level tip than the rest, but something I find utterly important in my daily work. We, the software engineers, spend at least half the time editing some sort of text - code, email, documentation. Taking time to improve the knowledge of the software you use every day pays off.

    • Using Gmail? Learn the keyboard shortcuts.
    • Use Eclispe? Do the same. Search for plugins which can make your everyday work faster and easier.
    • Use command shell for daily work? Practice your shell scripting skills, find the tools that let you do more work with lesser amount of typing.
    • Pick up touch typing. It’s also a part of your toolbox. Why think about keying words in? Lower error rate while typing - you need to go back less.

    For instance, I do all my work in shell. I use Tmux for creating and navigating multiple sessions. I use Vim for all my editing needs - code, documentation, blogging, composing long emails (via Mutt). I touch type, so working in a text mode is easy.

    Over the years I accumulated aliases for all the frequently used shell commands. All the Vim and Tmux shortcuts are a part of a muscle memory. Jumping from file to file or from one place to another within a file doesn’t take any mental effort and is accomplished with only a couple of keystrokes.

    By eliminating the need to think about or spend too much time working with low level concepts - you free up the mental bandwidth for higher level reasoning and problem solving.

    Read, don’t stop learning

    As per DeMarco and Lister, authors of “Peopleware: Productive Projects and Teams” - one book is more than most programmers read each year. This is the same point Steve McConnell’s “Code Complete” emphasizes.

    A lot of programmers don’t read books. A few even don’t follow relevant blogs or websites. Don’t do what software engineers had to do in the olden days: coding by error in isolation from the rest of the industry. Read a book, learn something you don’t know about. A single book read from beginning to end contains wider array of information compared to disjointed articles some programmers limit themselves to.

    As Jeff Atwood suggests in his article “Programmers Don’t Read Books - But You Should”, pick up one of the timeless books - not affected by changing technologies and processes.