Как изменить размер шрифта в SyntaxHighlighter

По какой-то причине в SyntaxHighlighter, который я использую для подсветки синтаксиса в этом блоге, нет опции изменить размер шрифта кода - он задан как 100% от размера шрифта родительского блока. Чтобы изменить его, можно вручную поменять это везде в css-файлах SyntaxHighlighter, но в моем случае, когда я просто гружу все необходимые файлы с сайта самого SyntaxHighlighter, пришлось бы размещать измененные файлы где-то еще и грузить оттуда. Другой подход - это оборачивать блок с кодом (блок <pre>) дополнительным блоком <div> с каким-нибудь собственным классом:
<div class="syntax_wrapper">
<pre class="brush:cpp">
Здесь располагается код на Си++
</pre>
</div>
и у себя в css прописать:
.syntax_wrapper { font-size:80%; }
Теперь размер шрифта для кода будет составлять 80% от размера шрифта для остального текста.

Как определить ip-адрес устройства в локальной сети в командной строке

Иногда полезно получить список ip-адресов всех устройств в подсети или в диапазоне адресов (например, чтобы подключиться по ssh к устройству, у которого нет монитора). Для этого отлично подойдет утилита nmap (распостраняется и для Linux  и для Windows, для Ubuntu она есть в репозиториях).
Вот как это можно сделать по маске подсети:
nmap -sn 192.168.1.0/24
Эта команда просканирует все 256 адресов в подсети 192.168.1 без сканирования портов, вернет список текущих активных устройств с их именами и ip-адресами.
Вот так можно получить список всех устройств с открытым 22-м портом (по умолчанию используется для ssh) в той же подсети:
nmap -p 22 --open -sV 192.168.1.0/24
Вместо маски подсети можно использовать диапазон адерсов:
nmap -sn 192.168.1.*
просканирует все 256 адерсов, начинающихся с 192.168.1., а
nmap -sn 192.168.1.24-128
просканирует адреса с 192.168.1.24 по 192.168.1.128.

Sublime Text 3: как запускать скрипты с помощью python3 а не python

По умолчанию в Sublime Text 3 python-скрипты выполняются с помощью команды python. При этом в Ubuntu 14.04 эта команда соответствует python версий 2.х. Чтобы выполнять скрипты в python версии 3.х (с помощью команды python3) необходимо выполнить следующие действия:
Выбираем в меню:  Tools -> Build System -> New Build System
Вводим в открывшемся окне:
{ 
"cmd": ["/absolute_path_to_python_binary/python3", "$file"] 
, "selector": "source.python" 
, "file_regex": "file \"(...*?)\", line ([0-9]+)" 
}
где absolute_path_to_python_binary - абсолютный путь до бинарников python3, который можно получить с помощью команды:
which python3
Затем сохраняем, и в меню Tools -> Build System выбираем схему по имени, под которым мы ее ранее сохранили.

NodeJS: простейший web-сервер принимающий POST-запросы с JSON

Я использую этот простой web-сервер для быстрого тестирования приложений, которые должны отправлять объекты JSON на сервер.
Для начала надо установить NodeJS (если он еще не установлен). В Ubuntu это делается с помощью следующей команды в терминале:
sudo apt-get install nodejs
Затем создаем файл (например, server.js) и помещаем в него следующий код:
var http = require('http');

const PORT=8080; 

function handleRequest(request, response){
    var body = [];
    request.on('error', function(err) {
        console.error(err);
    }).on('data', function(chunk) {
        body.push(chunk);
    }).on('end', function() {
        body = Buffer.concat(body).toString();
        try {
            var jsonObj = JSON.parse(body);
            console.log(jsonObj.var1);
            console.log(jsonObj.var2);
        } catch (e) {
            console.error(e);
        }

        response.on('error', function(err) {
            console.error(err);
        });

        response.writeHead(200);    
        response.end();
    });
}

var server = http.createServer(handleRequest);

server.listen(PORT, function(){
    console.log("Server listening on: http://localhost:%s", PORT);
});
Далее сохраняем файл и запускаем сервер с помощью команды:
nodejs server.js
Сервер будет слушать порт 8080, в случае входящего запроса пытаться интерпретировать его тело как объект JSON (в данном случае, объект с двумя полями: var1 и var2), выводить значение полей в консоль и отправлять обратно HTTP-код 200 (ОК). Если тело запроса не удалось интерпретировать как объект JSON, в консоль будет выведена ошибка (как и в случае, если ошибка произошла при приеме запроса или передаче ответа).
Протестировать работу сервера можно с помощью утилиты curl:
curl -H "Content-Type: application/json" -X POST -d '{"var1":"1","var2":"0"}' 127.0.0.1:8080

Использование умных указателей в C++ в качестве параметров

Этот пост является переводом статьи Герба Саттера: GotW #91 Solution: Smart Pointer Parameters.

Постановка проблемы

Простой вопрос

1. Каковы недостатки с точки зрения производительности следующего объявления функции? Объясните.
void f( shared_ptr<widget> );

Вопросы посложнее

2. Каковы недостатки с точки зрения корректности объявления функции из вопроса 1?

3. Ваш коллега реализует функцию f, которая принимает объект класса widget в качестве обязательного параметра, предназначенного только для чтения, и пытается выбрать из следующих возможных способов передать параметр (опустим ключевое слово const):
void f( widget* );             (a)
void f( widget& );             (b)
void f( unique_ptr<widget> );  (c)
void f( unique_ptr<widget>& ); (d)
void f( shared_ptr<widget> );  (e)
void f( shared_ptr<widget>& ); (f)
Для каких ситуаций какой способ подходит? Объясните свой ответ и укажите в каких случаях и куда конкретно стоит также добавить const к типу параметра. (Есть и другие способы передать параметр, но мы рассмотрим только представленные выше.)

SparkFun ESP8266 Thing: подключение и прошивка в Ubuntu 14.04

Подключение

SparkFun ESP8266 Thing - это плата для разработчиков на основе WiFi модуля ESP8266. К сожалению, на нее невозможно заливать прошивку просто через USB, USB используюется только для обеспечения питанием. Для программирования модуля необходим USB-to-Serial конвертер, например, такой, как использовал я: SparkFun FTDI Basic Breakout. Но и любой другой конвертер с 3,3 В на выходе должен подойти. Чтобы подключить конвертер к плате, нужно на ESP8266 Thing напаять разъем (далее будет фотография того, что получилось у меня).
Также не рекомендуется прошивать ESP8266, когда питание подается по USB. В моем случае это не было проблемой, так как у меня имелась батарейка, купленная специально для использования с этим модулем: JA-803450P. ESP8266 Thing умеет заряжать батарейку, когда подключено питание по USB.