Встроенные в Blogger кнопки "поделиться" не очень удобны: там представлен довольно ограниченный набор соц. сетей, да и сложно заставить их находиться там, где нужно (мне в итоге это не удалось в полной степени). К счастью, Яндекс предлагает свой настраиваемый блок "Поделиться". Проблемы начинаются, если хочется разместить кнопки не только на странице поста, но и на главной под каждым постом в списке, причем так, чтобы при нажатии на кнопку использовалась ссылка именно на пост, а не на страницу, на которой эта кнопка размещена. Для этого нужно использовать дополнительные настройки блока (полный список найтроек можно найти в документации).
Как изменить размер шрифта в SyntaxHighlighter
По какой-то причине в SyntaxHighlighter, который я использую для подсветки синтаксиса в этом блоге, нет опции изменить размер шрифта кода - он задан как 100% от размера шрифта родительского блока. Чтобы изменить его, можно вручную поменять это везде в css-файлах SyntaxHighlighter, но в моем случае, когда я просто гружу все необходимые файлы с сайта самого SyntaxHighlighter, пришлось бы размещать измененные файлы где-то еще и грузить оттуда. Другой подход - это оборачивать блок с кодом (блок <pre>) дополнительным блоком <div> с каким-нибудь собственным классом:
и у себя в css прописать:
Теперь размер шрифта для кода будет составлять 80% от размера шрифта для остального текста.
<div class="syntax_wrapper"> <pre class="brush:cpp"> Здесь располагается код на Си++ </pre> </div>
.syntax_wrapper { font-size:80%; }
Как определить ip-адрес устройства в локальной сети в командной строке
Иногда полезно получить список ip-адресов всех устройств в подсети или в диапазоне адресов (например, чтобы подключиться по ssh к устройству, у которого нет монитора). Для этого отлично подойдет утилита nmap (распостраняется и для Linux и для Windows, для Ubuntu она есть в репозиториях).
Вот как это можно сделать по маске подсети:
Эта команда просканирует все 256 адресов в подсети 192.168.1 без сканирования портов, вернет список текущих активных устройств с их именами и ip-адресами.
Вот так можно получить список всех устройств с открытым 22-м портом (по умолчанию используется для ssh) в той же подсети:
Вместо маски подсети можно использовать диапазон адерсов:
просканирует все 256 адерсов, начинающихся с 192.168.1., а
просканирует адреса с 192.168.1.24 по 192.168.1.128.
Вот как это можно сделать по маске подсети:
nmap -sn 192.168.1.0/24
Вот так можно получить список всех устройств с открытым 22-м портом (по умолчанию используется для ssh) в той же подсети:
nmap -p 22 --open -sV 192.168.1.0/24
nmap -sn 192.168.1.*
nmap -sn 192.168.1.24-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
Вводим в открывшемся окне:
Выбираем в меню: 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 это делается с помощью следующей команды в терминале:
Затем создаем файл (например, server.js) и помещаем в него следующий код:
Далее сохраняем файл и запускаем сервер с помощью команды:
Сервер будет слушать порт 8080, в случае входящего запроса пытаться интерпретировать его тело как объект JSON (в данном случае, объект с двумя полями: var1 и var2), выводить значение полей в консоль и отправлять обратно HTTP-код 200 (ОК). Если тело запроса не удалось интерпретировать как объект JSON, в консоль будет выведена ошибка (как и в случае, если ошибка произошла при приеме запроса или передаче ответа).
Протестировать работу сервера можно с помощью утилиты curl:
Для начала надо установить NodeJS (если он еще не установлен). В Ubuntu это делается с помощью следующей команды в терминале:
sudo apt-get install nodejs
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
Протестировать работу сервера можно с помощью утилиты 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.
3. Ваш коллега реализует функцию f, которая принимает объект класса widget в качестве обязательного параметра, предназначенного только для чтения, и пытается выбрать из следующих возможных способов передать параметр (опустим ключевое слово const):
Для каких ситуаций какой способ подходит? Объясните свой ответ и укажите в каких случаях и куда конкретно стоит также добавить const к типу параметра.
(Есть и другие способы передать параметр, но мы рассмотрим только представленные выше.)
Постановка проблемы
Простой вопрос
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)
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.
Подписаться на:
Сообщения
(
Atom
)