<?xml version="1.0" encoding="UTF-8" standalone="no"?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:gd="http://schemas.google.com/g/2005" xmlns:georss="http://www.georss.org/georss" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:thr="http://purl.org/syndication/thread/1.0"><id>tag:blogger.com,1999:blog-6006755067744597587</id><updated>2026-01-31T13:50:38.210-08:00</updated><category term="ubuntu"/><category term="vim"/><category term="book"/><category term="education"/><category term="javascript"/><category term="python"/><category term="science fiction"/><category term="training"/><category term="2013"/><category term="2014"/><category term="Arch Linux"/><category term="Asus Chromebox"/><category term="aspectj"/><category term="atmega328"/><category term="avr"/><category term="bluetooth"/><category term="clojurescript"/><category term="django"/><category term="drupal"/><category term="electronics"/><category term="emacs"/><category term="fiction"/><category term="google chrome"/><category term="hc-05"/><category term="i2c"/><category term="java"/><category term="jboss seam"/><category term="leiningen"/><category term="linux"/><category term="personal"/><category term="phantomjs"/><category term="productivity"/><category term="raspberrypi"/><category term="reading"/><category term="self improvements"/><category term="touchpad"/><category term="travel"/><category term="unit test"/><category term="wiki"/><category term="xbmc"/><category term="zs-040"/><title type="text">Lost in bits</title><subtitle type="html">Everything about Python, Java, Linux, Raspberry Pi and microcontrollers.</subtitle><link href="http://abratukhin.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default?redirect=false" rel="self" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/" rel="alternate" type="text/html"/><link href="http://pubsubhubbub.appspot.com/" rel="hub"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default?start-index=26&amp;max-results=25&amp;redirect=false" rel="next" type="application/atom+xml"/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01636864982943331995</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><generator uri="http://www.blogger.com" version="7.00">Blogger</generator><openSearch:totalResults>27</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><xhtml:meta content="noindex" name="robots" xmlns:xhtml="http://www.w3.org/1999/xhtml"/><entry><id>tag:blogger.com,1999:blog-6006755067744597587.post-1973412790627958582</id><published>2017-10-22T11:41:00.002-07:00</published><updated>2017-10-22T13:34:44.952-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="touchpad"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type="text">How to enable touchpad taps in Ubuntu 17.10</title><content type="html">After installing a new version of Ubuntu 17.10 I've found that my touchpad doesn't work properly. It doesn't click when I tap.&amp;nbsp;
&lt;br /&gt;
&lt;br /&gt;
It took for a while to figure out that a new version switched from "xorg-synaptics" to "libinput". And for some interesting reasons "libinput" doesn't have tap to click enabled by default. So long story is short, here is a recipe to enable it:
&lt;br /&gt;
&lt;br /&gt;
1. Add following option to touchpad section in &lt;span style="font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;"&gt;"/usr/share/X11/xorg.conf.d/40-libinput.conf"&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;span style="font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;"&gt;Option "Tapping" "true"&lt;/span&gt;&lt;br /&gt;
2. Reboot and enjoy your touchpad again.&lt;div class="blogger-post-footer"&gt;Этот материал находится на сайте &lt;a href="http://abratukhin.blogspot.com/"&gt;http://abratukhin.blogspot.com/&lt;/a&gt;.&lt;/div&gt;</content><link href="http://abratukhin.blogspot.com/feeds/1973412790627958582/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2017/10/how-to-enable-touchpad-taps-in-ubuntu.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/1973412790627958582" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/1973412790627958582" rel="self" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2017/10/how-to-enable-touchpad-taps-in-ubuntu.html" rel="alternate" title="How to enable touchpad taps in Ubuntu 17.10" type="text/html"/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01636864982943331995</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6006755067744597587.post-4329012977924207763</id><published>2015-04-18T14:06:00.000-07:00</published><updated>2016-02-11T21:23:20.306-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="atmega328"/><category scheme="http://www.blogger.com/atom/ns#" term="avr"/><category scheme="http://www.blogger.com/atom/ns#" term="bluetooth"/><category scheme="http://www.blogger.com/atom/ns#" term="hc-05"/><category scheme="http://www.blogger.com/atom/ns#" term="zs-040"/><title type="text">Connect ATmega328 with HC-05 (ZS-040) Bluetooth module</title><content type="html">&lt;h2 id="parts-list" style="-webkit-font-smoothing: subpixel-antialiased; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; cursor: text; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 24px; margin: 0px 0px 10px; padding: 0px;"&gt;
Parts list&lt;/h2&gt;
&lt;ul style="font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 22.3999996185303px; padding-left: 30px;"&gt;
&lt;li&gt;ATMega328 (I use handy Arduino Nano);&lt;/li&gt;
&lt;li&gt;HC-05 (ZS-040) Bluetooth module (EGBT-045MS);&lt;/li&gt;
&lt;li&gt;1K Ohm and 2K Ohm resistors;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="schema" style="-webkit-font-smoothing: subpixel-antialiased; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; cursor: text; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 24px; margin: 20px 0px 10px; padding: 0px;"&gt;
Schema&lt;/h2&gt;
&lt;div style="font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 22.3999996185303px; margin-bottom: 15px;"&gt;
HC-05 or ZS-040 Bluetooth module is based on EGBT-045MS chip and has following pins on board:&lt;/div&gt;
&lt;ul style="font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 22.3999996185303px; padding-left: 30px;"&gt;
&lt;li&gt;STATE - HIGH when module is connected;&lt;/li&gt;
&lt;li&gt;RXD - data input pin;&lt;/li&gt;
&lt;li&gt;TXD - data output pin;&lt;/li&gt;
&lt;li&gt;GND - ground pin;&lt;/li&gt;
&lt;li&gt;VCC - power input pin;&lt;/li&gt;
&lt;li&gt;EN - Unknown pin. It should be connected to pin 34 of EGBT-045MS Bluetooth module, but it seems it doesn't work in preferred way;&lt;/li&gt;
&lt;/ul&gt;
&lt;a name='more'&gt;&lt;/a&gt;
&lt;div style="font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 22.3999996185303px; margin-bottom: 15px; margin-top: 15px;"&gt;
So I connected HC-05 (ZS-040) as schema shows:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3o9sA3bWuwGj8jKPnJmC7AW0cGD2QM3kzmmqjXzAtV5R6V5X-xKsfiijzqC07z1MvCoC_lWHtGyj39Sx3vnJKye-KFOpMjMLOdWhPFtH3goeY9OyRIO4hizlKrfDiKFt3FCVPazZLeHQ/s1600/schema-atmega328-hc-05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="301" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3o9sA3bWuwGj8jKPnJmC7AW0cGD2QM3kzmmqjXzAtV5R6V5X-xKsfiijzqC07z1MvCoC_lWHtGyj39Sx3vnJKye-KFOpMjMLOdWhPFtH3goeY9OyRIO4hizlKrfDiKFt3FCVPazZLeHQ/s400/schema-atmega328-hc-05.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;figure style="font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 22.3999996185303px; margin: 0px;"&gt;&lt;br /&gt;&lt;/figure&gt;&lt;pre style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(204, 204, 204); font-family: monospace, serif; font-size: 13px; line-height: 19px; margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px; white-space: pre-wrap;"&gt;&lt;code style="background: transparent; border-radius: 3px; border: 0px; color: #333333; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 12px; margin: 0px; padding: 0px; white-space: pre;"&gt;HC-05 TXD - ATmega RXD/PD0 (no voltage divider);
HC-05 RXD - ATmega TXD/PD1 (through voltage divider 1K Ohm + 2K Ohm)
HC-05 GND - Ground
HC-05 VCC - +5V&lt;/code&gt;&lt;/pre&gt;
&lt;div style="font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 22.3999996185303px; margin-bottom: 15px; margin-top: 15px;"&gt;
The connection of HC-05 module is very easy. Only&amp;nbsp;&lt;code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); color: #333333; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 12px; margin: 0px 2px; padding: 0px 5px; white-space: nowrap;"&gt;RXD&lt;/code&gt;&amp;nbsp;pin requires a voltage shifting, the connection of all other pins are straightforward.&lt;/div&gt;
&lt;div style="font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 22.3999996185303px; margin-bottom: 15px; margin-top: 15px;"&gt;
&lt;strong&gt;Important note&lt;/strong&gt;: This schema assumes that HC-05 will utilize RXD/TXD pins of ATmega328, which are used for UART and uploading a firmware. It means you have to power off HC-05 module during uploading of firmware to ATmega328. It can distract during development, but it's better to use hardware UART for communication with HC-05 in regular use.&lt;/div&gt;
&lt;h2 id="at-mode" style="-webkit-font-smoothing: subpixel-antialiased; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; cursor: text; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 24px; margin: 20px 0px 10px; padding: 0px;"&gt;
AT mode&lt;/h2&gt;
&lt;div style="font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 22.3999996185303px; margin-bottom: 15px;"&gt;
Before we start to use HC-05 (ZS-040) in regular communication, we need to change several internal settings of module. It can be done by switching HC-05 module to AT mode. In order to enable AT mode, use following steps:&lt;/div&gt;
&lt;ol style="font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 22.3999996185303px; padding-left: 30px;" type="1"&gt;
&lt;li&gt;Power off HC-05 module.&lt;/li&gt;
&lt;li&gt;Press and hold small button above&amp;nbsp;&lt;code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); color: #333333; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 12px; margin: 0px 2px; padding: 0px 5px; white-space: nowrap;"&gt;EN&lt;/code&gt;&amp;nbsp;pin.&lt;/li&gt;
&lt;li&gt;Power on and keep pressing small button.&lt;/li&gt;
&lt;li&gt;Small LED should start to blink slowly about once every 2 seconds.&lt;/li&gt;
&lt;/ol&gt;
&lt;div style="font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 22.3999996185303px; margin-bottom: 15px; margin-top: 15px;"&gt;
When HC-05 is switched to AT mode it's possible to send following AT commands:&lt;/div&gt;
&lt;ul style="font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 22.3999996185303px; padding-left: 30px;"&gt;
&lt;li&gt;&lt;div style="margin-bottom: 15px;"&gt;
&lt;code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); color: #333333; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 12px; margin: 0px 2px; padding: 0px 5px; white-space: nowrap;"&gt;AT+NAME=BLUES\r\n&lt;/code&gt;&amp;nbsp;- change the name of module. It helps to recognize it.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style="margin-bottom: 15px;"&gt;
&lt;code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); color: #333333; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 12px; margin: 0px 2px; padding: 0px 5px; white-space: nowrap;"&gt;AT+PSWD=7515\r\n&lt;/code&gt;&amp;nbsp;- change the default PIN for pairing. More security for you the final device.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style="margin-bottom: 15px;"&gt;
&lt;code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); color: #333333; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 12px; margin: 0px 2px; padding: 0px 5px; white-space: nowrap;"&gt;AT+UART=38400,1,0\r\n&lt;/code&gt;&amp;nbsp;- change the default UART settings (9600 Baud). More speed as needed (up to 115200 Baud).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 22.3999996185303px; margin-bottom: 15px; margin-top: 15px;"&gt;
By default HC-05 uses 38400, 1 stop bit, no parity bit for AT mode communication and it cannot be changed by user. So in order to send these commands to HC-05 module, you have to initialize ATmega328 UART with above settings. HC-05 responses with&amp;nbsp;&lt;code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); color: #333333; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 12px; margin: 0px 2px; padding: 0px 5px; white-space: nowrap;"&gt;OK&lt;/code&gt;&amp;nbsp;if command executed successfully or&amp;nbsp;&lt;code style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(234, 234, 234); color: #333333; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 12px; margin: 0px 2px; padding: 0px 5px; white-space: nowrap;"&gt;ERROR:(?)&lt;/code&gt;&amp;nbsp;with error code inside braces. See link with full description of commands and errors.&lt;/div&gt;
&lt;h2 id="source-code" style="-webkit-font-smoothing: subpixel-antialiased; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; cursor: text; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 24px; margin: 20px 0px 10px; padding: 0px;"&gt;
Source code&lt;/h2&gt;
&lt;div style="font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 22.3999996185303px; margin-bottom: 15px;"&gt;
Here is the source code of UART communication for ATmega328.&lt;/div&gt;
&lt;div class="sourceCode" style="font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 22.3999996185303px; overflow-x: auto;"&gt;
&lt;pre class="sourceCode c" style="background-color: #f8f8f8; border-radius: 3px; border: 1px solid rgb(204, 204, 204); font-family: monospace, serif; font-size: 13px; line-height: 19px; margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px; white-space: pre-wrap;"&gt;&lt;code class="sourceCode c" style="background: transparent; border-radius: 3px; border: 0px; color: #333333; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 12px; margin: 0px; padding: 0px; white-space: pre;"&gt;
&lt;span class="ot" style="color: #007020;"&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;/stdlib&gt;&lt;/span&gt;
&lt;span class="ot" style="color: #007020;"&gt;#include &amp;lt;string.h&amp;gt;&lt;/string&gt;&lt;/span&gt;
&lt;span class="ot" style="color: #007020;"&gt;#include &amp;lt;avr/io.h&amp;gt;&lt;/avr&gt;&lt;/span&gt;
&lt;span class="ot" style="color: #007020;"&gt;#include &amp;lt;avr/pgmspace.h&amp;gt;&lt;/avr&gt;&lt;/span&gt;
&lt;span class="ot" style="color: #007020;"&gt;#include &amp;lt;util/atomic.h&amp;gt;&lt;/util&gt;&lt;/span&gt;
&lt;span class="ot" style="color: #007020;"&gt;#include &amp;lt;util/delay.h&amp;gt;&lt;/util&gt;&lt;/span&gt;

&lt;span class="dt" style="color: #902000;"&gt;void&lt;/span&gt; uart_init(&lt;span class="dt" style="color: #902000;"&gt;uint32_t&lt;/span&gt; baudrate, &lt;span class="dt" style="color: #902000;"&gt;uint8_t&lt;/span&gt; double_speed) {
    &lt;span class="dt" style="color: #902000;"&gt;uint16_t&lt;/span&gt; ubrr = &lt;span class="dv" style="color: #40a070;"&gt;0&lt;/span&gt;;
    &lt;span class="kw" style="color: #007020; font-weight: bold;"&gt;if&lt;/span&gt; (double_speed) {
        UCSR0A = _BV(U2X0);  &lt;span class="co" style="color: #60a0b0; font-style: italic;"&gt;//Enable 2x speed&lt;/span&gt;
        ubrr = (F_CPU / (8UL * baudrate)) - &lt;span class="dv" style="color: #40a070;"&gt;1&lt;/span&gt;;
    } &lt;span class="kw" style="color: #007020; font-weight: bold;"&gt;else&lt;/span&gt; {
        ubrr = (F_CPU / (16UL * baudrate)) - &lt;span class="dv" style="color: #40a070;"&gt;1&lt;/span&gt;;
    }
    UBRR0H = ubrr &amp;gt;&amp;gt; &lt;span class="dv" style="color: #40a070;"&gt;8&lt;/span&gt;;
    UBRR0L = ubrr;

    UCSR0C &amp;amp;= ~(_BV(UMSEL01) | _BV(UMSEL00)); &lt;span class="co" style="color: #60a0b0; font-style: italic;"&gt;// enable asynchronous USART&lt;/span&gt;
    UCSR0C &amp;amp;= ~(_BV(UPM01) | _BV(UPM00)); &lt;span class="co" style="color: #60a0b0; font-style: italic;"&gt;// disable parity mode&lt;/span&gt;
    UCSR0C &amp;amp;= ~_BV(USBS0); &lt;span class="co" style="color: #60a0b0; font-style: italic;"&gt;// set 1-bit stop&lt;/span&gt;
    UCSR0C &amp;amp;= ~_BV(UCSZ02); 
    UCSR0C |= _BV(UCSZ01) | _BV(UCSZ00); &lt;span class="co" style="color: #60a0b0; font-style: italic;"&gt;// set 8-bit data&lt;/span&gt;

    UCSR0B = _BV(RXEN0) | _BV(TXEN0);   &lt;span class="co" style="color: #60a0b0; font-style: italic;"&gt;// Enable RX and TX &lt;/span&gt;
}


&lt;span class="dt" style="color: #902000;"&gt;uint8_t&lt;/span&gt; uart_getchar() {
    loop_until_bit_is_set(UCSR0A, RXC0);
    &lt;span class="kw" style="color: #007020; font-weight: bold;"&gt;return&lt;/span&gt; UDR0;
}

&lt;span class="dt" style="color: #902000;"&gt;void&lt;/span&gt; uart_read_line(&lt;span class="dt" style="color: #902000;"&gt;uint8_t&lt;/span&gt; *value, &lt;span class="dt" style="color: #902000;"&gt;uint8_t&lt;/span&gt; size) {
    &lt;span class="kw" style="color: #007020; font-weight: bold;"&gt;for&lt;/span&gt; (&lt;span class="dt" style="color: #902000;"&gt;uint8_t&lt;/span&gt; i = &lt;span class="dv" style="color: #40a070;"&gt;0&lt;/span&gt;; i &amp;lt; size; i++) {
        value[i] = uart_getchar();
        &lt;span class="kw" style="color: #007020; font-weight: bold;"&gt;if&lt;/span&gt; (value[i] == &lt;span class="ch" style="color: #4070a0;"&gt;'\r'&lt;/span&gt;) {
            value[i] = '\&lt;span class="dv" style="color: #40a070;"&gt;0&lt;/span&gt;';
            &lt;span class="kw" style="color: #007020; font-weight: bold;"&gt;break&lt;/span&gt;;
        }
    }
}

&lt;span class="dt" style="color: #902000;"&gt;void&lt;/span&gt; uart_putchar(&lt;span class="dt" style="color: #902000;"&gt;const&lt;/span&gt; &lt;span class="dt" style="color: #902000;"&gt;uint8_t&lt;/span&gt; data) {
    loop_until_bit_is_set(UCSR0A, UDRE0);
    UDR0 = data;
}


&lt;span class="dt" style="color: #902000;"&gt;void&lt;/span&gt; uart_print(&lt;span class="dt" style="color: #902000;"&gt;const&lt;/span&gt; &lt;span class="dt" style="color: #902000;"&gt;char&lt;/span&gt; *value) {
    &lt;span class="kw" style="color: #007020; font-weight: bold;"&gt;while&lt;/span&gt; (*value != '\&lt;span class="dv" style="color: #40a070;"&gt;0&lt;/span&gt;') {
        uart_putchar(*value++);
    }
}


&lt;span class="dt" style="color: #902000;"&gt;int&lt;/span&gt; main(&lt;span class="dt" style="color: #902000;"&gt;void&lt;/span&gt;) 
{
    uart_init(&lt;span class="dv" style="color: #40a070;"&gt;38400&lt;/span&gt;, &lt;span class="dv" style="color: #40a070;"&gt;1&lt;/span&gt;);
    sei();

    uart_print(&lt;span class="st" style="color: #4070a0;"&gt;"AT+NAME=BLUES&lt;/span&gt;&lt;span class="ch" style="color: #4070a0;"&gt;\r\n&lt;/span&gt;&lt;span class="st" style="color: #4070a0;"&gt;"&lt;/span&gt;);
    _delay_ms(&lt;span class="dv" style="color: #40a070;"&gt;1000&lt;/span&gt;);

    uart_print(&lt;span class="st" style="color: #4070a0;"&gt;"AT+PSWD=7515&lt;/span&gt;&lt;span class="ch" style="color: #4070a0;"&gt;\r\n&lt;/span&gt;&lt;span class="st" style="color: #4070a0;"&gt;"&lt;/span&gt;);
    _delay_ms(&lt;span class="dv" style="color: #40a070;"&gt;1000&lt;/span&gt;);

    uart_print(&lt;span class="st" style="color: #4070a0;"&gt;"AT+UART=38400,1,0&lt;/span&gt;&lt;span class="ch" style="color: #4070a0;"&gt;\r\n&lt;/span&gt;&lt;span class="st" style="color: #4070a0;"&gt;"&lt;/span&gt;);
    _delay_ms(&lt;span class="dv" style="color: #40a070;"&gt;1000&lt;/span&gt;);


    &lt;span class="dt" style="color: #902000;"&gt;char&lt;/span&gt; data[&lt;span class="dv" style="color: #40a070;"&gt;11&lt;/span&gt;];
    &lt;span class="kw" style="color: #007020; font-weight: bold;"&gt;for&lt;/span&gt; (;;) {
        memset(data, &lt;span class="dv" style="color: #40a070;"&gt;0&lt;/span&gt;, &lt;span class="dv" style="color: #40a070;"&gt;11&lt;/span&gt;);
        uart_read_line(data, &lt;span class="dv" style="color: #40a070;"&gt;10&lt;/span&gt;);
        uart_print(data)
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div style="font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 22.3999996185303px; margin-top: 15px;"&gt;
This code initializes HC-05 with described above settings when it switched to AT mode and makes echo output in the main loop. After first initialization, it's better to comment out or delete AT commands in source code.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Этот материал находится на сайте &lt;a href="http://abratukhin.blogspot.com/"&gt;http://abratukhin.blogspot.com/&lt;/a&gt;.&lt;/div&gt;</content><link href="http://abratukhin.blogspot.com/feeds/4329012977924207763/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2015/04/connect-atmega328-with-hc-05-zs-040.html#comment-form" rel="replies" title="12 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/4329012977924207763" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/4329012977924207763" rel="self" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2015/04/connect-atmega328-with-hc-05-zs-040.html" rel="alternate" title="Connect ATmega328 with HC-05 (ZS-040) Bluetooth module" type="text/html"/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01636864982943331995</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3o9sA3bWuwGj8jKPnJmC7AW0cGD2QM3kzmmqjXzAtV5R6V5X-xKsfiijzqC07z1MvCoC_lWHtGyj39Sx3vnJKye-KFOpMjMLOdWhPFtH3goeY9OyRIO4hizlKrfDiKFt3FCVPazZLeHQ/s72-c/schema-atmega328-hc-05.png" width="72"/><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6006755067744597587.post-8133622974477003737</id><published>2015-03-28T21:19:00.000-07:00</published><updated>2015-03-28T21:20:49.801-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="django"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type="text">How to upgrade Django 1.6 to Django 1.7</title><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Update django package:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;pip install -U Django
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Remove 'south' from INSTALLED_APPS.&lt;/li&gt;
&lt;li&gt;Delete all your (numbered) migration files, but not the directory or &lt;strong&gt;init&lt;/strong&gt;.py - make sure you remove the .pyc files too.&lt;/li&gt;
&lt;li&gt;Run python manage.py makemigrations. Django should see the empty migration directories and make new initial migrations in the new format.&lt;/li&gt;
&lt;li&gt;Run python manage.py migrate. Django will see that the tables for the initial migrations already exist
and mark them as applied without running them. (Only matching table names are checked; not their full schema&lt;/li&gt;
&lt;li&gt;it’s up to you to make sure the existing schema is up to date with your models!)&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Uninstall south package:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;pip uninstall south
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Update requirements.txt file:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;pip freeze &amp;gt; requirements.txt
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Webfaction&lt;/h2&gt;

&lt;p&gt;I'm using &lt;a href="http://www.webfaction.com/?affiliate=ablabs"&gt;a great Python hosting - Webfaction&lt;/a&gt;.
So here is short notes how to upgrade existing deployed application to Django 1.7.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create new application with Django 1.7&lt;/li&gt;
&lt;li&gt;Copy project folder from old Django 1.6 application to new Django 1.7 application.&lt;/li&gt;
&lt;li&gt;Modify httpd.conf accordingly with new folder structure.&lt;/li&gt;
&lt;li&gt;Stop existing existing application with django 1.6.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Restart new django 1.7 application:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;~/webapps/django_17/apache2/bin/restart
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Remove django 1.6 from Websites-&gt; yourdomain.com -&gt; Contents.&lt;/li&gt;
&lt;li&gt;Add new django 1.7 app to Websites-&gt; yourdomain.com -&gt; Contents.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Done. Check how it works.&lt;/p&gt;

&lt;p&gt;PS: And don't forgot to update fabric deployment file accordingly.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;Этот материал находится на сайте &lt;a href="http://abratukhin.blogspot.com/"&gt;http://abratukhin.blogspot.com/&lt;/a&gt;.&lt;/div&gt;</content><link href="http://abratukhin.blogspot.com/feeds/8133622974477003737/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2015/03/how-to-upgrade-django-16-to-django-17.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/8133622974477003737" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/8133622974477003737" rel="self" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2015/03/how-to-upgrade-django-16-to-django-17.html" rel="alternate" title="How to upgrade Django 1.6 to Django 1.7" type="text/html"/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01636864982943331995</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6006755067744597587.post-2856397813245362747</id><published>2015-03-20T21:57:00.001-07:00</published><updated>2015-03-20T22:03:04.556-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="clojurescript"/><category scheme="http://www.blogger.com/atom/ns#" term="leiningen"/><category scheme="http://www.blogger.com/atom/ns#" term="phantomjs"/><category scheme="http://www.blogger.com/atom/ns#" term="unit test"/><title type="text">How to set up and run unit tests in ClojureScript</title><content type="html">
&lt;p&gt;This tutorial covers initial setup of a development environment to run unit tests in ClojureScript project.&lt;/p&gt;

&lt;a name='more'&gt;&lt;/a&gt;

&lt;h2&gt;Install software&lt;/h2&gt;

&lt;p&gt;The installation process of required software depends from operation system on your computer. So please, refer
to the documentation of your package manager or installer. I'm going to provide examples for Arch Linux, but
I hope you will be easily tranlsate them to your operation system.&lt;/p&gt;

&lt;h3&gt;Leiningen&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://leiningen.org/"&gt;Leiningen&lt;/a&gt; is a build automation and dependency management tool for Clojure/ClojureScript
projects. It can compile, build and test your Clojure and ClojureScript application. Leiningen automatically
resolves library dependencies using Maven repositories.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;leiningen&lt;/code&gt; package is included in AUR repository in Arch Linux. So run &lt;code&gt;yaourt leiningen&lt;/code&gt; and confirm
installation of a package. &lt;/p&gt;

&lt;h3&gt;PhantomJS&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://phantomjs.org"&gt;PhantomJS&lt;/a&gt; is a scripted, headless WebKit-based browser used for automated interaction with
web pages and Javascript. I'm going to setup development environment which will run unit tests inside PhantomJS.
It's excellent tool for headless testing of web application.&lt;/p&gt;

&lt;p&gt;In order to install &lt;code&gt;phantomjs&lt;/code&gt; package in Arch Linux, run following command: &lt;code&gt;sudo pacman -Syu phantomjs&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;Project structure&lt;/h2&gt;

&lt;p&gt;The Leiningen can generate initial skeleton of our application. Run following command: &lt;code&gt;lein new cljs-unit-test&lt;/code&gt;.
It creates following project structure:&lt;/p&gt;

&lt;pre&gt;
.
└── cljs-unit-test
    ├── doc
    │   └── intro.md
    ├── LICENSE
    ├── project.clj
    ├── README.md
    ├── resources
    ├── src
    │   └── cljs_unit_test
    │       └── core.clj
    └── test
        └── cljs_unit_test
            └── core_test.clj
&lt;/pre&gt;

&lt;p&gt;The current structure is Clojure-based only. And we change it to support all future cases to the following:&lt;/p&gt;

&lt;pre&gt;
.
└── cljs-unit-test
    ├── doc
    │   └── intro.md
    ├── LICENSE
    ├── project.clj
    ├── README.md
    ├── resources
    │   └── private
    ├── src
    │   ├── clj
    │   │   └── cljs_unit_test
    │   └── cljs
    │       └── cljs_unit_test
    │           └── core.clj
    └── test
        └── cljs
            └── cljs_unit_test
                └── core_test.clj
&lt;/pre&gt;

&lt;p&gt;As you see, we added separated folders &lt;code&gt;src/clj&lt;/code&gt;, &lt;code&gt;test/clj&lt;/code&gt; for Clojure and &lt;code&gt;src/cljs&lt;/code&gt;, &lt;code&gt;test/cljs&lt;/code&gt; for ClojureScript.
Lets update &lt;code&gt;project.clj&lt;/code&gt; file accordingly our project structure.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
(defproject cljs-unit-test "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :source-paths ["src/clj" "src/cljs"]
  :dependencies [[org.clojure/clojure "1.6.0"]
                 [org.clojure/clojurescript "0.0-3123"]])
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;We added &lt;code&gt;:source-paths ["src/clj" "src/cljs"]&lt;/code&gt; key and &lt;code&gt;[org.clojure/clojurescript "0.0-3123"]&lt;/code&gt; dependency to our project.
Unfortunately, the leiningen cannot build ClojureScript by itself. So we need &lt;code&gt;lein-cljsbuild&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;lein-cljsbuild plugin&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/emezeske/lein-cljsbuild"&gt;The lein-cljsbuild&lt;/a&gt; is a Leiningen plugin for automatically compilation of your
ClojureScript code into Javascript. We need to modify our &lt;code&gt;project.clj&lt;/code&gt; file to use &lt;code&gt;lein-cljsbuild&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
(defproject cljs-unit-test "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}

  :source-paths ["src/clj" "src/cljs"]

  :dependencies [[org.clojure/clojure "1.6.0"]
                 [org.clojure/clojurescript "0.0-3123"]]

  :plugins [[lein-cljsbuild "1.0.5"]]

  :hooks [leiningen.cljsbuild]

  :cljsbuild {
     :builds {
              :dev
              {:source-paths ["src/cljs"]
               :compiler {
                          :output-to "resources/private/js/main.js"
                          :optimizations :whitespace
                          :pretty-print true
                          }}
              :test
              {:source-paths ["src/cljs" "test/cljs"]
               :compiler {
                          :output-to "resources/private/js/unit-test.js"
                          :optimizations :whitespace
                          :pretty-print true
                          }}
              }}
)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;We enabled &lt;code&gt;lein-cljsbuild&lt;/code&gt; plugin and set up &lt;code&gt;:dev&lt;/code&gt; and &lt;code&gt;:test&lt;/code&gt; builds to produce separated Javascript files,
because we don't want to include into our development and production Javascript files our tests. Also we don't enable
aggresive optimization for debug purpose. So we are ready to add some application specific code to our project.&lt;/p&gt;

&lt;p&gt;Lets modify &lt;code&gt;src/cljs/cljs_unit_test/core.cljs&lt;/code&gt; file to following:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
(ns cljs-unit-test.core)

(defn sum-two-numbers
  "Returns sum of two numbers"
  [x y]
  (+ x y))

(defn set-html! [el content]
    (set! (.-innerHTML el) content))

(defn ^:export init []
    (let [element (.getElementById js/document "main")
          content (str "2 + 2 = " (sum-two-numbers 2 2))]
        (set-html! element content)
        ))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;It calculates sum of two numbers and displays it inside html element. The construction &lt;code&gt;^:export&lt;/code&gt; prevents tagged
function to be removed during aggresive optimization of Javascript code. &lt;/p&gt;

&lt;p&gt;Lets create html file for our demo application - &lt;code&gt;resources/private/main.html&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;!doctype html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;Main&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;h1 id="main"&amp;gt;&amp;lt;/h1&amp;gt;
    &amp;lt;script src="js/main.js"&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script&amp;gt;cljs_unit_test.core.init();&amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;clojurescript.test package&lt;/h2&gt;

&lt;p&gt;OK. We are ready to test our "super complex" application logic. But &lt;code&gt;clojure.test&lt;/code&gt; works only for Clojure and we need
ClojureScript specific unit test framework. It's &lt;a href="https://github.com/cemerick/clojurescript.test"&gt;clojurescript.test&lt;/a&gt;
package. Lets add one more package to our &lt;code&gt;project.clj&lt;/code&gt; file:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
(defproject cljs-unit-test "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}

  :source-paths ["src/clj" "src/cljs"]

  :dependencies [[org.clojure/clojure "1.6.0"]
                 [org.clojure/clojurescript "0.0-3123"]
                 [com.cemerick/clojurescript.test "0.3.3"]]

  :plugins [[lein-cljsbuild "1.0.5"]
            [com.cemerick/clojurescript.test "0.3.3"]]

  :hooks [leiningen.cljsbuild]

  :cljsbuild {
     :builds {
              :dev
              {:source-paths ["src/cljs"]
               :compiler {
                          :output-to "resources/private/js/main.js"
                          :optimizations :whitespace
                          :pretty-print true
                          }}
              :test
              {:source-paths ["src/cljs" "test/cljs"]
               :compiler {
                          :output-to "resources/private/js/unit-test.js"
                          :optimizations :whitespace
                          :pretty-print true
                          }}
              }}
  )
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;We added &lt;code&gt;[com.cemerick/clojurescript.test "0.3.3"]&lt;/code&gt; to our dependencies and plugins. Finally we can add our tests
to &lt;code&gt;test/cljs/cljs_unit_test/core_test.cljs&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
(ns cljs-unit-test.core-test
    (:require-macros [cemerick.cljs.test
                      :refer (is deftest with-test run-tests testing test-var)])
    (:require [cemerick.cljs.test :as t]
              [cljs-unit-test.core :as core])
    )

(deftest test-sum-two-numbers
    (is (= (core/sum-two-numbers 2 2) 4))
    (is (= (core/sum-two-numbers 0 5) 5))
    )
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Running unit tests&lt;/h2&gt;

&lt;p&gt;The last step is to configure our project to run unit tests inside PhantomJS. Modify &lt;code&gt;project.clj&lt;/code&gt; file:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
(defproject cljs-unit-test "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}

  :source-paths ["src/clj" "src/cljs"]

  :dependencies [[org.clojure/clojure "1.6.0"]
                 [org.clojure/clojurescript "0.0-3123"]
                 [com.cemerick/clojurescript.test "0.3.3"]]

  :plugins [[lein-cljsbuild "1.0.5"]
            [com.cemerick/clojurescript.test "0.3.3"]]

  :hooks [leiningen.cljsbuild]

  :cljsbuild {
     :test-commands {"unit" ["phantomjs" :runner
                             "resources/private/js/unit-test.js"]}
     :builds {
              :dev
              {:source-paths ["src/cljs"]
               :compiler {
                          :output-to "resources/private/js/main.js"
                          :optimizations :whitespace
                          :pretty-print true
                          }}
              :test
              {:source-paths ["src/cljs" "test/cljs"]
               :compiler {
                          :output-to "resources/private/js/unit-test.js"
                          :optimizations :whitespace
                          :pretty-print true
                          }}
              }}
  )
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;We specified &lt;code&gt;:test-commands&lt;/code&gt; to run &lt;code&gt;phantomjs&lt;/code&gt; executable with &lt;code&gt;"resources/private/js/unit-test.js"&lt;/code&gt;
file as argument.&lt;/p&gt;

&lt;p&gt;Well. Finally, we can run our unit tests: &lt;code&gt;lein cljsbuild test&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And you will see following result:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Compiling ClojureScript.
Running ClojureScript test: unit

Testing cljs-unit-test.core-test 

Ran 1  tests containing 2 assertions.
Testing complete: 0 failures, 0 errors.
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Build an application by running: &lt;code&gt;lein cljsbuild once&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And open &lt;code&gt;resources/private/main.html&lt;/code&gt; in your favourite browser to manually verify how demo application works.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tips:&lt;/strong&gt; In order to speed up a little bit development, run following command in separated console:
&lt;code&gt;lein cljsbuild auto&lt;/code&gt;. It automatically builds your project after saving of files.&lt;/p&gt;

&lt;p&gt;The final source code is available in &lt;a href="https://github.com/andreybratukhin/cljs-unit-test-demo"&gt;my GitHub repository&lt;/a&gt;.&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;Этот материал находится на сайте &lt;a href="http://abratukhin.blogspot.com/"&gt;http://abratukhin.blogspot.com/&lt;/a&gt;.&lt;/div&gt;</content><link href="http://abratukhin.blogspot.com/feeds/2856397813245362747/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2015/03/how-to-set-up-unit-tests-in.html#comment-form" rel="replies" title="3 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/2856397813245362747" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/2856397813245362747" rel="self" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2015/03/how-to-set-up-unit-tests-in.html" rel="alternate" title="How to set up and run unit tests in ClojureScript" type="text/html"/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01636864982943331995</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6006755067744597587.post-404980875113168209</id><published>2015-03-05T19:18:00.001-08:00</published><updated>2015-03-05T19:33:06.979-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="google chrome"/><category scheme="http://www.blogger.com/atom/ns#" term="vim"/><title type="text">Vimium - Hacker's browser</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjolvolSN40Ghl-NBIv5uGUS30DXDznFSznJJ9PGAtrXuUFd-510vK8qtQoevUUOfqs6pWKjlDayqENMQJuHJoczD9SgQLXSiin_vmRCFuxI5TZ82Mmy1f1yK-J43s6_JXFnLD8TMYVyPo/s1600/timthumb.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjolvolSN40Ghl-NBIv5uGUS30DXDznFSznJJ9PGAtrXuUFd-510vK8qtQoevUUOfqs6pWKjlDayqENMQJuHJoczD9SgQLXSiin_vmRCFuxI5TZ82Mmy1f1yK-J43s6_JXFnLD8TMYVyPo/s1600/timthumb.png" height="108" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Vimium is Google Chrome and Chromium extension, which brings Vim-like navigation to your browser. You can install it from &lt;a href="https://chrome.google.com/webstore/detail/vimium/dbepggeogbaibhgnhhndojpepiihcmeb/reviews?hl=en" target="_blank"&gt;Chrome Web Store&lt;/a&gt;&amp;nbsp;or from a &lt;a href="https://github.com/philc/vimium" target="_blank"&gt;source code&lt;/a&gt;.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Once you have Vimium installed, you can see this list of key bindings at any time by typing ?.&lt;br /&gt;
&lt;div&gt;
Here the list of default keys:&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;h scroll left&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;j scroll down&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;k scroll up&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;l scroll right&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;gg scroll to top of the page&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;G scroll to bottom of the page&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;d scroll down half a page&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;u scroll up half a page&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;f open a link in the current tab&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;F open a link in a new tab&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;r reload&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;gs view source&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;yy copy the current url to the clipboard&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;o Open URL, bookmark, or history entry&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;/ enter find mode -- type your search query and hit enter to search or esc to cancel&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;n cycle forward to the next find match&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;N cycle backward to the previous find match&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;H go back in history&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;L go forward in history&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;J, gT go one tab left&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;K, gt go one tab right&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;t create tab&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;x close current tab&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
You may remap or unmap any of the default key bindings in the "Key mappings" section under "Advanced Options" on the options page.&lt;br /&gt;
&lt;br /&gt;
See video with details:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://ytimg.googleusercontent.com/vi/OUl2mJnjwbY/0.jpg" frameborder="0" height="266" src="http://www.youtube.com/embed/OUl2mJnjwbY?feature=player_embedded" width="320"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;Этот материал находится на сайте &lt;a href="http://abratukhin.blogspot.com/"&gt;http://abratukhin.blogspot.com/&lt;/a&gt;.&lt;/div&gt;</content><link href="http://abratukhin.blogspot.com/feeds/404980875113168209/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2015/03/vimium-hackers-browser.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/404980875113168209" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/404980875113168209" rel="self" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2015/03/vimium-hackers-browser.html" rel="alternate" title="Vimium - Hacker's browser" type="text/html"/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01636864982943331995</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjolvolSN40Ghl-NBIv5uGUS30DXDznFSznJJ9PGAtrXuUFd-510vK8qtQoevUUOfqs6pWKjlDayqENMQJuHJoczD9SgQLXSiin_vmRCFuxI5TZ82Mmy1f1yK-J43s6_JXFnLD8TMYVyPo/s72-c/timthumb.png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6006755067744597587.post-577561252080357049</id><published>2015-02-13T08:00:00.000-08:00</published><updated>2015-02-14T09:47:21.304-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javascript"/><title type="text">Countries list in JSON format</title><content type="html">In my previous post I shared &lt;a href="http://abratukhin.blogspot.com/2015/02/us-states-in-json-format.html"&gt;the list of US State&lt;/a&gt;, but in comments followers asked about the list of countries. So here is the list of 252 countries with ISO codes as abbreviation in JSON format:

&lt;a name='more'&gt;&lt;/a&gt;
&lt;pre&gt;
{
"AD": "Andorra",
"AE": "United Arab Emirates",
"AF": "Afghanistan",
"AG": "Antigua and Barbuda",
"AI": "Anguilla",
"AL": "Albania",
"AM": "Armenia",
"AO": "Angola",
"AQ": "Antarctica",
"AR": "Argentina",
"AS": "American Samoa",
"AT": "Austria",
"AU": "Australia",
"AW": "Aruba",
"AX": "Aland Islands",
"AZ": "Azerbaijan",
"BA": "Bosnia and Herzegovina",
"BB": "Barbados",
"BD": "Bangladesh",
"BE": "Belgium",
"BF": "Burkina Faso",
"BG": "Bulgaria",
"BH": "Bahrain",
"BI": "Burundi",
"BJ": "Benin",
"BL": "Saint Barthelemy",
"BM": "Bermuda",
"BN": "Brunei",
"BO": "Bolivia",
"BQ": "Bonaire, Saint Eustatius and Saba ",
"BR": "Brazil",
"BS": "Bahamas",
"BT": "Bhutan",
"BV": "Bouvet Island",
"BW": "Botswana",
"BY": "Belarus",
"BZ": "Belize",
"CA": "Canada",
"CC": "Cocos Islands",
"CD": "Democratic Republic of the Congo",
"CF": "Central African Republic",
"CG": "Republic of the Congo",
"CH": "Switzerland",
"CI": "Ivory Coast",
"CK": "Cook Islands",
"CL": "Chile",
"CM": "Cameroon",
"CN": "China",
"CO": "Colombia",
"CR": "Costa Rica",
"CU": "Cuba",
"CV": "Cape Verde",
"CW": "Curacao",
"CX": "Christmas Island",
"CY": "Cyprus",
"CZ": "Czech Republic",
"DE": "Germany",
"DJ": "Djibouti",
"DK": "Denmark",
"DM": "Dominica",
"DO": "Dominican Republic",
"DZ": "Algeria",
"EC": "Ecuador",
"EE": "Estonia",
"EG": "Egypt",
"EH": "Western Sahara",
"ER": "Eritrea",
"ES": "Spain",
"ET": "Ethiopia",
"FI": "Finland",
"FJ": "Fiji",
"FK": "Falkland Islands",
"FM": "Micronesia",
"FO": "Faroe Islands",
"FR": "France",
"GA": "Gabon",
"GB": "United Kingdom",
"GD": "Grenada",
"GE": "Georgia",
"GF": "French Guiana",
"GG": "Guernsey",
"GH": "Ghana",
"GI": "Gibraltar",
"GL": "Greenland",
"GM": "Gambia",
"GN": "Guinea",
"GP": "Guadeloupe",
"GQ": "Equatorial Guinea",
"GR": "Greece",
"GS": "South Georgia and the South Sandwich Islands",
"GT": "Guatemala",
"GU": "Guam",
"GW": "Guinea-Bissau",
"GY": "Guyana",
"HK": "Hong Kong",
"HM": "Heard Island and McDonald Islands",
"HN": "Honduras",
"HR": "Croatia",
"HT": "Haiti",
"HU": "Hungary",
"ID": "Indonesia",
"IE": "Ireland",
"IL": "Israel",
"IM": "Isle of Man",
"IN": "India",
"IO": "British Indian Ocean Territory",
"IQ": "Iraq",
"IR": "Iran",
"IS": "Iceland",
"IT": "Italy",
"JE": "Jersey",
"JM": "Jamaica",
"JO": "Jordan",
"JP": "Japan",
"KE": "Kenya",
"KG": "Kyrgyzstan",
"KH": "Cambodia",
"KI": "Kiribati",
"KM": "Comoros",
"KN": "Saint Kitts and Nevis",
"KP": "North Korea",
"KR": "South Korea",
"XK": "Kosovo",
"KW": "Kuwait",
"KY": "Cayman Islands",
"KZ": "Kazakhstan",
"LA": "Laos",
"LB": "Lebanon",
"LC": "Saint Lucia",
"LI": "Liechtenstein",
"LK": "Sri Lanka",
"LR": "Liberia",
"LS": "Lesotho",
"LT": "Lithuania",
"LU": "Luxembourg",
"LV": "Latvia",
"LY": "Libya",
"MA": "Morocco",
"MC": "Monaco",
"MD": "Moldova",
"ME": "Montenegro",
"MF": "Saint Martin",
"MG": "Madagascar",
"MH": "Marshall Islands",
"MK": "Macedonia",
"ML": "Mali",
"MM": "Myanmar",
"MN": "Mongolia",
"MO": "Macao",
"MP": "Northern Mariana Islands",
"MQ": "Martinique",
"MR": "Mauritania",
"MS": "Montserrat",
"MT": "Malta",
"MU": "Mauritius",
"MV": "Maldives",
"MW": "Malawi",
"MX": "Mexico",
"MY": "Malaysia",
"MZ": "Mozambique",
"NA": "Namibia",
"NC": "New Caledonia",
"NE": "Niger",
"NF": "Norfolk Island",
"NG": "Nigeria",
"NI": "Nicaragua",
"NL": "Netherlands",
"NO": "Norway",
"NP": "Nepal",
"NR": "Nauru",
"NU": "Niue",
"NZ": "New Zealand",
"OM": "Oman",
"PA": "Panama",
"PE": "Peru",
"PF": "French Polynesia",
"PG": "Papua New Guinea",
"PH": "Philippines",
"PK": "Pakistan",
"PL": "Poland",
"PM": "Saint Pierre and Miquelon",
"PN": "Pitcairn",
"PR": "Puerto Rico",
"PS": "Palestinian Territory",
"PT": "Portugal",
"PW": "Palau",
"PY": "Paraguay",
"QA": "Qatar",
"RE": "Reunion",
"RO": "Romania",
"RS": "Serbia",
"RU": "Russia",
"RW": "Rwanda",
"SA": "Saudi Arabia",
"SB": "Solomon Islands",
"SC": "Seychelles",
"SD": "Sudan",
"SS": "South Sudan",
"SE": "Sweden",
"SG": "Singapore",
"SH": "Saint Helena",
"SI": "Slovenia",
"SJ": "Svalbard and Jan Mayen",
"SK": "Slovakia",
"SL": "Sierra Leone",
"SM": "San Marino",
"SN": "Senegal",
"SO": "Somalia",
"SR": "Suriname",
"ST": "Sao Tome and Principe",
"SV": "El Salvador",
"SX": "Sint Maarten",
"SY": "Syria",
"SZ": "Swaziland",
"TC": "Turks and Caicos Islands",
"TD": "Chad",
"TF": "French Southern Territories",
"TG": "Togo",
"TH": "Thailand",
"TJ": "Tajikistan",
"TK": "Tokelau",
"TL": "East Timor",
"TM": "Turkmenistan",
"TN": "Tunisia",
"TO": "Tonga",
"TR": "Turkey",
"TT": "Trinidad and Tobago",
"TV": "Tuvalu",
"TW": "Taiwan",
"TZ": "Tanzania",
"UA": "Ukraine",
"UG": "Uganda",
"UM": "United States Minor Outlying Islands",
"US": "United States",
"UY": "Uruguay",
"UZ": "Uzbekistan",
"VA": "Vatican",
"VC": "Saint Vincent and the Grenadines",
"VE": "Venezuela",
"VG": "British Virgin Islands",
"VI": "U.S. Virgin Islands",
"VN": "Vietnam",
"VU": "Vanuatu",
"WF": "Wallis and Futuna",
"WS": "Samoa",
"YE": "Yemen",
"YT": "Mayotte",
"ZA": "South Africa",
"ZM": "Zambia",
"ZW": "Zimbabwe",
"CS": "Serbia and Montenegro",
"AN": "Netherlands Antilles"
}

&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;Этот материал находится на сайте &lt;a href="http://abratukhin.blogspot.com/"&gt;http://abratukhin.blogspot.com/&lt;/a&gt;.&lt;/div&gt;</content><link href="http://abratukhin.blogspot.com/feeds/577561252080357049/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2015/02/countries-list-in-json-format.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/577561252080357049" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/577561252080357049" rel="self" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2015/02/countries-list-in-json-format.html" rel="alternate" title="Countries list in JSON format" type="text/html"/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01636864982943331995</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6006755067744597587.post-4289656526693665302</id><published>2015-02-09T22:04:00.000-08:00</published><updated>2015-02-09T22:04:05.683-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javascript"/><title type="text">US States in JSON format</title><content type="html">I couldn't find a list of US State abbreviations and names that I could quickly use in Javascript. So I combined the list in JSON format for your convenient. You can use it as you wish.

&lt;a name='more'&gt;&lt;/a&gt;

&lt;pre&gt;
{
    "AK": "Alaska",
    "AL": "Alabama",
    "AR": "Arkansas",
    "AZ": "Arizona",
    "CA": "California",
    "CO": "Colorado",
    "CT": "Connecticut",
    "DC": "District Of Columbia",
    "DE": "Delaware",
    "FL": "Florida",
    "GA": "Georgia",
    "HI": "Hawaii",
    "IA": "Iowa",
    "ID": "Idaho",
    "IL": "Illinois",
    "IN": "Indiana",
    "KS": "Kansas",
    "KY": "Kentucky",
    "LA": "Louisiana",
    "MA": "Massachusetts",
    "MD": "Maryland",
    "ME": "Maine",
    "MI": "Michigan",
    "MN": "Minnesota",
    "MO": "Missouri",
    "MS": "Mississippi",
    "MT": "Montana",
    "NC": "North Carolina",
    "ND": "North Dakota",
    "NE": "Nebraska",
    "NH": "New Hampshire",
    "NJ": "New Jersey",
    "NM": "New Mexico",
    "NV": "Nevada",
    "NY": "New York",
    "OH": "Ohio",
    "OK": "Oklahoma",
    "OR": "Oregon",
    "PA": "Pennsylvania",
    "RI": "Rhode Island",
    "SC": "South Carolina",
    "SD": "South Dakota",
    "TN": "Tennessee",
    "TX": "Texas",
    "UT": "Utah",
    "VA": "Virginia",
    "VT": "Vermont",
    "WA": "Washington",
    "WI": "Wisconsin",
    "WV": "West Virginia",
    "WY": "Wyoming"
}

&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;Этот материал находится на сайте &lt;a href="http://abratukhin.blogspot.com/"&gt;http://abratukhin.blogspot.com/&lt;/a&gt;.&lt;/div&gt;</content><link href="http://abratukhin.blogspot.com/feeds/4289656526693665302/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2015/02/us-states-in-json-format.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/4289656526693665302" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/4289656526693665302" rel="self" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2015/02/us-states-in-json-format.html" rel="alternate" title="US States in JSON format" type="text/html"/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01636864982943331995</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6006755067744597587.post-6000903900215439042</id><published>2015-02-09T00:08:00.000-08:00</published><updated>2015-02-10T22:31:12.013-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="productivity"/><category scheme="http://www.blogger.com/atom/ns#" term="vim"/><category scheme="http://www.blogger.com/atom/ns#" term="wiki"/><title type="text">Personal organizer with vimwiki</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCuPvypvF4FvIYJr6CIo-ATshCwQBnV24-dfTDxB_q2ha9rQisEqGlJgaAH-6OuCuKUzwSNDRKFO-R5f6iZ5vFNAK8dmRCkPj0TclLEeiM8zpZv6l0yTvXUdxH9bLYj6O59QqmR6UloLI/s1600/vim.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCuPvypvF4FvIYJr6CIo-ATshCwQBnV24-dfTDxB_q2ha9rQisEqGlJgaAH-6OuCuKUzwSNDRKFO-R5f6iZ5vFNAK8dmRCkPj0TclLEeiM8zpZv6l0yTvXUdxH9bLYj6O59QqmR6UloLI/s1600/vim.jpg" alt="vim text editor logo"/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Emacs users enjoy org-mode as super organizer of personal notes, documentation, diary, tasks list and many other things. And I wanted the same features for Vim and recently I found it. Welcome &lt;a href="https://github.com/vimwiki/vimwiki"&gt;vimwiki&lt;/a&gt; as your personal organizer. Here is the list of features, what you can do with vimwiki plugin:
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Organize notes in multiple wiki files.&lt;/li&gt;
&lt;li&gt;
Link your ideas/notes with quick wiki links.&lt;/li&gt;
&lt;li&gt;
Manage to-do lists.&lt;/li&gt;
&lt;li&gt;
Write documentation with rich formatting.&lt;/li&gt;
&lt;li&gt;
Use tables to organize data.&lt;/li&gt;
&lt;li&gt;
Memorize events in diary.&lt;/li&gt;
&lt;li&gt;
Generate HTML from wiki files.&lt;/li&gt;
&lt;li&gt;
Multiple wiki support.&lt;/li&gt;
&lt;/ul&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;h2 id="toc_1.1"&gt;
Install&lt;/h2&gt;
As usual, use following Git repository to install plugin with Pathogen: 
&lt;br /&gt;
&lt;a href="https://github.com/vimwiki/vimwiki"&gt;https://github.com/vimwiki/vimwiki&lt;/a&gt;
&lt;br /&gt;
Then you need to register wiki folders:
&lt;br /&gt;
&lt;pre&gt;let g:vimwiki_list = [{'path': '$HOME/Documents/wiki'}]
&lt;/pre&gt;
In order to enjoy synchronization between all my devices, I shared this folder with BitTorrent Sync.
&lt;br /&gt;
Also I put additional convenient settings into my ~/.vimrc:
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;let g:vimwiki_dir_link = 'index'&lt;/code&gt; - automatically resolve folder links as folder/index.wiki&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;let g:vimwiki_hl_headers = 1&lt;/code&gt; - highlight headers with different colors &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;let g:vimwiki_hl_cb_checked = 1&lt;/code&gt; - highlight completed tasks &lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="toc_1.2"&gt;
Key bindings&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;Leader&amp;gt;ww&lt;/code&gt; - Open default wiki index file.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;Leader&amp;gt;wt&lt;/code&gt; - Open default wiki index file in a new tab.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;Leader&amp;gt;ws&lt;/code&gt; - Select and open wiki index file.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;Leader&amp;gt;wd&lt;/code&gt; - Delete wiki file you are in.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;Leader&amp;gt;wr&lt;/code&gt; - Rename wiki file you are in.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;Enter&amp;gt;&lt;/code&gt; - Follow/Create wiki link&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;Shift-Enter&amp;gt;&lt;/code&gt; - Split and follow/create wiki link&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;Ctrl-Enter&amp;gt;&lt;/code&gt; - Vertical split and follow/create wiki link&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;Backspace&amp;gt;&lt;/code&gt; - Go back to parent(previous) wiki link&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;Tab&amp;gt;&lt;/code&gt; - Find next wiki link&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;Shift-Tab&amp;gt;&lt;/code&gt; - Find previous wiki link&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="toc_1.3"&gt;
Organize notes&lt;/h2&gt;
Any time when you need to open vimwiki you can just type &lt;code&gt;&amp;lt;Leader&amp;gt;ww&lt;/code&gt; and vim opens index wiki file in the current buffer. See key binding to open vimwiki in a new tab or split window.
&lt;br /&gt;
If you want to place a note to separated wiki file, then just type a name of wiki file (SomeWikiNote) or type a wiki link (&lt;code&gt;[[Some wiki note]]&lt;/code&gt;) and hit &lt;code&gt;&amp;lt;Enter&amp;gt;&lt;/code&gt; on it. Vimwiki automatically creates a new wiki file and opens it in the current buffer. Hit &lt;code&gt;&amp;lt;Backspace&amp;gt;&lt;/code&gt; in order to return to previous wiki file.
&lt;br /&gt;
Vimwiki supports all necessary markups for creating rich notes. 
&lt;br /&gt;
There are a few typefaces that gives you a bit of control over how your text should be decorated:
&lt;br /&gt;
&lt;pre&gt;  *bold text*
  _italic text_
  ~~strikeout text~~
  `code (no syntax) text`
  super^script^
  sub,,script,,
&lt;/pre&gt;
Define logical sections with headers:
&lt;br /&gt;
&lt;pre&gt;= Header level 1 =
== Header level 2 ==
=== Header level 3 ===
==== Header level 4 ====
===== Header level 5 =====
====== Header level 6 ======
&lt;/pre&gt;
Combine list of items with bulleted, numbered and mixed lists:
&lt;br /&gt;
&lt;pre&gt;  * Bulleted list item 1
  * Bulleted list item 2
    * Bulleted list sub item 1
    * Bulleted list sub item 2
   
  # Numbered list item 1
  # Numbered list item 2
    # Numbered list sub item 1
    # Numbered list sub item 2
&lt;/pre&gt;
or definition list:
&lt;br /&gt;
&lt;pre&gt;Term 1:: Definition 1
Term 2::
:: Definition 2
:: Definition 3
&lt;/pre&gt;
Collect table data with :VimwikiTable command:
&lt;br /&gt;
&lt;pre&gt; | Year | Temperature (low) | Temperature (high) |
 |------|-------------------|--------------------|
 | 1900 | -10               | 25                 |
 | 1910 | -15               | 30                 |
 | 1920 | -10               | 32                 |
 | 1930 | _N/A_             | _N/A_              |
 | 1940 | -2                | 40                 |
&lt;/pre&gt;
Store code snippets with preformatted blocks:
&lt;br /&gt;
&lt;pre&gt;{{{python
def hello(world):
    for x in range(10):
        print("Hello {0} number {1}".format(world, x))
&lt;/pre&gt;
}}}
&lt;br /&gt;
Text started with 4 or more spaces is a blockquote.
&lt;br /&gt;
4 or more dashes at the start of the line is a 'horizontal line' (&lt;code&gt;&amp;lt;hr /&amp;gt;&lt;/code&gt;): ----
&lt;br /&gt;
Mathematical formula are highlighted, and can be rendered in HTML using the
powerful open source display engine MathJax (&lt;a href="http://www.mathjax.org/)."&gt;http://www.mathjax.org/).&lt;/a&gt;
&lt;br /&gt;
You can have todo lists -- lists of items you can check/uncheck. Consider the following example:
&lt;br /&gt;
&lt;pre&gt;= Toggleable list of todo items =
  * [X] Toggle list item on/off.
    * [X] Simple toggling between [ ] and [X].
    * [X] All list's subitems should be toggled on/off appropriately.
    * [X] Toggle child subitems only if current line is list item
    * [X] Parent list item should be toggled depending on it's child items.
  * [X] Make numbered list items toggleable too
  * [X] Add highlighting to list item boxes
  * [X] Add [ ] to the next created with o, O and &amp;lt;CR&amp;gt; list item.
&lt;/pre&gt;
Pressing &amp;lt;C-Space&amp;gt; on the first list item will toggle it and all of its child items. &amp;lt;C-Space&amp;gt; adjusts parents items also. It is possible to toggle several list items using visual mode.
&lt;br /&gt;
See extensive help for markup syntax &lt;code&gt;:h vimwiki-syntax&lt;/code&gt; .
&lt;div class="blogger-post-footer"&gt;Этот материал находится на сайте &lt;a href="http://abratukhin.blogspot.com/"&gt;http://abratukhin.blogspot.com/&lt;/a&gt;.&lt;/div&gt;</content><link href="http://abratukhin.blogspot.com/feeds/6000903900215439042/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2015/02/personal-organizer-with-vimwiki.html#comment-form" rel="replies" title="2 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/6000903900215439042" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/6000903900215439042" rel="self" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2015/02/personal-organizer-with-vimwiki.html" rel="alternate" title="Personal organizer with vimwiki" type="text/html"/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01636864982943331995</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCuPvypvF4FvIYJr6CIo-ATshCwQBnV24-dfTDxB_q2ha9rQisEqGlJgaAH-6OuCuKUzwSNDRKFO-R5f6iZ5vFNAK8dmRCkPj0TclLEeiM8zpZv6l0yTvXUdxH9bLYj6O59QqmR6UloLI/s72-c/vim.jpg" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6006755067744597587.post-658951520033548660</id><published>2014-12-28T18:12:00.000-08:00</published><updated>2015-04-14T18:13:28.547-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="2014"/><category scheme="http://www.blogger.com/atom/ns#" term="book"/><category scheme="http://www.blogger.com/atom/ns#" term="electronics"/><category scheme="http://www.blogger.com/atom/ns#" term="science fiction"/><title type="text">What I read in 2014</title><content type="html">&lt;h2&gt;
Science Fiction&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0812550706/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0812550706&amp;amp;linkCode=as2&amp;amp;tag=otsiofme-20&amp;amp;linkId=KCPJAVBL5AZWZJNE"&gt;Ender's Game by Card Orson Scott&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/076536736X/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=076536736X&amp;amp;linkCode=as2&amp;amp;tag=otsiofme-20&amp;amp;linkId=GRZCIVXQYB5Z5RB5"&gt;Earth Unaware by Card Orson Scott&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0765367378/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0765367378&amp;amp;linkCode=as2&amp;amp;tag=otsiofme-20&amp;amp;linkId=Z7RV5OXL45FS2R5X"&gt;Earth Afire by Card Orson Scott&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0765329069/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0765329069&amp;amp;linkCode=as2&amp;amp;tag=otsiofme-20&amp;amp;linkId=4IQ2JKKJEKYKHBJ4"&gt;Earth Awakens by Card Orson Scott&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0307950689/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0307950689&amp;amp;linkCode=as2&amp;amp;tag=otsiofme-20&amp;amp;linkId=4ULQTDBV4SARDF6F"&gt;The Lost Symbol by Dan Brown&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Electronics, Non fiction&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0596153740/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0596153740&amp;amp;linkCode=as2&amp;amp;tag=otsiofme-20&amp;amp;linkId=LIW3HMPO3O5UHEQQ"&gt;Make: Electronics by Charles Platt&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="blogger-post-footer"&gt;Этот материал находится на сайте &lt;a href="http://abratukhin.blogspot.com/"&gt;http://abratukhin.blogspot.com/&lt;/a&gt;.&lt;/div&gt;</content><link href="http://abratukhin.blogspot.com/feeds/658951520033548660/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2014/12/what-i-read-in-2014.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/658951520033548660" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/658951520033548660" rel="self" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2014/12/what-i-read-in-2014.html" rel="alternate" title="What I read in 2014" type="text/html"/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01636864982943331995</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6006755067744597587.post-1403410647340435428</id><published>2014-07-01T14:55:00.001-07:00</published><updated>2015-02-10T22:28:08.537-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Arch Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Asus Chromebox"/><category scheme="http://www.blogger.com/atom/ns#" term="xbmc"/><title type="text">How to Install Arch Linux on Asus Chromebox</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJHBlKg3TJMIArHsvYtl8vPOTzEehxHHrEePOZMKAs5f8dYDvFI2ksxf-g9wnvOgxXgFQ_NCikEdjmgSjgyUjvz9XE9t2nSPeV_eUdzyMoZFQ-7q2q0ndAM5HYFH1s1XmayBAiftZwlaw/s1600/asus_chromebox.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJHBlKg3TJMIArHsvYtl8vPOTzEehxHHrEePOZMKAs5f8dYDvFI2ksxf-g9wnvOgxXgFQ_NCikEdjmgSjgyUjvz9XE9t2nSPeV_eUdzyMoZFQ-7q2q0ndAM5HYFH1s1XmayBAiftZwlaw/s1600/asus_chromebox.jpg" height="213" width="320" alt="Asus Chromebox"/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
I decided to write down the instruction how to install Arch Linux on Asus Chromebox. I replaced my Raspberry Pi with Asus Chromebox as TV media box recently and such instruction will be useful in the case if I want to repeat installation.&lt;br /&gt;
I just want to warn - it does not create dual boot with ChromeOS and it just replaces ChromeOS with Arch Linux. I’m fine with such result, because I don’t need ChromeOS on my TV. XMBC is my choice for a TV media box.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;div class="se-section-delimiter"&gt;
&lt;/div&gt;
&lt;h4 id="1-enable-development-mode-and-legacy-boot"&gt;
1. Enable development mode and legacy boot&lt;/h4&gt;
It’s an essential step to run Arch Linux live media from USB port. You can use following instructions from &lt;a href="http://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices/asus-chromebox"&gt;ChromiumOS Wiki&lt;/a&gt;.&lt;br /&gt;
&lt;div class="se-section-delimiter"&gt;
&lt;/div&gt;
&lt;h4 id="2-update-firmware"&gt;
2. Update firmware&lt;/h4&gt;
The updated version of firmware contains the fix for booting from USB. Download from &lt;a href="http://johnlewis.ie/asus-chromebox-SeaBIOS-new.bin"&gt;http://johnlewis.ie/asus-chromebox-SeaBIOS-new.bin&lt;/a&gt; &lt;br /&gt;
And run in ChromeOS shell:&lt;br /&gt;
&lt;pre class="prettyprint prettyprinted"&gt;&lt;span class="pln"&gt;sudo flashrom &lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;w &lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;i RW_LEGACY&lt;/span&gt;&lt;span class="pun"&gt;:&lt;/span&gt;&lt;span class="pln"&gt;asus&lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;chromebox&lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="typ"&gt;SeaBIOS&lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="kwd"&gt;new&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;bin&lt;/span&gt;&lt;/pre&gt;
&lt;div class="se-section-delimiter"&gt;
&lt;/div&gt;
&lt;h4 id="3-set-firmware-boot-flags"&gt;
3. Set firmware boot flags&lt;/h4&gt;
In order to enable legacy boot by default you need to set several boot flags. You need to disable firmware write protect. Please, follow the instruction from &lt;a href="http://wiki.xbmc.org/index.php?title=ASUS_Chromebox#Disable_Firmware_Write_Protect"&gt;XBMC Wiki&lt;/a&gt;. &lt;br /&gt;
And run in ChromeOS shell:&lt;br /&gt;
&lt;pre class="prettyprint prettyprinted"&gt;&lt;span class="pln"&gt;sudo set_gbb_flags&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;sh &lt;/span&gt;&lt;span class="lit"&gt;0x489&lt;/span&gt;&lt;/pre&gt;
It enables 1 second boot wait time and legacy boot as default option. So there is no need to press CTRL-L to boot Arch Linux on each start of Chromebox.&lt;br /&gt;
&lt;div class="se-section-delimiter"&gt;
&lt;/div&gt;
&lt;h4 id="4-prepare-arch-linux-live-media"&gt;
4. Prepare Arch Linux live media&lt;/h4&gt;
The one important tip: the latest version (May 2014) is failing to boot in x86_64 mode. So you need to get some older image. It is not a issue, you will get the latest version of packages during install with Internet connection. I got 2013 ISO image from &lt;a href="http://linuxtracker.org/index.php?page=torrent-details&amp;amp;id=4343552155062db9a7a05a10904f5c68f98b1216"&gt;here&lt;/a&gt;.  &lt;br /&gt;
The instruction for preparing USB media is &lt;a href="https://wiki.archlinux.org/index.php/USB_Installation_Media"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;div class="se-section-delimiter"&gt;
&lt;/div&gt;
&lt;h4 id="5-install-arch-linux"&gt;
5. Install Arch Linux&lt;/h4&gt;
The &lt;a href="https://wiki.archlinux.org/index.php/beginners%27_guide"&gt;Beginner’s Guide&lt;/a&gt; is a good start point for a novice. At the end you will get minimal Arch Linux environment. The next steps depend from your needs. Don’t forget to install SSH server to enable remote access to Chromebox.&lt;br /&gt;
&lt;div class="se-section-delimiter"&gt;
&lt;/div&gt;
&lt;h4 id="6-install-xbmc-optional"&gt;
6. Install XBMC (optional)&lt;/h4&gt;
Install following packages to run XBMC as default Desktop Environment:&lt;br /&gt;
&lt;pre class="prettyprint prettyprinted"&gt;&lt;span class="pln"&gt;sudo pacman &lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;S xorg&lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;server xorg&lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;xinit xf86&lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;video&lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;intel xbmc&lt;/span&gt;&lt;/pre&gt;
That’s all and enjoy Arch Linux on your Asus Chromebox.&lt;div class="blogger-post-footer"&gt;Этот материал находится на сайте &lt;a href="http://abratukhin.blogspot.com/"&gt;http://abratukhin.blogspot.com/&lt;/a&gt;.&lt;/div&gt;</content><link href="http://abratukhin.blogspot.com/feeds/1403410647340435428/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2014/07/how-to-install-arch-linux-on-asus_1.html#comment-form" rel="replies" title="5 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/1403410647340435428" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/1403410647340435428" rel="self" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2014/07/how-to-install-arch-linux-on-asus_1.html" rel="alternate" title="How to Install Arch Linux on Asus Chromebox" type="text/html"/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01636864982943331995</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJHBlKg3TJMIArHsvYtl8vPOTzEehxHHrEePOZMKAs5f8dYDvFI2ksxf-g9wnvOgxXgFQ_NCikEdjmgSjgyUjvz9XE9t2nSPeV_eUdzyMoZFQ-7q2q0ndAM5HYFH1s1XmayBAiftZwlaw/s72-c/asus_chromebox.jpg" width="72"/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6006755067744597587.post-873713596650425977</id><published>2014-04-07T21:03:00.000-07:00</published><updated>2014-07-01T15:05:22.088-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="i2c"/><category scheme="http://www.blogger.com/atom/ns#" term="raspberrypi"/><title type="text">How to enable I2C (IIC) in Raspberry Pi</title><content type="html">&lt;p&gt;The simple instruction for enabling I2C interface in Raspberry Pi (Rasbian).&lt;/p&gt;

&lt;a name='more'&gt;&lt;/a&gt;

&lt;p&gt;I2C (or IIC) is a universal bidirectional bus. I2C is common standard designed to allow one device communicate with another. &lt;br&gt;
The bus can connect multiple devices, each device has an unique address to distinguish them. &lt;br&gt;
Raspberry Pi supports I2C, but it’s disabled by default in Rasbian. &lt;/p&gt;

&lt;p&gt;So here is steps for configuring I2C.&lt;/p&gt;&lt;div class="se-section-delimiter"&gt;&lt;/div&gt;

&lt;h4 id="enable-kernel-modules-for-i2c"&gt;Enable kernel modules for I2C&lt;/h4&gt;

&lt;pre class="prettyprint prettyprinted"&gt;&lt;span class="pln"&gt;sudo echo &lt;/span&gt;&lt;span class="str"&gt;"i2c-bcm2708"&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str"&gt;/etc/&lt;/span&gt;&lt;span class="pln"&gt;modules
sudo echo &lt;/span&gt;&lt;span class="str"&gt;"i2c-dev"&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str"&gt;/etc/&lt;/span&gt;&lt;span class="pln"&gt;modules&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Remove enabled modules from kernel black list. Open file&lt;/p&gt;

&lt;pre class="prettyprint prettyprinted"&gt;&lt;span class="pln"&gt;sudo nano &lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt;etc&lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt;modprobe&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;d&lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt;raspi&lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;blacklist&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;conf&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;and comment out the lines below:&lt;/p&gt;

&lt;pre class="prettyprint prettyprinted"&gt;&lt;span class="pln"&gt;    &lt;/span&gt;&lt;span class="com"&gt;#blacklist spi-bcm2708&lt;/span&gt;&lt;span class="pln"&gt;
    &lt;/span&gt;&lt;span class="com"&gt;#blacklist i2c-bcm2708&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;.. by putting a # in front of them. Save file.&lt;/p&gt;

&lt;p&gt;Reboot system.&lt;/p&gt;

&lt;pre class="prettyprint prettyprinted"&gt;&lt;span class="pln"&gt;sudo reboot&lt;/span&gt;&lt;/pre&gt;&lt;div class="se-section-delimiter"&gt;&lt;/div&gt;

&lt;h4 id="install-i2c-tools-and-python-library"&gt;Install I2C tools and Python library&lt;/h4&gt;

&lt;p&gt;Install following packages from default repositories&lt;/p&gt;

&lt;pre class="prettyprint prettyprinted"&gt;&lt;span class="pln"&gt;sudo apt&lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="kwd"&gt;get&lt;/span&gt;&lt;span class="pln"&gt; install python&lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;smbus
sudo apt&lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="kwd"&gt;get&lt;/span&gt;&lt;span class="pln"&gt; install i2c&lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;tools&lt;/span&gt;&lt;/pre&gt;&lt;div class="se-section-delimiter"&gt;&lt;/div&gt;

&lt;h4 id="check-connected-devices"&gt;Check connected devices&lt;/h4&gt;

&lt;p&gt;Use following commnd for Raspberry Pi Model B:&lt;/p&gt;

&lt;pre class="prettyprint prettyprinted"&gt;&lt;span class="pln"&gt;sudo i2cdetect &lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;y &lt;/span&gt;&lt;span class="lit"&gt;1&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;And for Raspberry Pi Model A:&lt;/p&gt;

&lt;pre class="prettyprint prettyprinted"&gt;&lt;span class="pln"&gt;sudo i2cdetect &lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;y &lt;/span&gt;&lt;span class="lit"&gt;0&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;See example:&lt;/p&gt;

&lt;p&gt;&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTBBwvrOU3pO9b4VV352pwC-lyAy9ObrPGNYX7kKyZzu6jofkdONC1VZZXvE6Sd8EKcJfKktYOEE1_nie0tJsTz6HrSCSbVDfXZA4UwqFHytt5Ukhb55pyBv-3DAeD27XODyEIws6RlzI/s1600/i2cdetect.png" alt="i2cdetect output" title=""&gt;&lt;/p&gt;

&lt;p&gt;It shows that an one I2C address is in use - 0x77. So you can use it for communication with I2C device. &lt;br&gt;
Now your Pi is ready to use I2C devices.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;Этот материал находится на сайте &lt;a href="http://abratukhin.blogspot.com/"&gt;http://abratukhin.blogspot.com/&lt;/a&gt;.&lt;/div&gt;</content><link href="http://abratukhin.blogspot.com/feeds/873713596650425977/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2014/04/how-to-enable-i2c-iic-in-raspberry-pi.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/873713596650425977" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/873713596650425977" rel="self" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2014/04/how-to-enable-i2c-iic-in-raspberry-pi.html" rel="alternate" title="How to enable I2C (IIC) in Raspberry Pi" type="text/html"/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01636864982943331995</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTBBwvrOU3pO9b4VV352pwC-lyAy9ObrPGNYX7kKyZzu6jofkdONC1VZZXvE6Sd8EKcJfKktYOEE1_nie0tJsTz6HrSCSbVDfXZA4UwqFHytt5Ukhb55pyBv-3DAeD27XODyEIws6RlzI/s72-c/i2cdetect.png" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6006755067744597587.post-8374520663348497736</id><published>2014-02-11T14:45:00.001-08:00</published><updated>2014-02-11T14:46:40.285-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="education"/><title type="text">Coursera courses</title><content type="html">At the beginning of February I've been enrolled for two courses:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://class.coursera.org/algs4partI-004"&gt;Algorithms, Part I (Coursera)&lt;/a&gt;&amp;nbsp;by Kevin Wayne, Robert Sedgewick&lt;/li&gt;
&lt;li&gt;&lt;a href="https://class.coursera.org/guitar-004"&gt;Introduction to Guitar&lt;/a&gt;&amp;nbsp;by Thaddeus Hogarth&lt;/li&gt;
&lt;/ul&gt;
The both of courses are fundamental for areas where my interest &amp;nbsp;is high. Lets see how I will accomplish that, because the previous attempts were no so good for me, so many distractions didn't allow me to finish them in 2013 year. I hope I will be motivated enough for the next 6 weeks.&lt;div class="blogger-post-footer"&gt;Этот материал находится на сайте &lt;a href="http://abratukhin.blogspot.com/"&gt;http://abratukhin.blogspot.com/&lt;/a&gt;.&lt;/div&gt;</content><link href="http://abratukhin.blogspot.com/feeds/8374520663348497736/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2014/02/coursera-courses.html#comment-form" rel="replies" title="1 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/8374520663348497736" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/8374520663348497736" rel="self" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2014/02/coursera-courses.html" rel="alternate" title="Coursera courses" type="text/html"/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01636864982943331995</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6006755067744597587.post-6903126758156330987</id><published>2014-01-04T19:25:00.000-08:00</published><updated>2015-04-14T19:26:41.417-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="2013"/><category scheme="http://www.blogger.com/atom/ns#" term="book"/><category scheme="http://www.blogger.com/atom/ns#" term="fiction"/><category scheme="http://www.blogger.com/atom/ns#" term="science fiction"/><category scheme="http://www.blogger.com/atom/ns#" term="self improvements"/><title type="text">What I read in 2013</title><content type="html">&lt;h2&gt;
Science Fiction&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/1416555439/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1416555439&amp;amp;linkCode=as2&amp;amp;tag=otsiofme-20&amp;amp;linkId=26VPJQD73B6T5LU3"&gt;The Judas Solution by Zahn Timothy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/145329788X/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=145329788X&amp;amp;linkCode=as2&amp;amp;tag=otsiofme-20&amp;amp;linkId=JTZREZ62YIBDKFC4"&gt;The Backlash Mission by Zahn Timothy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/1453297871/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1453297871&amp;amp;linkCode=as2&amp;amp;tag=otsiofme-20&amp;amp;linkId=S4INWSJ2N7AAADBZ"&gt;Blackcollar by Zahn Timothy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0451524934/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0451524934&amp;amp;linkCode=as2&amp;amp;tag=otsiofme-20&amp;amp;linkId=OS2BNTGADQFECZSC"&gt;1984 by George Orwell&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Fiction&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0307474275/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0307474275&amp;amp;linkCode=as2&amp;amp;tag=otsiofme-20&amp;amp;linkId=GR7TVOAFGLT7PXRX"&gt;The Da Vinci Code by Dan Brown &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0743497465/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0743497465&amp;amp;linkCode=as2&amp;amp;tag=otsiofme-20&amp;amp;linkId=XLPE5MQBZJ5PQETN"&gt;Deception Point by Dan Brown&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0312944926/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0312944926&amp;amp;linkCode=as2&amp;amp;tag=otsiofme-20&amp;amp;linkId=FPGKHG4ZRI7RWOOA"&gt;Digital Fortress by Dan Brown&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Philosophy&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0060589469/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0060589469&amp;amp;linkCode=as2&amp;amp;tag=otsiofme-20&amp;amp;linkId=U3GD57OLDU7B2EEL"&gt;Zen and the art of motorcycle maintenance by Pirsing Robert&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Self improvements&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0452273226/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0452273226&amp;amp;linkCode=as2&amp;amp;tag=otsiofme-20&amp;amp;linkId=BHCOIKZOLP6CM3XQ"&gt;Supermind by Tony Busen&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="blogger-post-footer"&gt;Этот материал находится на сайте &lt;a href="http://abratukhin.blogspot.com/"&gt;http://abratukhin.blogspot.com/&lt;/a&gt;.&lt;/div&gt;</content><link href="http://abratukhin.blogspot.com/feeds/6903126758156330987/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2014/01/what-i-read-in-2013.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/6903126758156330987" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/6903126758156330987" rel="self" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2014/01/what-i-read-in-2013.html" rel="alternate" title="What I read in 2013" type="text/html"/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01636864982943331995</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6006755067744597587.post-6674944968243447818</id><published>2012-07-15T05:27:00.002-07:00</published><updated>2012-07-16T12:18:42.504-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="reading"/><title type="text">Links dump for July 15, 2012</title><content type="html">&lt;div class="document" id="links-dump-for-july-15-2012"&gt;
&lt;div class="section" id="inspiration"&gt;
&lt;h4&gt;


Inspiration&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;div class="first"&gt;
&lt;a class="reference external" href="http://www.federicopereiro.com/masters/"&gt;Read the masters&lt;/a&gt; - Thoughts about learning complex things.&lt;/div&gt;
&lt;blockquote&gt;
By studying the masters, not their pupils.&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div class="first"&gt;
&lt;a class="reference external" href="http://noexcuselist.com/"&gt;No Excuse List&lt;/a&gt; - The best plase on the web to learn anything, free.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="tools"&gt;
&lt;h4&gt;


Tools&lt;/h4&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="http://betterthangrep.com/"&gt;Ack&lt;/a&gt; is a tool like grep, optimized for programmers.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="vim-stuff"&gt;
&lt;h4&gt;


Vim stuff&lt;/h4&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="http://www.rudism.com/s/vimcreep"&gt;Vim Creep&lt;/a&gt; - Passionate essay about Vim.&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://github.com/ervandew/supertab/"&gt;Supertab&lt;/a&gt; - Perform all your Vim insert mode completions with Tab.&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://github.com/mileszs/ack.vim/"&gt;Ack for Vim&lt;/a&gt; - Vim plugin for &lt;a class="reference external" href="http://betterthangrep.com/"&gt;Ack&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="english"&gt;
&lt;h4&gt;


English&lt;/h4&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="http://lingualeo.ru/r/8algkb"&gt;LinguaLeo&lt;/a&gt; - Enjoyable way to learn English.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="startup"&gt;
&lt;h4&gt;


Startup&lt;/h4&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="http://michaelochurch.wordpress.com/2012/07/08/dont-waste-your-time-in-crappy-startup-jobs/"&gt;Don't wast your time in crappy startup jobs&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Этот материал находится на сайте &lt;a href="http://abratukhin.blogspot.com/"&gt;http://abratukhin.blogspot.com/&lt;/a&gt;.&lt;/div&gt;</content><link href="http://abratukhin.blogspot.com/feeds/6674944968243447818/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2012/07/links-dump-for-july-15-2012.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/6674944968243447818" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/6674944968243447818" rel="self" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2012/07/links-dump-for-july-15-2012.html" rel="alternate" title="Links dump for July 15, 2012" type="text/html"/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01636864982943331995</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6006755067744597587.post-4486967764401128296</id><published>2012-05-05T08:09:00.000-07:00</published><updated>2012-05-05T08:09:45.834-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="vim"/><title type="text">Python development environment for Ubuntu 12.04 Precise</title><content type="html">&lt;div class="document" id="python-development-environment-for-ubuntu-12-04-precise"&gt;
Frankly, my upgrade for the newest release of Ubuntu 12.04 Precise broke my OS.
And I didn't have any chance to recover it. So I just reinstalled Ubuntu and got fresh,
but empty operation system. The last time when I did setup of Python development environment was one year ago.
All my notes about this things were old and unsuitable for the latest Ubuntu release.
This post is summary of my actions to setup Python development environment from scratch.&lt;br /&gt;
Install Python setuptools package:&lt;br /&gt;
&lt;pre class="literal-block"&gt;sudo apt-get install python-setuptools python-pip
&lt;/pre&gt;
Install virtualenvwrapper:&lt;br /&gt;
&lt;pre class="literal-block"&gt;sudo pip install virtualenvwrapper
&lt;/pre&gt;
Setup virtualenvwrapper:&lt;br /&gt;
&lt;pre class="literal-block"&gt;mkdir -p ~/.virtualenvs
echo 'export WORKON_HOME=~/.virtualenvs' &amp;gt;&amp;gt; ~/.bashrc
echo 'export DJANGO_SITES_ROOT=$HOME/projects/' &amp;gt;&amp;gt; ~/.bashrc
echo 'source /usr/local/bin/virtualenvwrapper.sh' &amp;gt;&amp;gt; ~/.bashrc
source ~/.bashrc
&lt;/pre&gt;
Install Django extension for virtualenvwrapper. I have several Django projects, but if you aren't using Django, then you can skip this step:&lt;br /&gt;
&lt;pre class="literal-block"&gt;sudo apt-get install git-core
mkdir -p ~/.virtualenvs/django-libs
cd ~/.virtualenvs/django-libs
git clone https://github.com/epicserve/django-environment.git
cd ~/.virtualenvs/django-libs/django-environment/django_env/bin/
install.py
&lt;/pre&gt;
Test virtualenvwrapper:&lt;br /&gt;
&lt;pre class="literal-block"&gt;cd ~/projects
mkvirtualenv example
cd example &amp;amp;&amp;amp; ls
&lt;/pre&gt;
Install PIL with JPEG, ZLib and FreeType support, if you aren't using PIL, then you can skip this step:&lt;br /&gt;
&lt;pre class="literal-block"&gt;sudo apt-get install libjpeg62-dev zlib1g-dev libfreetype6-dev
cd ~/.virtualenvs/{project-name}
&lt;/pre&gt;
For 32-bit systems:&lt;br /&gt;
&lt;pre class="literal-block"&gt;ln -s /usr/lib/i386-linux-gnu/libz.so ./lib/
ln -s /usr/lib/i386-linux-gnu/libjpeg.so ./lib/
ln -s /usr/lib/i386-linux-gnu/libfreetype.so ./lib/
&lt;/pre&gt;
For 64-bit systems:&lt;br /&gt;
&lt;pre class="literal-block"&gt;ln -s /usr/lib/x86_64-linux-gnu/libz.so ./lib/
ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so ./lib/
ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so ./lib/

pip install PIL
&lt;/pre&gt;
I'm big fan of Vim, so here is steps for Vim also:&lt;br /&gt;
&lt;pre class="literal-block"&gt;sudo apt-get install vim.gtk
&lt;/pre&gt;
Install Pathogen plugin:&lt;br /&gt;
&lt;pre class="literal-block"&gt;mkdir -p ~/.vim/autoload ~/.vim/bundle
curl -so ~/.vim/autoload/pathogen.vim https://raw.github.com/tpope/vim-pathogen/master/autoload/pathogen.vim
&lt;/pre&gt;
add to ~/.vimrc file:&lt;br /&gt;
&lt;pre class="literal-block"&gt;call pathogen#infect()
&lt;/pre&gt;
Install Fugitive for Git support and Python-mode for all Python stuff in Vim:&lt;br /&gt;
&lt;pre class="literal-block"&gt;cd ~/.vim/bundle
git clone git://github.com/tpope/vim-fugitive.git
git clone git://github.com/klen/python-mode.git
&lt;/pre&gt;
Install super-fast Command-T plugin for opening files in Vim:&lt;br /&gt;
&lt;pre class="literal-block"&gt;cd ~/.vim/bundle
git clone git://git.wincent.com/command-t.git
cd ~/.vim/bundle/command-t
rake make
&lt;/pre&gt;
That's all folks. I will keep this post updated for a while.&lt;br /&gt;
And If you have any comments and suggestions, please, post them in comments. Thanks.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Этот материал находится на сайте &lt;a href="http://abratukhin.blogspot.com/"&gt;http://abratukhin.blogspot.com/&lt;/a&gt;.&lt;/div&gt;</content><link href="http://abratukhin.blogspot.com/feeds/4486967764401128296/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2012/05/python-development-environment-for.html#comment-form" rel="replies" title="2 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/4486967764401128296" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/4486967764401128296" rel="self" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2012/05/python-development-environment-for.html" rel="alternate" title="Python development environment for Ubuntu 12.04 Precise" type="text/html"/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01636864982943331995</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6006755067744597587.post-553959510415635425</id><published>2012-02-13T23:18:00.000-08:00</published><updated>2012-05-05T08:10:43.724-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="education"/><category scheme="http://www.blogger.com/atom/ns#" term="training"/><title type="text">Онлайн курсы</title><content type="html">&lt;b&gt;Стэнфордские онлайн курсы&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.cs101-class.org/"&gt;http://www.cs101-class.org/&lt;/a&gt; - Базовый курс Computer Science (базовые алгоритмы и понятия)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.infotheory-class.org/"&gt;http://www.infotheory-class.org/&lt;/a&gt; - Теория информации (алгоритмы и структуры данных для хранения, сжатия и передачи информации)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.modelthinker-class.org/"&gt;http://www.modelthinker-class.org/&lt;/a&gt; - Теория моделирования (создание и управление моделями данных)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jan2012.ml-class.org/"&gt;http://jan2012.ml-class.org/&lt;/a&gt; - Теория машинного обучения (самообучаемые алгоритмы)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.saas-class.org/"&gt;http://www.saas-class.org/&lt;/a&gt; - Программное обеспечение как сервис (теория и практика построения SaaS)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.hci-class.org/"&gt;http://www.hci-class.org/&lt;/a&gt; - Теория взаимодействия человека с компьютером (проектирование пользовательских интерфейсов, юзабилити)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.nlp-class.org/"&gt;http://www.nlp-class.org/&lt;/a&gt; - Обработка текста натуральных языков (лексический, семантический и синтаксический анализ текста)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.game-theory-class.org/"&gt;http://www.game-theory-class.org/&lt;/a&gt; - Теория игр (статистика, вероятности, стратегии, стохастический анализ)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.pgm-class.org/"&gt;http://www.pgm-class.org/&lt;/a&gt; - Графическое моделирование (цепи Маркова, Байесовские сети, пересекается с Теорией машинного обучения)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.crypto-class.org/"&gt;http://www.crypto-class.org/&lt;/a&gt; - Криптография (различные алгоритмы шифрования)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.algo-class.org/"&gt;http://www.algo-class.org/&lt;/a&gt; - Проектирование и анализ алгоритмов (фундаментальные понятия для проектирования алгоритмов, сортировка, поиск и т.д.)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.security-class.org/"&gt;http://www.security-class.org/&lt;/a&gt; - Базовый курс компьютерной безопасности (проектирование и анализ систем безопасности для программ)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.vision-class.org/"&gt;http://www.vision-class.org/&lt;/a&gt; - Компьютерное видение (алгоритмы обработки изображений и видеопотока)&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;MIT онлайн курсы&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://mitx.mit.edu/"&gt;http://mitx.mit.edu/&lt;/a&gt; - Схематехника и электроника&lt;/li&gt;
&lt;li&gt;&lt;a href="http://courses.csail.mit.edu/6.006/spring11/notes.shtml"&gt;http://courses.csail.mit.edu/6.006/spring11/notes.shtml&lt;/a&gt; - Введение в алгоритмы и структуры данных&lt;/li&gt;
&lt;li&gt;&lt;a href="http://courses.csail.mit.edu/6.851/spring12/"&gt;http://courses.csail.mit.edu/6.851/spring12/&lt;/a&gt; - Структуры данных (advanced)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://relate.mit.edu/physicscourse"&gt;http://relate.mit.edu/physicscourse&lt;/a&gt; - Ньютоновская механика&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Другие&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.udacity.com/"&gt;http://www.udacity.com/&lt;/a&gt; - Computer science курсы от конкурентов Стэнфорда&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.cs.washington.edu/education/courses/csep501/08wi/lectures/index.html"&gt;http://www.cs.washington.edu/education/courses/csep501/08wi/lectures/index.html&lt;/a&gt; - Проектирование и создание компиляторов&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.khanacademy.org/"&gt;http://www.khanacademy.org/&lt;/a&gt; - Видео лекции по различным областям в том числе и Computer Science&lt;/li&gt;
&lt;li&gt;&lt;a href="http://projecteuler.net/"&gt;http://projecteuler.net/&lt;/a&gt; - различные задачи на программирование с возможностью контроля результата&lt;/li&gt;
&lt;li&gt;&lt;a href="http://tutsplus.com/course/30-days-to-learn-jquery/"&gt;http://tutsplus.com/course/30-days-to-learn-jquery/&lt;/a&gt; - 30-дневный курс по jQuery&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.lektorium.tv/"&gt;http://www.lektorium.tv/&lt;/a&gt; - видео лекции от ведущих лекторов России&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.cognitivemedia.co.uk/"&gt;http://www.cognitivemedia.co.uk/&lt;/a&gt; - видео лекции на различные темы с использованием когнитивных изображений&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;Этот материал находится на сайте &lt;a href="http://abratukhin.blogspot.com/"&gt;http://abratukhin.blogspot.com/&lt;/a&gt;.&lt;/div&gt;</content><link href="http://abratukhin.blogspot.com/feeds/553959510415635425/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2012/02/blog-post.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/553959510415635425" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/553959510415635425" rel="self" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2012/02/blog-post.html" rel="alternate" title="Онлайн курсы" type="text/html"/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01636864982943331995</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6006755067744597587.post-4060903597934749962</id><published>2012-01-12T08:06:00.000-08:00</published><updated>2012-05-05T08:10:10.270-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="vim"/><title type="text">Light gray color schema for VIM</title><content type="html">I got bored with default dark desert color schema in &lt;a href="http://www.vim.org/" target="_blank"&gt;VIM&lt;/a&gt;. So I decided to get some light gray color schema in Internet, but I didn't find any usable for me&amp;nbsp;schema. Only &lt;a href="http://vim.sourceforge.net/scripts/script.php?script_id=760" target="_blank"&gt;"Peak Sea Color" schema&lt;/a&gt; was near of my wishes. And after several attempts of adopting this schema, I got the color schema which is satisfied me a lot. I made changes only for light background case. May be somebody will be interesting with this color schema.&amp;nbsp;You can get this color schema from my GitHub repository -&amp;nbsp;&lt;a href="https://github.com/andreybratukhin/peakseacolor"&gt;https://github.com/andreybratukhin/peakseacolor&lt;/a&gt;.&amp;nbsp;Enjoy.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg96rC8xVqXYbYejSk-j9sFIwtOQqzLPjgUGbvLiJeeydGJsn4AH5RRGxZnBJf_bL3LpM9mtCEuSbVdp0allvYeZuk666iDTTmPDMpk-7ufmT35eAxKB8gfHd9lcKxixNTGjGHoAk_rBsc/s1600/peaksea.vim+%2528%257E-.vim-colors%2529+-+GVIM_001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="272" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg96rC8xVqXYbYejSk-j9sFIwtOQqzLPjgUGbvLiJeeydGJsn4AH5RRGxZnBJf_bL3LpM9mtCEuSbVdp0allvYeZuk666iDTTmPDMpk-7ufmT35eAxKB8gfHd9lcKxixNTGjGHoAk_rBsc/s400/peaksea.vim+%2528%257E-.vim-colors%2529+-+GVIM_001.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
To enable the scheme, you need&amp;nbsp;put the peaksea.vim in your $HOME/.vim/colors/ (or %HOME%\vimfiles\colors for Windows)&amp;nbsp;and put in ~/.vimrc the following:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;if !has("gui_running")&lt;br /&gt;&amp;nbsp; &amp;nbsp; set t_Co=256&lt;br /&gt;endif &lt;br /&gt;set background=light&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;colorschema peaksea&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Trebuchet MS', sans-serif;"&gt;UPDATE: I found very useful website, where you can create custom color schema for VIM -&amp;nbsp;&lt;/span&gt;&lt;a href="http://www.bilalquadri.com/villustrator/"&gt;http://www.bilalquadri.com/villustrator/&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Этот материал находится на сайте &lt;a href="http://abratukhin.blogspot.com/"&gt;http://abratukhin.blogspot.com/&lt;/a&gt;.&lt;/div&gt;</content><link href="http://abratukhin.blogspot.com/feeds/4060903597934749962/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2012/01/light-gray-color-schema-for-vim.html#comment-form" rel="replies" title="3 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/4060903597934749962" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/4060903597934749962" rel="self" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2012/01/light-gray-color-schema-for-vim.html" rel="alternate" title="Light gray color schema for VIM" type="text/html"/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01636864982943331995</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg96rC8xVqXYbYejSk-j9sFIwtOQqzLPjgUGbvLiJeeydGJsn4AH5RRGxZnBJf_bL3LpM9mtCEuSbVdp0allvYeZuk666iDTTmPDMpk-7ufmT35eAxKB8gfHd9lcKxixNTGjGHoAk_rBsc/s72-c/peaksea.vim+%2528%257E-.vim-colors%2529+-+GVIM_001.png" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6006755067744597587.post-7384781566449577689</id><published>2011-03-28T13:28:00.000-07:00</published><updated>2011-03-28T13:28:56.554-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aspectj"/><category scheme="http://www.blogger.com/atom/ns#" term="training"/><title type="text">AspectJ training</title><content type="html">On previous week I held yet another training for our developers in Donetsk's office of Exadel. And I want to thank of &lt;a href="http://www.slideshare.net/akopium/ss-6983778"&gt;Dmitry Chidzikov (Дмитрий Чижиков) for slides&lt;/a&gt; that he presented on February meet of &lt;a href="http://cnc.dn.ua/"&gt;Coffe'n'Code&lt;/a&gt;. I've used some of slides of Dmitry in my training's presentation. Thanks a lot.&lt;br /&gt;
See above my slides.&lt;br /&gt;
&lt;strong style="display: inline !important; margin-bottom: 4px; margin-left: 0px; margin-right: 0px; margin-top: 12px;"&gt;&lt;a href="http://www.slideshare.net/andreybratukhin/aspectoriented-programming" title="Aspect-Oriented Programming"&gt;Aspect-Oriented Programming&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;div id="__ss_7420916" style="width: 425px;"&gt;&lt;object height="355" id="__sse7420916" width="425"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=aop-110328152613-phpapp02&amp;stripped_title=aspectoriented-programming&amp;userName=andreybratukhin" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse7420916" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=aop-110328152613-phpapp02&amp;stripped_title=aspectoriented-programming&amp;userName=andreybratukhin" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
&lt;div style="padding: 5px 0 12px;"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/andreybratukhin"&gt;Andrey Bratukhin&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Этот материал находится на сайте &lt;a href="http://abratukhin.blogspot.com/"&gt;http://abratukhin.blogspot.com/&lt;/a&gt;.&lt;/div&gt;</content><link href="http://abratukhin.blogspot.com/feeds/7384781566449577689/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2011/03/aspectj-training.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/7384781566449577689" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/7384781566449577689" rel="self" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2011/03/aspectj-training.html" rel="alternate" title="AspectJ training" type="text/html"/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01636864982943331995</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6006755067744597587.post-8939001179197911087</id><published>2011-02-04T04:21:00.000-08:00</published><updated>2011-02-04T04:21:10.589-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="jboss seam"/><title type="text">Part 1 - JBoss Seam and component model</title><content type="html">Это слайды к тренингу по JBoss Seam, который я провел на этой неделе.&lt;br /&gt;
&lt;div style="width:425px" id="__ss_6809734"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/andreybratukhin/jboss-seam-1-part" title="JBoss Seam 1 part"&gt;JBoss Seam 1 part&lt;/a&gt;&lt;/strong&gt;&lt;object id="__sse6809734" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=jbossseam1part-110204061333-phpapp02&amp;stripped_title=jboss-seam-1-part&amp;userName=andreybratukhin" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse6809734" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=jbossseam1part-110204061333-phpapp02&amp;stripped_title=jboss-seam-1-part&amp;userName=andreybratukhin" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/andreybratukhin"&gt;andreybratukhin&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Этот материал находится на сайте &lt;a href="http://abratukhin.blogspot.com/"&gt;http://abratukhin.blogspot.com/&lt;/a&gt;.&lt;/div&gt;</content><link href="http://abratukhin.blogspot.com/feeds/8939001179197911087/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2011/02/part-1-jboss-seam-and-component-model.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/8939001179197911087" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/8939001179197911087" rel="self" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2011/02/part-1-jboss-seam-and-component-model.html" rel="alternate" title="Part 1 - JBoss Seam and component model" type="text/html"/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01636864982943331995</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6006755067744597587.post-4654056937341663874</id><published>2010-09-05T12:06:00.001-07:00</published><updated>2010-09-05T12:06:23.083-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="emacs"/><title type="text">GNU Emacs Starter Kit</title><content type="html">&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;I have tried several text editors before - vim, Kate, notepad++ and some others. But I didn't find the editor, that had such power as Emacs. GNU Emacs is the extensible, customizable, self-documented and cross-platformed text editor. Emacs text editor are most popular with software developers, just like me. And I found some fun and cool features in this editor for me. &lt;/p&gt;&lt;p&gt;But Emacs is annoying for the first blush. To improve that situation I have installed Emacs Starter Kit. The main killing feature of Starter Kit is the package installer. Also you can find useful predefined key bindings and packages. All is ready out of box. &lt;/p&gt;&lt;p&gt;Official Site of GNU Emacs - &lt;a target='_blank' title='http://www.gnu.org/software/emacs/' href='http://www.gnu.org/software/emacs/'&gt;http://www.gnu.org/software/emacs/&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Instruction for installing Emacs Starter Kit - &lt;a target='_blank' title='http://github.com/technomancy/emacs-starter-kit' href='http://github.com/technomancy/emacs-starter-kit'&gt;http://github.com/technomancy/emacs-starter-kit&lt;/a&gt; &lt;/p&gt;&lt;p/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Этот материал находится на сайте &lt;a href="http://abratukhin.blogspot.com/"&gt;http://abratukhin.blogspot.com/&lt;/a&gt;.&lt;/div&gt;</content><link href="http://abratukhin.blogspot.com/feeds/4654056937341663874/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2010/09/gnu-emacs-starter-kit.html#comment-form" rel="replies" title="2 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/4654056937341663874" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/4654056937341663874" rel="self" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2010/09/gnu-emacs-starter-kit.html" rel="alternate" title="GNU Emacs Starter Kit" type="text/html"/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01636864982943331995</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6006755067744597587.post-533082012014939150</id><published>2010-07-10T09:14:00.001-07:00</published><updated>2010-07-10T09:17:48.053-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="travel"/><title type="text">Seattle, WA</title><content type="html">&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p align='justify'&gt;Вот я и оказался в Сиетле, штат Вашингтон, США. Из-за близкого расположения гор (Олипик, Рэйнер) и Тихого океана - погода здесь очень переменчивая. Например, утром может быть солнечно, а к обеду уже идет дождь и достаточно холодно. В апреле, мае и июне в основном держалась температура от 16 до 22 градусов Цельсия, т.е. было достаточно прохладно. Местные аборигены мне так и говорили, что лето здесь начинаеться в июле и заканчиваеться в конце сентября.&lt;/p&gt;&lt;p align='justify'&gt;Основная достопримечательность - это, конечно, Space Needle (Космическая Иголка по-нашему). На верху этой башни находиться ресторан и смотровая площадка. В Space Needle лучше идти под вечер, перед закатом. Пока ты наслождаешься различными блюдами и напитками, то сам ресторан не стоит на месте, а крутиться вокруг оси. И если ты сидишь возле окна, то открываются изумительные виды на город и залив. Но лучше дождаться заката и увидеть ночной Сиетл с высоты птичьего полета. &lt;a href='http://picasaweb.google.com/andrey.bratukhin/SpaceNeedle'&gt;Дружно смотрим фотки на пикасе.&lt;/a&gt; &lt;/p&gt;&lt;p align='justify'&gt;Pike Place (Market) - это убежище уличных торгащей, которые наживаются на бедных туристах. Но это место, как раз и интересно своим сборищем неординарных персонажей, которые стараються любыми способами привлечь внимание прохожих. Тут можно увидеть уличных музыкантов, фокусников, клоунов и просто попрашаек. Местные лавочники тоже стараються не отставать от этого балагана. Я сам стал свидетелем, когда турист купил рыбу и ждал около 10 минут, смотря на то, как продавцы перекидываю купленную рыбу из рук в руки и напивают песню, о том как тяжело было поймать эту рыбу в океане. Вообщем, покупка в этом месте может превратиться в небольшое представление, так что будьте готовы.&lt;/p&gt;&lt;p align='center'&gt;&lt;img width='500' alt='Pike Place' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6ooR8afd5DPDhMOZBXTfbtLPMpqa3u7x5miAzsWLPkCyMAKnZ8U6V4JFR0Vw8jETypTbfwmSMGw3USAcVN6-cfrxCKlCRSOvOb5X-SNcAvCcpswDk5zd3-cUw9u0vhNQNlS_U6VkqEmk/s640/IMG_3179.JPG'/&gt;&lt;/p&gt;&lt;p align='justify'&gt;Как можно увидеть на фотографии, группа уличных музыкантов стоит возле Starbucks. Сиетл также известен тем, что именно в нем открылся первый магазин Starbucks, который в последствии превратился в супер-сеть кофейных магазинов. И теперь каждое утро американца, начинается с горячей чашки кофе Starbucks.&lt;/p&gt;&lt;p align='justify'&gt;Продолжение следует...&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Этот материал находится на сайте &lt;a href="http://abratukhin.blogspot.com/"&gt;http://abratukhin.blogspot.com/&lt;/a&gt;.&lt;/div&gt;</content><link href="http://abratukhin.blogspot.com/feeds/533082012014939150/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2010/07/seattle-wa.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/533082012014939150" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/533082012014939150" rel="self" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2010/07/seattle-wa.html" rel="alternate" title="Seattle, WA" type="text/html"/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01636864982943331995</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6ooR8afd5DPDhMOZBXTfbtLPMpqa3u7x5miAzsWLPkCyMAKnZ8U6V4JFR0Vw8jETypTbfwmSMGw3USAcVN6-cfrxCKlCRSOvOb5X-SNcAvCcpswDk5zd3-cUw9u0vhNQNlS_U6VkqEmk/s72-c/IMG_3179.JPG" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6006755067744597587.post-5397601172708493363</id><published>2010-02-03T02:35:00.001-08:00</published><updated>2010-02-03T10:24:33.396-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type="text">Опять проблемы с Midnight Commander + zip + Ubuntu 9.10</title><content type="html">&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;В очередной раз наткнулся в относительно новой Ubuntu 9.10 на проблему с mc и zip-архивами. mc не хотел показывать содержимое zip-архивов, но после недолгих поисков на просторах интернета была найдена таблетка и от этой болезни. Нужно просто изменить параметр в файле “&lt;strong&gt;/usr/share/mc/extfs/uzip&lt;/strong&gt;” на&lt;br /&gt;
&lt;strong&gt;my $op_has_zipinfo=1;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Кстати, вышел новый стабильный релиз Midnight Commander 4.7.0.2 с множеством исправлений и улучшений. Советую поставить. Инструкция для Ubuntu - &lt;a href="http://www.midnight-commander.org/wiki/Binaries"&gt;http://www.midnight-commander.org/wiki/Binaries&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Этот материал находится на сайте &lt;a href="http://abratukhin.blogspot.com/"&gt;http://abratukhin.blogspot.com/&lt;/a&gt;.&lt;/div&gt;</content><link href="http://abratukhin.blogspot.com/feeds/5397601172708493363/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2010/02/midnight-commander-zip-ubuntu-910.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/5397601172708493363" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/5397601172708493363" rel="self" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2010/02/midnight-commander-zip-ubuntu-910.html" rel="alternate" title="Опять проблемы с Midnight Commander + zip + Ubuntu 9.10" type="text/html"/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01636864982943331995</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6006755067744597587.post-2916821068704096644</id><published>2009-10-08T03:24:00.001-07:00</published><updated>2009-11-05T07:56:33.410-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type="text">Install PostgreSQL on Ubuntu 9.04/9.10</title><content type="html">Краткая пошаговая инструкция по установке PostgreSQL для Ubuntu 9.04/9.10.&lt;br /&gt;
&lt;br /&gt;
Первый шаг - установка пакетов из репозитариев.&lt;br /&gt;
&lt;b&gt;$ sudo apt-get install postgresql postgresql-client postgresql-contrib&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;$ sudo apt-get install pgadmin3&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Изменяем пароль администратора БД по-умолчанию на что-нибудь более безопасное:&lt;br /&gt;
&lt;b&gt;$ sudo su postgres -c psql template1&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;template1=# ALTER USER postgres WITH PASSWORD 'yourpasswordhere';&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;template1=# \q&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Изменяем пароль пользователя, под которым запускается PostgreSQL:&lt;br /&gt;
&lt;b&gt;$ sudo passwd -d postgres&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;$ sudo su postgres -c passwd&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Устанавливаем так называемый "admin pack", который включает логирование и мониторинг для сервера:&lt;br /&gt;
для 9.04: &lt;br /&gt;
&lt;b&gt;$ sudo su postgres -c psql &amp;lt; /usr/share/postgresql/8.3/contrib/adminpack.sql&lt;/b&gt;&lt;br /&gt;
для 9.10: &lt;br /&gt;
&lt;b&gt;$ sudo su postgres -c psql &amp;lt; /usr/share/postgresql/8.4/contrib/adminpack.sql&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Включаем доступ к серверу для внешних соединенний. В противном случае, вы сможете подключиться только с localhost.&lt;br /&gt;
Для этого открываем файл&lt;br /&gt;
для 9.04: &lt;br /&gt;
&lt;b&gt;$ sudo gedit /etc/postgresql/8.3/main/postgresql.conf&lt;/b&gt;&lt;br /&gt;
для 9.10: &lt;br /&gt;
&lt;b&gt;$ sudo gedit /etc/postgresql/8.4/main/postgresql.conf&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
и изменяем&lt;br /&gt;
&lt;b&gt;#listen_addresses = 'localhost'&lt;/b&gt;&lt;br /&gt;
на&lt;br /&gt;
&lt;b&gt;listen_addresses = '*'&lt;/b&gt;&lt;br /&gt;
а также включаем шифрование пароля&lt;br /&gt;
&lt;b&gt;password_encryption = on&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно описать, кто может подключаться к серверу. Для этого нужно изменить файл&lt;br /&gt;
для 9.04: &lt;br /&gt;
&lt;b&gt;$ sudo gedit /etc/postgresql/8.3/main/pg_hba.conf&lt;/b&gt;&lt;br /&gt;
для 9.10: &lt;br /&gt;
&lt;b&gt;$ sudo gedit /etc/postgresql/8.4/main/pg_hba.conf&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
И заключительный этап - перезапустить сервер.&lt;br /&gt;
для 9.04: &lt;br /&gt;
&lt;b&gt;$ sudo /etc/init.d/postgresql-8.3 restart&lt;/b&gt;&lt;br /&gt;
для 9.10: &lt;br /&gt;
&lt;b&gt;$ sudo /etc/init.d/postgresql-8.4 restart&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;Этот материал находится на сайте &lt;a href="http://abratukhin.blogspot.com/"&gt;http://abratukhin.blogspot.com/&lt;/a&gt;.&lt;/div&gt;</content><link href="http://abratukhin.blogspot.com/feeds/2916821068704096644/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2009/10/install-postgresql-on-ubuntu-904.html#comment-form" rel="replies" title="2 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/2916821068704096644" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/2916821068704096644" rel="self" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2009/10/install-postgresql-on-ubuntu-904.html" rel="alternate" title="Install PostgreSQL on Ubuntu 9.04/9.10" type="text/html"/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01636864982943331995</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6006755067744597587.post-1698466070863645236</id><published>2009-09-09T07:39:00.001-07:00</published><updated>2009-09-09T07:41:00.093-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type="text">ILBC кодек для Ekiga</title><content type="html">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;img src="http://blog.ekiga.net/wp-content/uploads/2008/03/ekiga3_video.png" style="max-width: 800px; float: left; margin-top: 10px; margin-bottom: 10px; margin-right: 10px;" height="302" width="257" /&gt;Вот хочется мне, чтобы, когда я разговаривал по Ekiga (VoIP клиент), собеседник не переспрашивал, что же я на самом деле сказал. И все потому, что дефолтные кодеки абсолютно не справляются на средних и мало пропускных каналах.&lt;br /&gt;&lt;br /&gt;Чтобы решить проблему качества передачи голоса подключил ILBC кодек. Ниже маленькая инструкция как это сделать на Ubuntu 9.04:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1) добавить в /etc/apt/sources.list: &lt;span style="font-weight: bold;"&gt;&lt;br /&gt;deb http://ppa.launchpad.net/bojo42/ekiga/ubuntu jaunty main&lt;/span&gt;&lt;br /&gt;2) &lt;span style="font-weight: bold;"&gt;sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1901D523&lt;/span&gt;&lt;br /&gt;3) &lt;span style="font-weight: bold;"&gt;sudo apt-get install libopal3.6.1-plugins-ilbc&lt;/span&gt;&lt;br /&gt;4) в настройках Ekiga выбрать первым ILBC кодек.&lt;br /&gt;&lt;br /&gt;Всё! Разговаривайте на здоровье.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Этот материал находится на сайте &lt;a href="http://abratukhin.blogspot.com/"&gt;http://abratukhin.blogspot.com/&lt;/a&gt;.&lt;/div&gt;</content><link href="http://abratukhin.blogspot.com/feeds/1698466070863645236/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2009/09/ilbc-ekiga.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/1698466070863645236" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/1698466070863645236" rel="self" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2009/09/ilbc-ekiga.html" rel="alternate" title="ILBC кодек для Ekiga" type="text/html"/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01636864982943331995</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6006755067744597587.post-7264753359449870816</id><published>2009-09-04T03:12:00.001-07:00</published><updated>2009-09-10T23:41:17.830-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type="text">Как избавиться от двойной строки приглашения в mc (Midnight Commander) [Рецепты]</title><content type="html">&lt;div align="justify"&gt;После установки очередного обновления для Ubuntu 9.04 я заметил очень неприятный для себя баг в mc (Midnight Commander). В командной строке выводиться дублированная строка приглашения.&lt;br /&gt;
Например, &lt;br /&gt;
&lt;b&gt;0;username@computer-name:~/temp/folderusername@computer-name:~/temp/folder. &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Естественно если вложенность папок начинает превышать более трех, то в командной строчке остается очень мало места для набора самой команды. И это очень и очень не удобно.&lt;/div&gt;&lt;br /&gt;
&lt;div align="justify"&gt;Вообщем после гугления выяснилось, что это ошибка в mc и что она уже пофикшена, но версия с фиксом еще не включена в дебианские репозитории. Таким образом у меня было три варианта: ждать, искать пропатченную версию и искать workaround solution. &lt;br /&gt;
&lt;br /&gt;
Ждать не получилось. Исправленная версия находиться здесь - &lt;a href="https://launchpad.net/%7Esnizovtsev/+archive/ppa" target="_blank"&gt;https://launchpad.net/~snizovtsev/+archive/ppa&lt;/a&gt;, но потом возникли бы проблемы с обновлением. Поэтому решил найти обходной путь.&lt;/div&gt;&lt;br /&gt;
Чтобы избавиться от двойной строки приглашения нужно закоментировать строку в .bashrc:&lt;br /&gt;
# If this is an xterm set the title to user@host:dir&lt;br /&gt;
case "$TERM" in&lt;br /&gt;
xterm*|rxvt*)&lt;br /&gt;
&lt;b&gt;#    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"&lt;/b&gt;&lt;br /&gt;
;;&lt;br /&gt;
*)&lt;br /&gt;
;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
или что правильнее создать отдельный файл ~/.mc/bashrc с нужными настройками для mc.&lt;div class="blogger-post-footer"&gt;Этот материал находится на сайте &lt;a href="http://abratukhin.blogspot.com/"&gt;http://abratukhin.blogspot.com/&lt;/a&gt;.&lt;/div&gt;</content><link href="http://abratukhin.blogspot.com/feeds/7264753359449870816/comments/default" rel="replies" title="Post Comments" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2009/09/mc-midnight-commander.html#comment-form" rel="replies" title="0 Comments" type="text/html"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/7264753359449870816" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/6006755067744597587/posts/default/7264753359449870816" rel="self" type="application/atom+xml"/><link href="http://abratukhin.blogspot.com/2009/09/mc-midnight-commander.html" rel="alternate" title="Как избавиться от двойной строки приглашения в mc (Midnight Commander) [Рецепты]" type="text/html"/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/01636864982943331995</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>0</thr:total></entry></feed>