понедельник, 30 декабря 2013 г.

Цитата

Лучший путь к написанию эффективного кода — не усложнять его без необходимости.
Бьерн Страуструп

воскресенье, 29 декабря 2013 г.

Релиз reup-1.3.2

Изменения:
  1. Timestamp в имени файла при архивировании репозитория заменен на дату_время;
  2. Проведена некоторая оптимизация кода.
Исходный код доступен ЗДЕСЬ.

вторник, 10 декабря 2013 г.

Релиз reup-1.3.0

Добавлена возможность автоматического обновления таблицы, описывающей модификации двигателей и соответствующие им файлы "прошивок".

Исходный код доступен ЗДЕСЬ.

воскресенье, 8 декабря 2013 г.

Релиз reup-1.2.2

Внесенные изменения связаны с удобством использования.

Исходный код доступен ЗДЕСЬ.

суббота, 7 декабря 2013 г.

Релиз reup-1.2.1

Изменения:
  1. Устранена ошибка в функции очистки каталога утилиты trimmhex (функция удаляла не все указанные файлы);
  2. Добавлен вывод уведомлений о выполняемых операциях и их завершении;
  3. Оптимизирована обработка пользовательского ввода.
Исходный код доступен ЗДЕСЬ.

понедельник, 2 декабря 2013 г.

Релиз reup-1.2.0

Главным новшеством в этой версии является функционал автоматического обновления идентификационной информации в hex-файлах.

Исходный код доступен ЗДЕСЬ.

воскресенье, 1 декабря 2013 г.

C++. Intel hex. Checksum calculation

#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <algorithm>
#include <cstdint>

using namespace std;

vector<size_t> hexToNumBS(const string &srcStr) {

    vector<size_t> v;

    if ( srcStr.size() < 2 ) {
        return v;
    }

    stringstream ss;
    size_t code = 0;

    for ( size_t i=1; i<srcStr.size(); i+=2 ) {

        ss << hex << srcStr.substr(i-1, 2);
        ss >> code;
        v.push_back(code);

        ss.clear();
    }

    return v;
}

string checksum(const string &str) {

    vector<size_t> v = hexToNumBS(str);
    u_int8_t cs = 0;

    for ( size_t i=0; i<v.size(); i++ ) {
        cs -= v[i];
    }

    stringstream ss;
    ss << hex << static_cast<size_t>(cs);

    string ret;
    ss >> ret;

    if ( ret.size() < 2 ) {
        ret = "0" + ret;
    }
    else if ( ret.size() > 2 ) {
        return "";
    }

    transform(ret.begin(), ret.end(), ret.begin(), ::toupper);

    return ret;
}

int main() {

    string fullOrigStr("102AE0007C0803A6382100084E8000209421FFE8CE");
    cout << "Full original string:              "
         << fullOrigStr << "\n";

    string origStr = fullOrigStr.substr(0, fullOrigStr.size()-2);
    cout << "Original string w/o checksum byte: " << origStr << "\n";

    cout << "Calculated checksum:               "
         << checksum(origStr) << "\n";

    return 0;
}

четверг, 21 ноября 2013 г.

C++. Convert string to hex

После вчерашней заметки C++. Convert hex to string, стоит привести пример решения обратной задачи. То бишь, сконвертировать string в hex.
#include <iostream>
#include <sstream>

using namespace std;

void stringToHex(const string &srcStr, string &destStr) {

    destStr.clear();

    stringstream ss;

    for ( size_t i=0; i<srcStr.size(); i++ ) {
        ss << hex << static_cast<size_t>(srcStr[i]);
    }

    ss >> destStr;
}

int main() {

    string srcstr("Hello world!");
    string deststr;

    stringToHex(srcstr, deststr);

    cout << "\n" << deststr << "\n\n";

    //

    return 0;
}

среда, 20 ноября 2013 г.

C++. Convert hex to string

В рамках одного проекта встала задача сконвертировать hex в string. Гуглятся совершенно разные примеры и подходы. Я же хочу поделиться своим, на мой взгляд, наиболее простым и ясным решением.
#include <iostream>
#include <sstream>

using namespace std;

void hexToString(const string &srcStr, string &destStr) {

    if ( srcStr.size() < 2 ) {
        return;
    }

    destStr.clear();

    stringstream ss;
    size_t asciiCode = 0;

    for ( size_t i=1; i<srcStr.size(); i+=2 ) {

        ss << hex << srcStr.substr(i-1, 2);
        ss >> asciiCode;

        destStr.push_back(static_cast<char>(asciiCode));

        ss.clear();
    }
}

int main() {

    string srcstr("48656C6C6F20776F726C6421");
    string deststr;

    hexToString(srcstr, deststr);

    cout << "\n" << deststr << "\n\n";

    //

    return 0;
}

понедельник, 18 ноября 2013 г.

Релиз reup-1.1.2

Изменения в данной версии обеспечивают копирование всех файлов из каталогов hex и mpk при публикации репозитория. Ранее копировались только *.hex и *.mpk соответственно.
Исходный код доступен ЗДЕСЬ.

воскресенье, 17 ноября 2013 г.

Релиз reup-1.1.1

Некоторое время назад я решил переписать на C++ скрипт perl, созданный когда-то для автоматизации поддержки репозитория файлов для ЭБУ. Программа имеет консольный интерфейс с меню и активно работает с файловой системой, использует библиотеки boost. Несмотря на то, что reup (так я назвал свое произведение) "заточена" под конкретные условия и особенности организации работы, она может быть легко адаптирована и под другие аналогичные задачи благодаря доступным исходным кодам (reup распространяется на условиях GPL v3) и очень простой внутренней структуре.
Возможности текущей версии следующие:
  1. Триммирование hex-файлов с помощью внешней утилиты (задается в файле конфигурации);
  2. Архивирование оттримленных hex-файлов (архиватор и параметры архивации задаются в файле конфигурации);
  3. Обновление репозитория с заменой старых версий hex- и mpk-файлов их обновленными вариантами;
  4. Очистка директории утилиты trimhex (директория и расширения файлов, подлежащих удалению задаются в файле конфигурации);
  5. Публикация репозитория (файлы и каталоги локальной копии копируются по указанному в файле конфигурации адресу);
  6. Архивирование локальной копии репозитория.
Исходные код доступен ЗДЕСЬ.

суббота, 16 ноября 2013 г.

Релиз r49-16112013



Версии компонентов:
  • libtoxic v7.5.2
  • cr49 v1.3.0
  • Qr49 v3.11.0
Изменения:
  1. Qr49: Добавлена возможность просмотра статистической информации по выделенным ячейкам в таблицах с исходными данными (количество элементов, сумма, минимальное значение, максимальное значение, среднее).

вторник, 5 ноября 2013 г.

Релиз r49-05112013



Версии компонентов:
  • libtoxic v7.5.1
  • cr49 v1.3.0
  • Qr49 v3.10.3
Изменения:
  1. libtoxic: внесены коррективы в расчет приведенной мощности;
  2. libtoxic: исправлена ошибка, приводившая, при определенной комбинации исходных данных, к выводу "мусора" в отчет html;
  3. Qr49: улучшена логика работы кнопки "Копировать (НАМИ)" в диалоге "Отладочные данные";
  4. Qr49: внесены коррективы в функцию формирования данных в буфере обмена для вставки в отчет "НАМИ".

вторник, 29 октября 2013 г.

Конфигурация cmake для проекта на C++ с использованием boost

Задача стояла следующая. Есть кроссплатформенный проект на C++ (назовем его, к примеру, boost_test), который использует библиотеки boost (для примера, boost-filesystem). Используемый компилятор - gcc. Необходимо сформировать файл CMakeLists.txt, обеспечив статическое связывание проекта с нужными библиотеками boost и gcc в среде windows и динамическое в GNU/Linux. А заодно и освоить cmake, к которому давно приглядывался.

В результате, CMakeLists.txt получился следующим.
cmake_minimum_required(VERSION 2.8)

project(boost_test)
set(APP_NAME boost_test)
set(CMAKE_BUILD_TYPE RELEASE)

aux_source_directory(src SRC_LIST)

set(CMAKE_CXX_FLAGS "-std=c++11 -Wall -W -pedantic")

if(MINGW)
    set(Boost_USE_STATIC_LIBS ON)
    set(Boost_USE_SHARED_LIBS OFF)
else()
    set(Boost_USE_STATIC_LIBS OFF)
    set(Boost_USE_SHARED_LIBS ON)
endif()
find_package(Boost COMPONENTS system filesystem REQUIRED)
if(Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIR})
endif()
if(MINGW)
    set(BUILD_STATIC_LIBS ON)
    set(BUILD_SHARED_LIBS OFF)
    set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static")
else()
    set(BUILD_STATIC_LIBS OFF)
    set(BUILD_SHARED_LIBS ON)
endif()

add_executable(${PROJECT_NAME} ${SRC_LIST})
target_link_libraries(
    ${PROJECT_NAME}
    ${Boost_SYSTEM_LIBRARY}
    ${Boost_FILESYSTEM_LIBRARY}
    ${Boost_LIBRARIES}
)

Вдогонку, привожу несколько ссылок с неплохим, на мой взгляд, введением в cmake:
Хм.. И почему вот эти последние заметки не попались мне до того, как я закончил свой конфиг? Было бы куда проще, черт возьми )

boost. Компиляция с помощью gcc (mingw) в Windows

Оставим вводную в стороне и сразу за дело. На компьютере с Windows, где мне предстояло установить библиотеки boost, уже был установлен Qt, поэтому при сборке использовался mingw из комплекта Qt. Однако, ничто не мешает взять последнюю версию mingw отсюда. Итак, распаковываем скачанный архив boost и готовимся к сборке. Подготовка подразумевает правку файла bootstrap.bat и создание еще одного батника, назовем его build.bat. У меня содержимое этих файлов вышло следующее.

bootstrap.bat
@ECHO OFF

REM Copyright (C) 2009 Vladimir Prus
REM
REM Distributed under the Boost Software License, Version 1.0.
REM (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)

SET MINGWDIR=c:\Qt\Qt5.1.1\Tools\mingw48_32\bin\
SET BOOSTDIR=c:\boost\1.54.0\
SET PATH=%MINGWDIR%;PATH

ECHO Building Boost.Build engine
if exist ".\tools\build\v2\engine\bin.ntx86\b2.exe" del tools\build\v2\engine\bin.ntx86\b2.exe
if exist ".\tools\build\v2\engine\bin.ntx86\bjam.exe" del tools\build\v2\engine\bin.ntx86\bjam.exe
if exist ".\tools\build\v2\engine\bin.ntx86_64\b2.exe" del tools\build\v2\engine\bin.ntx86_64\b2.exe
if exist ".\tools\build\v2\engine\bin.ntx86_64\bjam.exe" del tools\build\v2\engine\bin.ntx86_64\bjam.exe
pushd tools\build\v2\engine

call .\build.bat gcc > ..\..\..\..\bootstrap.log
@ECHO OFF

popd

if exist ".\tools\build\v2\engine\bin.ntx86\bjam.exe" (
   copy .\tools\build\v2\engine\bin.ntx86\b2.exe . > nul
   copy .\tools\build\v2\engine\bin.ntx86\bjam.exe . > nul
   goto :bjam_built)

if exist ".\tools\build\v2\engine\bin.ntx86_64\bjam.exe" (
   copy .\tools\build\v2\engine\bin.ntx86_64\b2.exe . > nul
   copy .\tools\build\v2\engine\bin.ntx86_64\bjam.exe . > nul
   goto :bjam_built)

goto :bjam_failure

:bjam_built

REM Ideally, we should obtain the toolset that build.bat has
REM guessed. However, it uses setlocal at the start and does
REM export BOOST_JAM_TOOLSET, and I don't know how to do that
REM properly. Default to msvc for now.
set toolset=msvc

ECHO import option ; > project-config.jam
ECHO. >> project-config.jam
ECHO using %toolset% ; >> project-config.jam
ECHO. >> project-config.jam
ECHO option.set keep-going : false ; >> project-config.jam
ECHO. >> project-config.jam

ECHO.
ECHO Bootstrapping is done. To build, run:
ECHO.
ECHO     .\b2
ECHO.    
ECHO To adjust configuration, edit 'project-config.jam'.
ECHO Further information:
ECHO.
ECHO     - Command line help:
ECHO     .\b2 --help
ECHO.     
ECHO     - Getting started guide: 
ECHO     http://boost.org/more/getting_started/windows.html
ECHO.     
ECHO     - Boost.Build documentation:
ECHO     http://www.boost.org/boost-build2/doc/html/index.html

goto :end

:bjam_failure

ECHO.
ECHO Failed to build Boost.Build engine.
ECHO Please consult bootstrap.log for furter diagnostics.
ECHO.
ECHO You can try to obtain a prebuilt binary from
ECHO.
ECHO    http://sf.net/project/showfiles.php?group_id=7586^&package_id=72941
ECHO.
ECHO Also, you can file an issue at http://svn.boost.org 
ECHO Please attach bootstrap.log in that case.

goto :end

:end
В этом файле, по сравнению с оригинальным, добавлены строки
SET MINGWDIR=c:\Qt\Qt5.1.1\Tools\mingw48_32\bin\
SET BOOSTDIR=c:\boost\1.54.0\
SET PATH=%MINGWDIR%;PATH
И изменена строка
call .\build.bat gcc > ..\..\..\..\bootstrap.log

build.bat
SET MINGWDIR=c:\Qt\Qt5.1.1\Tools\mingw48_32\bin\
SET BOOSTDIR=c:\boost\1.54.0\

SET PATH=%BOOSTDIR%;%MINGWDIR%;PATH
CD %BOOSTDIR%
b2.exe --build-dir=%BOOSTDIR% toolset=gcc --build-type=complete stage

После того, как необходимые файлы отредактированы/созданы, приступаем к сборке. Для этого необходимо запустить сначала bootstrap.bat, который произведет компиляцию утилит автоматизации сборки библиотеки boost, а затем - созданный нами build.bat, который запустит сборку самой boost.
В общем-то и все. Скомпилированные библиотеки можно будет найти в каталоге stage.

Первоисточник: http://studff.ru/blog/programming/85.html.

UPD 18.12.2014

Заглянул в статистику своего блога и был удивлен популярностью данной статьи. На сегодняшний день, при актуальной версии boost 1.57, подобных манипуляций делать уже не нужно. Имея установленный MinGW, boost можно спокойно собрать буквально двумя командами (из каталога с исходниками).
bootstrap mingw
b2 toolset=gcc --build-type=complete

UPD 24.04.2017

Рекомендуется к прочтению заметка boost. Компиляция с помощью gcc (mingw) в Windows. Более простой метод

воскресенье, 13 октября 2013 г.

Запись скринкастов с помощью vlc

vlc - замечательная программа. Лично я использую ее и для просмотра фильмов, и для прослушивания музыки. Стоит отметить, что vlc не только плеер. Это настоящий комбайн. Так, с помощью vlc можно, к примеру, записывать скринкасты или конвертировать видео/аудио из одних форматов в другие. При этом настройки профилей доступны для редактирования.
В этой заметке я хочу показать, как выполняется запись скринкастов.

Запускаем vlc и выбираем пункт меню "Медиа -> Конвертировать/Сохранить".

В открывшемся диалоговом окне переходим на вкладку "Устройство захвата" и в качестве режима захвата выбираем "Экран". Выставляем желаемую частоту кадров и нажимаем на кнопку "Конвертировать/Сохранить".

В очередном диалоговом окне необходимо выбрать профиль, уточнить его настройки (контейнер, видеокодек, аудиокодек) и выбрать файл в который будет сохранен результат. После нажатия на кнопку "Начать" начнется запись.

Останавливается запись путем нажатия на кнопку "Останов" в главном окне vlc.

Вот, собственно, и все.

суббота, 21 сентября 2013 г.

Программист в день программиста

Стоило, конечно, опубликовать эту прикольную картинку на той неделе, ну да ладно )))

четверг, 19 сентября 2013 г.

Релиз r49-19092013



Версии компонентов:
  • libtoxic v7.5.0
  • cr49 v1.3.0
  • Qr49 v3.10.2
Изменения:
  1. Qr49: изменен интерфейс калькуляторов на панели расчетов;
  2. Qr49: из панели расчетов удален конвертер значений дымности. Данный функционал теперь доступен через пункт меню "Расчет -> Конвертировать значения дымности" и оперирует ячейками таблицы "Расчет удельных выбросов";
  3. Qr49: реализовано сворачивание главного окна по Shift-Esc.

понедельник, 16 сентября 2013 г.

Релиз r49-16092013



Версии компонентов:
  • libtoxic v7.5.0
  • cr49 v1.3.0
  • Qr49 v3.10.1
Изменения:
  1. libtoxic: добавлен новый параметр расчетов "Дата испытаний";
  2. libtoxic: вывод в отчеты даты испытаний (если параметр "Дата испытаний" установлен) или даты расчета (используется текущая дата);
  3. libtoxic: добавлен вывод в отчет HTML значений параметра qmdw по точкам цикла (расчет ТЧ);
  4. libtoxic: улучшение внешнего вида отчета HTML;
  5. cr49: использование нового параметра расчетов "Дата испытаний";
  6. Qr49: использование нового параметра расчетов "Дата испытаний". На панели "Параметры расчета выбросов ВВ" добавлено поле установки даты испытаний и кнопка сброса даты на текущую;
  7. Qr49: устранена проблема вставки однострочных данных из буфера обмена.

воскресенье, 15 сентября 2013 г.

Релиз r49-15092013



Версии компонентов:
  • libtoxic v7.4.0
  • cr49 v1.2.1
  • Qr49 v3.9.3
Изменения:
  1. libtoxic: формирование общих отчетов (по выбросам газообразных веществ и "твердых" частиц) в формате HTML по результатам расчетов на соответствие требованиям Правил ЕЭК ООН №49 и №96;
  2. libtoxic: информация для блока с описанием объекта тестирования (и для текстовых отчетов и для отчетов HTML) считывается из файла "r49data/engdescr.conf", если он существует, информация для блока с описанием технических жидкостей (для отчетов HTML) считывается из файла "r49data/techfluids.conf", если он существует;
  3. libtoxic: удален функционал по обработке отчетов (за ненадобностью, после создания функции saveReportHTML);
  4. libtoxic: более информативное сообщение о некорректных исходных данных при расчете приведенной мощности;
  5. Qr49: изменен диалог "Настойки отчетов". В диалоге реализован функционал по работе с файлами описаний объекта тестирования и технических жидкостей;
  6. Qr49: изменен один из путей поиска файлов перевода интерфейса ("langs/" вместо ".", "/usr/share/r49/translations/" - без изменений);
  7. Qr49: изменены значения левого, правого и нижнего полей страницы при выводе текстовых отчетов на печать (10 мм вместо 15 мм);
  8. Qr49: устранены замечания по работе функции ReportToPDF в среде Windows;
  9. Qr49: "горячие" клавиши функции рандомизации изменены на Ctrl+R.

воскресенье, 8 сентября 2013 г.

Релиз r49-08092013



Версии компонентов:
  • libtoxic v7.3.1
  • cr49 v1.2.1
  • Qr49 v3.9.2
Изменения:
  1. Qr49: некоторые изменения в функциях открытия файлов документации во внешних программах;
  2. В архив с бинарными файлами для Windows добавлена windowsprintersupport.dll, необходимость в которой возникла после перехода на Qt 5.1.1.

понедельник, 19 августа 2013 г.

Релиз r49-19082013



Версии компонентов:
  • libtoxic v7.3.1
  • cr49 v1.2.1
  • Qr49 v3.9.1
Изменения:
  1. libtoxic: устранена проблема, выражавшаяся в выводе значений параметра gPTs (по точкам) в отчет по результатам расчета выбросов газообразных ВВ с ОГ, когда этого не должно было происходить, при некоторых, редко используемых сочетаниях параметров расчета;
  2. Qr49: оптимизация логики GUI;
  3. Documentation: для более качественного вывода на печать, изменен код файла с описанием стандартов (diesel_engine_standards_ru.html).

среда, 14 августа 2013 г.

Релиз r49-14082013



Версии компонентов:
  • libtoxic v7.3.0
  • cr49 v1.2.1
  • Qr49 v3.9.0
Изменения:
  1. Qr49: добавлена возможность вставки новых строк выше или ниже текущего положения курсора в таблицы с исходными данными для расчета выбросов вредных веществ и приведенной мощности;
  2. Qr49: на вкладке "Отчеты" добавлена кнопка "Открыть каталог", по нажатию на которую производится открытие каталога (с активным в данный момент отчетом) в системном файловом менеджере;
  3. Qr49: для таблиц с исходными данными для расчета выбросов вредных веществ и приведенной мощности добавлена возможность множественного выделения ячеек, соответствующий функционал программы адаптирован для работы в новом режиме;
  4. Qr49: введено отслеживание изменений в открытом отчете, при переключении на другой файл или завершении работы с программой выдается запрос на сохранение;
  5. Documentation: для более качественного вывода на печать, изменен код файла с описанием стандартов (diesel_engine_standards_ru.html).

воскресенье, 11 августа 2013 г.

Релиз r49-11082013


СКАЧАТЬ
Для загрузки можно также воспользоваться зеркалом архива на dropbox.

Версии компонентов:
  • libtoxic v7.3.0
  • cr49 v1.2.1
  • Qr49 v3.8.0
Изменения:
  1. Qr49: в меню "Файл" добавлен пункт "Сохранить отчет и экспортировать в PDF...", реализующий последовательный запуск диалогов сохранения отчета и его экспорта в PDF;
  2. libtoxic: в шапке отчета для Euro-6..Euro-3 фраза "Report on cycle" заменена на "Report on ESC";
  3. libtoxic: в отчете по результатам расчета выбросов газообразных компонентов, в секции "Дополнительные точки", добавлены значения крутящего момента нетто;
  4. Qr49: новая реализация функции удаления строк из текущей таблицы, позволяющая удалять произвольные выбранные строки, а не только последнюю в таблице;
  5. Qr49: в меню "Файл" добавлен пункт "Копировать последние результаты в...", реализующий функционал копирования всех файлов, созданных в каталоге с результатами последнего проведенного расчета в другой каталог, указываемый в диалоге;
  6. libtoxic: добавлена новая функция, реализующая подстановку указанного текста в поля Engine протоколов;
  7. libtoxic: добавлена новая функция, создающая общий отчет (по результатам расчета выбросов газообразных компонентов и "твердых" частиц) на основе имеющихся;
  8. Qr49: добавлен диалог "Обработка отчетов", использование новых функций libtoxic (п. 6 и 7);
  9. Qr49: вызов диалога "Общие параметры", как и диалога "Обработка отчетов", помещены в новое меню "Настройки".
Из заказанного, в данном релизе отсутствует MultiSelection для таблиц и "умная" разбивка общего отчета на страницы при печати. Ждем следующих релизов )

вторник, 6 августа 2013 г.

Релиз r49-06082013


СКАЧАТЬ
Для загрузки можно также воспользоваться зеркалом архива на dropbox.

Версии компонентов:
  • libtoxic v7.2.3
  • cr49 v1.2.1
  • Qr49 v3.7.4
Изменения:
  1. Qr49: при формировании отчета по выбросам ТЧ, ссылка на него теперь, так же, как и ссылка на отчет по выбросам газообразных компонентов, появляется в выпадающем списке вкладки "Отчеты";
  2. Qr49: обновлен файл перевода интерфейса на русский язык.

четверг, 1 августа 2013 г.

Релиз r49-01082013


СКАЧАТЬ
Для загрузки можно также воспользоваться зеркалом архива на dropbox.

Версии компонентов:
  • libtoxic v7.2.3
  • cr49 v1.2.1
  • Qr49 v3.7.3
Изменения:
  1. libtoxic: внесены коррективы в расчет приведенной мощности;
  2. Qr49: улучшена работа функции рандомизации.

вторник, 30 июля 2013 г.

Релиз r49-30072013


СКАЧАТЬ
Для загрузки можно также воспользоваться зеркалом архива на dropbox.

Версии компонентов:
  • libtoxic v7.2.2
  • cr49 v1.2.1
  • Qr49 v3.7.2
Изменения:
  1. libtoxic: устранена проблема, выражавшаяся в ошибочном выводе значений дымности в протокол по результатам расчета ТЧ.

Релиз r49-29072013


СКАЧАТЬ
Для загрузки можно также воспользоваться зеркалом архива на dropbox.

Версии компонентов:
  • libtoxic v7.2.1
  • cr49 v1.2.1
  • Qr49 v3.7.2
Изменения:
  1. libtoxic: изменена логика в функции расчета дополнительных точек (Правила №49).

пятница, 26 июля 2013 г.

Релиз r49-26072013


СКАЧАТЬ
Для загрузки можно также воспользоваться зеркалом архива на dropbox.

Версии компонентов:
  • libtoxic v7.2.0
  • cr49 v1.2.1
  • Qr49 v3.7.2
Изменения:
  1. Qr49: устранена проблема, выражавшаяся в отсутствии реакции программы при попытке открыть файлы документации во внешних программах, если в путях присутствовали символы кириллицы.

вторник, 23 июля 2013 г.

Релиз r49-22072013


СКАЧАТЬ
Для загрузки можно также воспользоваться зеркалом архива на dropbox.

Версии компонентов:
  • libtoxic v7.2.0
  • cr49 v1.2.1
  • Qr49 v3.7.0
Изменения:
  1. Qr49: исправлена регрессивная ошибка, не позволяющая вводить отрицательные числа в диалоговом окне арифметических операций;
  2. Qr49, libtoxic: в диалоговом окне "Отладочные данные", при расчете приведенной мощности, добавлена функция копирования в специальном формате, использующемся для составления отчетов;
  3. Откорректировано руководство пользователя.

воскресенье, 21 июля 2013 г.

Beeline блокирует Mega?

Похоже, что так. По крайней мере в г. Ярославль, пользуясь услугами интернет провайдера Beeline, невозможно зайти на сайт mega.co.nz, являющийся сервисом облачного хранения данных. Мега хороша: 50 ГБ бесплатно, шифрование, очень удобный веб интерфейс. Но с нашими ...ми провайдерами, типа билайна... При использовании услуг других интернет провайдеров проблем с доступом на mega.co.nz не обнаружено.
В общем, для счастливых пользователей Beeline я отзеркалил некоторые свои архивы (или их часть) на Dropbox:
  • r49 - программный комплекс, предназначенный для расчета удельных выбросов вредных веществ с отработавшими газами дизельных двигателей, испытываемых по стационарным циклам - зеркало на dropbox.
  • mixan - программное обеспечение для экспресс анализа смесей сыпучих материалов и эмульсий, гранулометрического состава сыпучих материалов - зеркало на dropbox.
  • biblref - программа для создания библиографических ссылок - зеркало на dropbox.

Релиз r49-20072013


СКАЧАТЬ
Для загрузки можно также воспользоваться зеркалом архива на dropbox.

Версии компонентов:
  • libtoxic v7.1.3
  • cr49 v1.2.1
  • Qr49 v3.6.0
Изменения:
  1. libtoxic: откорректирована формула расчета расхода воздуха по значениям разрежения на измерительном сопле.
  2. Qr49: добавлена функция рандомизации.
  3. Qr49: добавлена функция понижения точности чисел в выбранных ячейках.
  4. Qr49: вместо вывода информации о стандартах в собственном диалоге, производится открытие html в ассоциированном системном приложении.

четверг, 18 июля 2013 г.

InoReader. Приложение для Android

Вот теперь я доволен на все сто! ) Я уже описывал InoReader, который выбрал в качестве замены Google Reader (мир праху его). Веб-интерфейс этого приложения весьма и весьма удобен, есть даже мобильный его вариант. Однако, иметь программу чтения новостей для Android все же хотелось. Я верил в разработчика, учитывая какой объем работы и в какие сроки он провернул, создавая веб-приложение. И сегодня нам стала доступна бета версия InoReader для Android! Т.к. программа на текущий момент имеет статус беты, то в поисковой выдаче на Google Play пока недоступна. Тем не менее, для участников сообщества InoReader Android Beta Testers открывается доступ к разделу Google Play, содержащему программы для тестирования.
Наслаждайтесь чтением новостей!

UPD 09.08.2013

Программа появилась в общем доступе на Google Play:
https://play.google.com/store/apps/details?id=com.innologica.inoreader

воскресенье, 7 июля 2013 г.

Использование Pepper Flash Player из Chrome в Chromium

Какое-то время назад Adobe объявили о том, что более не будут выпускать версий своего flash player для GNU/Linux. Последней оказалась версия 11.2. И черт бы с ними, vimeo и youtube спокойно переключаются на html5. Но, к сожалению, еще столько сайтов использует flash, что плейер все-таки приходится держать, а версия 11.2 уже реально протухла. Самой адекватной заменой мне представляется Pepper Flash Player от Google, который они встраивают в свой Chrome. Я же предпочитаю пользоваться Chromium. Ниже приводятся шаги по интеграции Pepper Flash Player в Chromium (предполагается, что последний у вас уже установлен) в Arch Linux.
  1. Скачать Chrome (например, для Ubuntu) с сайта Google chrome.google.com;
  2. Извлечь из архива каталог PepperFlash и скопировать его куда-нибудь, например, в /opt или /usr/lib/chromium;
  3. Прописать в файл /usr/bin/chromium путь и версию используемого Pepper (посмотреть эту информацию можно в файле manifest.json, находящемся в извлеченном из deb пакета каталоге PepperFlash).
Содержимое моего файла /usr/bin/chromium.
#!/bin/bash

# Allow users to override command-line options
# Based on Gentoo's chromium package (and by extension, Debian's)
if [[ -f /etc/chromium/default ]]; then
 . /etc/chromium/default
fi

# Prefer user defined CHROMIUM_USER_FLAGS (from env) over system
# default CHROMIUM_FLAGS (from /etc/chromium/default)
CHROMIUM_FLAGS=${CHROMIUM_USER_FLAGS:-$CHROMIUM_FLAGS}

export CHROME_WRAPPER=$(readlink -f "$0")
export CHROME_DESKTOP=chromium.desktop

exec /usr/lib/chromium/chromium $CHROMIUM_FLAGS --ppapi-flash-path=/usr/lib/chromium/PepperFlash/libpepflashplayer.so --ppapi-flash-version=11.7.700.203 --password-store=gnome "$@"

UPD: 17.05.2014

Похоже, что после выхода Chromium 34.0.1847.137 (268882), указанный выше метод работать перестал...

UPD: 21.05.2014

Установка chromium-pepper-flash из aur решает проблему.
yaourt -S chromium-pepper-flash

среда, 3 июля 2013 г.

Релиз Qt 5.1

Qt 5.1 доступен для загрузки. Об основных новшествах можно узнать из обзора на opennet и, конечно же, из официального анонса на qt-project. А в разделе блога digia, посвященном qt, даже представлены фото счастливых людей ))

вторник, 2 июля 2013 г.

Объединение комментариев на Blogger и Google+

Было дело, Google представил в Blogger функцию объединения комментариев с Google+.

Т.к. заметки в этом блоге я также транслирую в свою ленту на Google+, такое нововведение показалось мне весьма удобным и полезным. Функция была включена. Однако, как показала практика, если я пишу комментарий к заметке в блоге, то публикуется он только в Google+! В блоге ничего не остается! Черт возьми, ну вот зачем было так делать? Cудя по справке от самой же Google, данная функция должна была просто дублировать комментарии, а не отправлять их в G+, оставляя блог ни с чем. Что-то у гугла все последние нововведения какие-то... странные, мягко говоря...

среда, 26 июня 2013 г.

В поисках замены Google Reader

После того, как Google объявил о том, что собирается похоронить Reader, огорчились очень многие. Технологии RSS нужно отдать должное - она позволяет очень здорово экономить время на чтении новостей. Обзоров альтернативных вариантов на замену великому Reader понаписано великое множество и я, пробежавшись по некоторым из них и взглянув на то, что предлагают другие, решил было вообще отказаться от RSS и раскидал поток новостей по соц. сетям, т.к. ни один из вариантов мне не понравился. Причинами отказа были: неудачный (на мой взгляд) веб интерфейс, отсутствие приложения под Android, урезанный функционал (хочешь удобства - покупай подписку), отсутствие возможности работать по https. В результате, часть новостей у меня шла через ленту Google+, часть через Facebook, часть вообще через e-mail, а на пару-тройку сайтов все-таки приходилось заходить. Минусы очевидны, даже нечего и говорить. И самым большим минусом было то, что многие сайты не обеспечивали синхронизацию своих новостных лент со страницей в соц. сети. Почему? Я не знаю. Вообще, такая фишка (из списка читаемых мною каналов) есть только у habrahabr, у которого в Google+ идет практически весь RSS поток, и у opennet, у которого поток идет в сеть ВКонтакте. Все остальные просто ведут страницу в соц. сети параллельно, абсолютно не утруждая себя размещать там хотя бы наиболее важные новости.
Итак, я решил положить конец возникшему бардаку и вернуться на RSS. Ну очень уж без него тяжко. Пробежавшись еще раз, уже спустя более 3 месяцев после анонса похорон, по сайтам, предоставляющим аналогичный Google Reader функционал, я, в итоге, сделал выбор. Им стал InoReader. Из плюсов данного сервиса стоит отметить следующие возможности:
  1. Логин с использованием аккаунтов Google или Facebook, а также наличие обычной регистрации;
  2. Работа по протоколу https;
  3. Очень удобный вэб интерфейс на русском языке с поддержкой горячих клавиш;
  4. Отсутствие ограничений на количество каналов;
  5. Упорядочивание каналов по каталогам;
  6. Комментирование новостей;
  7. Отправка новости по e-mail или в ленту соц. сети (коих предоставлено весьма приличное количество);
  8. Наличие мобильной версии сайта.
Наверное, это далеко не все плюсы данного сервиса, я перечислил лишь те, которые для меня являются наиболее важными. Из минусов я могу отметить лишь отсутствие своего клиента под Android. Хотя наличие удобного мобильного варианта вэб интерфейса, позволяет о вышеуказанном минусе забыть.
В общем и целом я своим выбором доволен, а разработчику InoReader - огромное спасибо за работу!

суббота, 22 июня 2013 г.

Bjarne Stroustrup. The C++ Programming Language (4th Edition)

Создатель языка C++ Бьерн Страуструп работает над 4-м изданием книги "Язык программирования C++". С черновиками к первым главам можно ознакомиться по ссылке http://www.stroustrup.com/4th.html.

воскресенье, 16 июня 2013 г.

Релиз biblref-1.1.3



Изменения:
  1. Проект переведен на использование Qt5.
  2. Откорректированы фильтры файловых диалогов открытия и сохранения.
  3. Внесены коррективы в файлы *.pro и README.

ПО с использованием Qt. Создание файла перевода на этапе сборки

При создании приложений с использованием фреймворка Qt, графический интерфейс пользователя которых переведен на несколько языков, встает вопрос об автоматизации создания файла перевода (*.qm) на этапе сборки проекта.
Приведенный ниже кусок кода файла проекта содержит следующие указания для утилиты qmake: каталог размещения файла *.ts, содержащего перевод элементов GUI в формате xml, каталог назначения, где будет размещена скомпилированная программа и куда замет следует скопировать файл перевода интерфейса, а также набор инструкций, обеспечивающий генерацию файла *.qm из *.ts и копирование созданного файла в каталог назначения.
...
TRANSLATIONS = translations/myprogram_ru.ts
...
DESTDIR = ../myprogram-bin
...
updateqm.input = TRANSLATIONS
updateqm.output = myprogram_ru.qm
updateqm.commands = lrelease myprogram.pro && $(COPY) translations/*.qm ${DESTDIR}
updateqm.CONFIG += no_link target_predeps
QMAKE_EXTRA_COMPILERS += updateqm

среда, 12 июня 2013 г.

Релиз r49-12062013


СКАЧАТЬ

Версии компонентов:
  • libtoxic v7.1.2
  • cr49 v1.2.1
  • Qr49 v3.5.1
Изменения:
  1. Улучшена компоновка диалога "Импорт данных" Qr49.
  2. Откорректированы фильтры файловых диалогов открытия и сохранения Qr49.

воскресенье, 9 июня 2013 г.

Релиз r49-09062013


СКАЧАТЬ

Версии компонентов:
  • libtoxic v7.1.2
  • cr49 v1.2.1
  • Qr49 v3.5.0
Изменения:
  1. Проект переведен на использование Qt5.
  2. Т.к. отчет по результатам расчета всегда размещается на одной странице, печать номера страницы была неуместной и в данной версии libtoxic отменена.
  3. Устранено неадекватное поведение Qr49 в Windows после ввода некорректных данных при расчете оборотов A, B, C.
  4. При составлении шаблонов для автоматического импорта данных в Qr49 реализована привязка к заголовкам столбцов (именам параметров). Ранее привязка осуществлялась по номерам столбцов.
  5. В диалоге "Импорт данных" Qr49 добавлен виджет "Журнал", в котором отображаются привязки параметров r49 к параметрам в файле с импортируемыми данными. При сохранении шаблона именно содержимое этого виджета будет сохранено в файл.
  6. Для диалога "Импорт данных" Qr49 установлен фиксированный размер.
  7. Откорректировано руководство пользователя.

среда, 5 июня 2013 г.

Релиз Qwt 6.1

Состоялся релиз библиотеки виджетов и вспомогательных классов для визуализации числовых данных Qwt 6.1. О возможностях библиотеки можно узнать со страницы проекта на sourceforge: http://qwt.sourceforge.net/, а о нововведениях версии 6.1 - в официальном changelog: http://qwt.sourceforge.net/qwtchangelog.html.

воскресенье, 2 июня 2013 г.

Приложение с использованием Qt5. Необходимые библиотеки для работы в чистой Windows

Итак, написано приложение с использованием Qt5. В GNU/Linux, как обычно, все хорошо, все на месте, все прекрасно работает. Собираем свою программу в Windows и встает вопрос ее распространения для этого класса операционных систем. Какие библиотеки должны идти вместе с программой, чтобы она работала у любого пользователя на любом варианте Windows? Разумеется, что все зависит от использованных в программе модулей Qt5, поэтому я просто приведу пример для одного из своих проектов, читателю же, ориентируясь на приведенный список, придется сделать по аналогии. Список при использовании Qt 5.0.2 и release сборке проекта получился следующий.
platforms/qminimal.dll
platforms/qwindows.dll
D3DCompiler_43.dll
icudt49.dll
icuin49.dll
icuuc49.dll
libEGL.dll
libgcc_s_sjlj-1.dll
libGLESv2.dll
libstdc++-6.dll
libwinpthread-1.dll
Qt5Core.dll
Qt5Gui.dll
Qt5PrintSupport.dll
Qt5Widgets.dll

UPD 08.09.2013

После перехода на Qt 5.1.1, список необходимых библиотек несколько изменился.
platforms/qminimal.dll
platforms/qwindows.dll
printsupport/windowsprintersupport.dll
icudt51.dll
icuin51.dll
icuuc51.dll
libgcc_s_dw2-1.dll
libstdc++-6.dll
libwinpthread-1.dll
Qt5Core.dll
Qt5Gui.dll
Qt5PrintSupport.dll
Qt5Widgets.dll

суббота, 1 июня 2013 г.

Информация об установленных модулях оперативной памяти в GNU/Linux

Зачастую, бывает необходимо провести некоторый апгрейд компьютера, в частности, доустановить или заменить модули оперативной памяти. Для того, чтобы купить именно то, что нужно, необходимо получить информацию о том, что уже имеется на борту. Например, тип памяти или количество установленных модулей, а также, есть ли в наличии свободные слоты. Понятно, что все это не проблема. Выключаем компьютер, открываем крышку и смотрим. Однако, гораздо удобнее получить необходимую информацию не выключая компьютера. В GNU/Linux это можно сделать с помощью программы dmidecode. К примеру, на моем Sony Vaio VPCF12M1R/H программа выдает следующее:
[pa23@pa23comp ~]$ sudo dmidecode --type memory
# dmidecode 2.12
SMBIOS 2.6 present.

Handle 0x0009, DMI type 16, 15 bytes
Physical Memory Array
 Location: System Board Or Motherboard
 Use: System Memory
 Error Correction Type: None
 Maximum Capacity: Unknown
 Error Information Handle: Not Provided
 Number Of Devices: 2

Handle 0x000A, DMI type 17, 21 bytes
Memory Device
 Array Handle: 0x0009
 Error Information Handle: Not Provided
 Total Width: 64 bits
 Data Width: 64 bits
 Size: 2048 MB
 Form Factor: SODIMM
 Set: None
 Locator: SODIMM1
 Bank Locator: Bank 0
 Type: DDR3
 Type Detail: Unknown

Handle 0x000C, DMI type 17, 21 bytes
Memory Device
 Array Handle: 0x0009
 Error Information Handle: Not Provided
 Total Width: 64 bits
 Data Width: 64 bits
 Size: 2048 MB
 Form Factor: SODIMM
 Set: None
 Locator: SODIMM2
 Bank Locator: Bank 1
 Type: DDR3
 Type Detail: Unknown

[pa23@pa23comp ~]$ 
Как видно, в моем компьютере в наличии имеются 2 слота под модули памяти и оба они заняты. В каждом установлено по 2 ГБ. А я хочу иметь 8. Что ж, придется раскошелиться на 2 модуля по 4 ГБ )

Первоисточник: http://www.howtogeek.com/howto/28475/how-to-tell-what-type-of-memory-your-linux-pc-has-installed/

четверг, 18 апреля 2013 г.

Google talk plugin для Arch Linux

В связи с тем, что google talk plugin, позволяющий общаться по сети с использованием веб-камеры и микрофона, распространяется под GNU/Linux только в виде пакетов rpm и deb, а также в связи с тем, что в AUR присутствуют неактуальные версии как исходного пакета rpm, так и файла PKGBUILD, я, приведя последний в порядок, собрал пакет для Arch Linux (x86_64), чем с удовольствием и делюсь с другими арчеводами.

google-talkplugin-current-1-x86_64.pkg.tar.xz

Установка как обычно:
sudo pacman -U google-talkplugin-current-1-x86_64.pkg.tar.xz

UPD: 23.04.2014

Значительно проще воспользоваться утилитой yaourt для установки из репозитория aur соответствующего пакета.

суббота, 16 марта 2013 г.

пятница, 15 марта 2013 г.

Релиз engmod-2.0.3

Внесены некоторые коррективы в функцию формирования поля распределения.
Для загрузки: исходный код, пример расчета.

воскресенье, 10 февраля 2013 г.

Цитата

В жизни любого программиста есть такие решения, после принятия которых тараканы в голове аплодируют стоя.
Игорь Савчук (Блогератор)

Звездные войны. Консольная версия

Если вы до сих пор не видели консольную версию звездных войн, рекомендую посмотреть. Здорово реализовано. Для этого вам нужен, собственно, терминал, telnet и интернет. Следующая команда запустит фильм.
$ telnet towel.blinkenlights.nl
А один админ, использовав vrfs, Cisco 1841s и дружественный Reverse DNS, реализовал выдачу вводного текста из "Star Wars Episode IV: A New Hope". Увидеть эту круть можно с помощью следующей команды.
$ traceroute 216.81.59.173

Подробности, а также команды для Windows, можно найти в первоисточнике: Дьявольский traceroute до 216.81.59.173 - уличная магия для админов.

пятница, 8 февраля 2013 г.

Похоже цензура работает...

Заметил, что после публикации шуточной заметки "Демоны, зомби и их убийства )" посещаемость моего блога упала в 3 раза... Очень похоже, что из-за ключевого слова "убийства" Google просто понижает ссылки на мой блог в поисковой выдаче. Куда мы катимся, черт побери?..

суббота, 2 февраля 2013 г.

Демоны, зомби и их убийства )

Как же я люблю GNU/Linux! Даже когда садишься за компьютер с плохим настроением, моя любимая система всегда порадует, донеся классный юмор разработчиков используемых мной программ. Все эти демоны, зомби и их убийства мне чертовски приятны ))) А при тестировании одной из своих программ, в попытке довести систему до "Out of memory", что мне, собственно, без труда удалось, получил в консоли милое сообщение "Убито"! Ну разве не прелесть? )))

суббота, 26 января 2013 г.

Релиз r49-26012013


СКАЧАТЬ

Версии компонентов:
  • libtoxic v7.1.1
  • cr49 v1.2.0
  • Qr49 v3.4.3
Изменения:
  1. Устранено замечание, касающееся формирования отчета по выбросам газообразных компонентов по циклам Правил №96.

пятница, 18 января 2013 г.

Релиз r49-18012013


СКАЧАТЬ

Версии компонентов:
  • libtoxic v7.1.0
  • cr49 v1.2.0
  • Qr49 v3.4.3
Изменения:
  1. Начиная с 7.1.0, новые версии libtoxic можно использовать без перекомпиляции клиентских программ, за исключением отдельных случаев, которые будут особо обозначены в анонсах.

вторник, 15 января 2013 г.

Релиз r49-15012013


СКАЧАТЬ

Версии компонентов:
  • libtoxic v7.0.0
  • cr49 v1.2.0
  • Qr49 v3.4.3
Изменения:
  1. В Qr49 исправлена ошибка представления заголовков столбцов из файла данных при импорте;
  2. Актуализирован диалог импорта данных Qr49.

воскресенье, 13 января 2013 г.

emacs. Справочник команд

Помимо моего личного конспекта, emacs-ерам, в особенности начинающим, неплохо было бы иметь и более полный справочник команд. К сожалению, у меня только для предыдущей версии emacs, но отличий по основным командам там представленным быть не должно.

Справочник команд GNU Emacs для версии 23

Также, имеется справочник в виде весьма оригинально оформленной картинки.

суббота, 12 января 2013 г.

emacs. Управление

В дополнение к публикации своего конфигурационного файла .emacs, хочу также поделиться найденной у себя на жестком диске памяткой по горячим клавишам. Памятка составлена на основе встроенной в emacs справки и, понятное дело, информации в сети. Надеюсь, кому-нибудь пригодится, также, как когда-то мне. emacs - лучший редактор! )

EMACS

Создать/Открыть файл                        C-x C-f
Сохранить буфер в файл                      C-x C-s
Сохранить буфер под новым именем            C-x C-w
Сохранить все измененные буферы в файлы     C-x s
Перезагрузить файл в буфере                 C-x C-v

Переключиться в другой буфер                C-x C-b
Закрыть активный буфер                      C-x k

Убить слово перед курсором                  M-<BACKSPACE>
Убить слово за курсором                     M-d
Убить все до конца строки                   C-k
Убить все до конца предложения              M-k

Добавить пустую строку                      C-o
Удалить последующие пустые строки           C-x C-o

Установить метку                            C-<SPACE>
Выделить абзац                              M-h
Выделить блок кода                          C-M-h
Выделить все                                C-x h
Вырезать выделенный текст                   C-w
Скопировать выделенный текст                M-w
Вставить скопированый/вырезаный текст       C-y

Выровнять текущую строку                    <TAB>
Преобразовать слово в верхний регистр       M-u
Преобразовать слово в нижний регистр        M-l
Поменять слова местами                      M-t
Поменять тек. и верхнюю строки местами      C-x C-t

Установить метку для прямоуг. области       C-<SPACE>
Скопировать указанную область в регистр     C-x r r
Вставить прямоугольную область из регистра  C-x r g <НОМЕР_РЕГИСТРА>
Вырезать прямоугольную область              C-x r k
Удалить прямоугольную область               C-x r d
Вставить прямоугольную область              C-x r y
Вставить прямоугольную область пробелов     C-x r o
Пронумеровать строки                        C-x r N
Вставить текст перед каждой строкой         C-x r t <ТЕКСТ> <RET>

Отменить последнюю операцию                 C-_

Разделить окно по горизонтали               C-x 3
Разделить окно по вертикали                 C-x 2
Оставить только одно окно                   C-x 1
Переключение между окнами                   C-x o

Поиск текста вперед                         C-s
Поиск текста назад                          C-r

Поиск с заменой                             M-x replase-...

Выйти из минибуфера / Прерывание команды    C-g
Выход из рекурсивных уровней редактирования <ESC> <ESC> <ESC>

Повторение команды                          C-u <ЧИСЛО> <КОМАНДА>

Начать запись макроса                       C-x (
Закончить запись макроса                    C-x )
Выполнить записанный макрос                 C-x e

Компиляция                                  M-x compile
Автоформатирование выделенного фрагмента    C-M-\

Компиляция файла *.el                       M-x byte-compile-file

Переоткрыть файл в другой кодировке
                           C-x <RET> r <КОДИРОВКА> <RET> yes <RET>
Преобразование файла в другую кодировку
                           C-x <RET> с <КОДИРОВКА> <RET>

Закомментировать/Раскомментировать          M-;

DIRED

Запуск режима нав. по файловой системе      М-x dired
Выделить файл                               m
Снять выделение                             u
Копировать объект                           C
Удалить объект                              D
Переименовать объект                        R
Выделить файлы по рег. выражению            % m
Переименовать группу файлов по рег. выр.    % R

JABBER

Запустить jabber                            M-x jabber-connect-all

GNUS

Запустить gnus                              M-x gnus
Отобразить все каталоги imap                L
Проверить почту в *Group*                   g
Проверить почту в INBOX                     / N
Отметить письмо для дальнейших команд       #
Отметить письмо как прочитанное             d
Отметить все письма как прочитанные         c
Переместить письмо                          B m
Удалить письмо                              B <DEL>
Новое письмо                                m
Вложить файл                                C-c C-a
Ответить                                    R
Ответить всем                               R w
Переслать                                   C-c C-f
Сохранить письмо или вложение               o
Отправить письмо                            C-c C-c
Выйти из открытых gnus-ом буферов           q

ЗАКРЫТЬ EMACS                               C-x C-c

UPD: 29.11.2013
UPD: 30.11.2013
UPD: 12.01.2014
UPD: 17.01.2014
UPD: 09.05.2014
UPD: 06.09.2014
UPD: 17.09.2014
UPD: 27.08.2015

Релиз r49-12012013


СКАЧАТЬ

Версии компонентов:
  • libtoxic v7.0.0
  • cr49 v1.2.0
  • Qr49 v3.4.2
Изменения:
  1. С целью оптимизации существующих решений, определения единого интерфейса для всех расчетов, реализованных в libtoxic, а также для упрощения поддержки кода и расширения функционала, библиотека была полностью переписана;
  2. cr49 теперь использует стандартные длинные ключи;
  3. Оптимизирована встроенная справка cr49;
  4. Улучшен внешний вид выводимой cr49 информации;
  5. Проведена оптимизация кода Qr49;
  6. По всему проекту исправлены обнаруженные мелкие недочеты;
  7. В качестве версии дистрибутива, включающего в себя libtoxic, cr49, Qr49 и дополнительные файлы, теперь будет использоваться дата релиза.

emacs. Минимальная конфигурация

Ну грех ведь не поделиться своей конфигурацией emacs )
Мой рабочий файл .emacs можно найти ЗДЕСЬ.

UPD: 29.11.2013
UPD: 30.11.2013
UPD: 28.13.2013
UPD: 12.01.2014
UPD: 17.01.2014
UPD: 25.01.2014
UPD: 27.04.2014
UPD: 28.04.2014
UPD: 17.02.2015