LINUX.ORG.RU

Сообщения user0xff

 

Firebird и Statement failed, SQLSTATE = 22003

Форум — Development

Добрый день всем.

Есть вопрос про Firebird 2.5.9 и ошибку:

Statement failed, SQLSTATE = 22003 Integer overflow. The result of an integer operation caused the most significant bit of the result to carry.

Почему вот такой запрос генерирует эту ошибку?

execute block
as
declare variable a numeric(18,4);
declare variable b numeric(18,4);
declare variable c numeric(18,4);
begin
    a = 100;
    b = 1000;
    c = 10000;
    a = a * b * c;
end

Если строчку

a = a * b * c;
переписать как
a = a * b;
a = a * c;
то этой ошибки уже нет.

Почему генерируется ошибка в первом случае?

 

user0xff
()

Firebird/Interbase, сигналы и isc_detach_database

Форум — Development

Вопрос к знатокам.

Есть такой вот код:

#include <stdio.h>
#include <signal.h>
#include <string.h>
#include <unistd.h>
#include <ibase.h>

int fb_error(ISC_STATUS_ARRAY status_vector)
{
    if (status_vector[0] == 1 && status_vector[1])
    {
        isc_print_status(status_vector);
        return -1;
    }
    return 0;
}

int fb_open(char* filename, char* user_name, char* user_password, isc_db_handle *handle)
{
    char dpb_buffer[256], *dpb, *p;
    ISC_STATUS_ARRAY status_vector;
    short dpb_length;
    dpb = dpb_buffer;
    *dpb++ = isc_dpb_version1;
    *dpb++ = isc_dpb_user_name;
    *dpb++ = strlen(user_name);
    for (p = user_name; *p;)
    *dpb++ = *p++;
    *dpb++ = isc_dpb_password;
    *dpb++ = strlen(user_password);
    for (p = user_password; *p;)
    *dpb++ = *p++;
    dpb_length = dpb - dpb_buffer;
    isc_attach_database(status_vector, 0, filename, handle, dpb_length, dpb_buffer);
    return !fb_error(status_vector);
}

void fb_close(isc_db_handle *handle)
{
    if (*handle)
    {
        ISC_STATUS_ARRAY status_vector;
        isc_detach_database(status_vector, handle);
        fb_error(status_vector);
    }
}

volatile sig_atomic_t enable = 1;

void stoper(int signum)
{
    enable = 0;
}

int main(void)
{
    isc_db_handle h = 0;

    signal(SIGINT, stoper);

    if (fb_open("filename.fdb", "user", "password", &h))
    {
        printf("Open\n");
        while (enable) sleep(1);
        printf("Interrupt\n");
        fb_close(&h);
        printf("Close\n");
    }

    printf("Stop\n");

    return 0;
}

По идее программа должна нормально завершаться.

То есть последовательно выводить: «Open», «Interrupt», «Close» и «Stop».

Но выводятся только «Open» и «Interrupt», и нет никаких «Close» и «Stop».

Что я делаю не так и как добиться нормального поведения?

 , , ,

user0xff
()

С++ и правило нуля

Форум — Development

Возник такой вопрос.

Есть в C++ правило нуля.

По этому правилу для владения ресурсами вместо простых указателей нужно использовать специальные классы-обёртки, такие как std::unique_ptr и std::shared_ptr и не определять конструкторы перемещения/копирования и такие же операторы присваивания.

Но если я объявляю деструктор класса - то обязан объявить и выше названые конструкторы с операторами присваивания (например, в виде = default).

Есть ли какой-то способ упростить вот этот код?

Что бы не писать каждый раз определения с = default.

#include <iostream>
#include <memory>

struct S
{
    S(void)
    {
        std::cout << "Constructor S" << std::endl;
    }

    S(const S &) = default;
    S(S &&) = default;
    S &operator=(const S &) = default;
    S &operator=(S &&) = default;

    virtual ~S(void)
    {
        std::cout << "Destructor S" << std::endl;
    }
};

int main(void)
{
    auto s = std::make_shared<S>();
    return EXIT_SUCCESS;
}

 

user0xff
()

Вывод типа для значений для которых нет перегрузки в std::ostream

Форум — Development

Вопрос к знатокам.

Хочу сделать вывод названий типов используя typeid(T).name() для выражений которые «не умеют» выводить своё значение в std::ostream.

Пытаюсь делать вот так:

#include <iostream>
#include <typeinfo>

template <typename T, typename = std::ostream&>
struct can_be_streamed : std::false_type {};

template <typename T>
struct can_be_streamed<T, decltype(std::declval<std::ostream&>() << std::declval<T>())> : std::true_type {};

template <typename S, typename T>
typename std::enable_if<!can_be_streamed<T>::value, S&>::type operator<<(S &s, const T &t)
{
    return s << "type:" << typeid(t).name();
}

class A {};

std::ostream& operator<<(std::ostream &s, const A &)
{
    return s << "value:" /*<< ...*/;
}

class B {};

int main(void)
{
    A a;
    std::cout << a << std::endl;
    B b;
    std::cout << b << std::endl;
    return EXIT_SUCCESS;
}

Есть несколько версий компиляторов и...

gcc 9.1.0 всё Ok.

clang 7.0.1 всё Ok.

А вот gcc 6.4.0 кричит:

v1.cpp: In substitution of 'template<class _CharT, class _Traits> std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&, const std::error_code&) [with _CharT = char; _Traits = std::char_traits<char>]':
v1.cpp:8:66:   recursively required by substitution of 'template<class S, class T> typename std::enable_if<(! can_be_streamed<T>::value), S&>::type operator<<(S&, const T&) [with S = std::basic_ostream<char>; T = char [8]]'
v1.cpp:8:66:   required by substitution of 'template<class S, class T> typename std::enable_if<(! can_be_streamed<T>::value), S&>::type operator<<(S&, const T&) [with S = std::basic_ostream<char>; T = char [8]]'
v1.cpp:20:17:   required from here
v1.cpp:8:66: fatal error: template instantiation depth exceeds maximum of 900 (use -ftemplate-depth= to increase the maximum)
 struct can_be_streamed<T, decltype(std::declval<std::ostream&>() << std::declval<T>())> : std::true_type {};

Откуда рекурсия?

И что нужно подправить для gcc 6.4.0 что бы это починить?

 

user0xff
()

C++, dlopen, Модули, Segmentation fault

Форум — Development

Пытаюсь написать небольшую программку с возможностью расширения её функционала через модули которые подгружать хочу вручную.

Вроде флаг RTLD_GLOBAL во второй параметр функции dlopen вполне может такое позволить сделать.

Ну так вот. Идея такая.

1. Программка подтягивает библиотечку (libcore.so) которая, в свою очередь добавляет к уже загруженной программе два вызова - core::oninit и core::doinit

2. Дальше программка догружает модуль (module.so) и вызывает функцию (module) которая в нём объявлена - что бы дальше модуль добавлял что-то в систему через обращение к core::oninit

... если будут ещё модули их тоже подгружаем и они тоже в своих функциях «module» вызывают core::oninit, и т.д.

3. Потом в основной программе делается core::doinit что бы по очереди вызвать то, что модули наскладывали в core::oninit

Вроде простая схема, но... упорно вылетает «Segmentation fault» уже ПОСЛЕ ТОГО КАК ВСЁ ПОЛЕЗНОЕ В main УЖЕ ВЫПОЛНЕНО.

Поэтому собственно вопрос - почему?

Ну или, что то же самое, - что я делаю не так? И как такое надо делать на самом деле правильно?

Сори за небольшое полотно из исходников, но их, на самом деле, не много.

Заранее спасибо за ответы.

start.cpp

#include <stdexcept>
#include <memory>
#include <dlfcn.h>

class Lib
{
    public:
        Lib(const std::string &filename)
        {
            auto handle = new void *;
            try
            {
                *handle = dlopen(filename.c_str(), RTLD_LAZY | RTLD_GLOBAL);
                if (*handle == nullptr) throw std::runtime_error(std::string(dlerror()));
                dlerror();
                try
                {
                    this->m_handle = std::shared_ptr<void *>(handle, [] (void **handle)
                    {
                        dlclose(*handle);
                        delete handle;
                    });
                }
                catch (...)
                {
                    dlclose(*handle);
                    throw;
                }
            }
            catch (...)
            {
                delete handle;
                throw;
            }
        }

        void *get(const std::string &itemname)
        {
            auto item = dlsym(*this->m_handle, itemname.c_str());
            auto error = dlerror();
            if (error != nullptr) throw std::runtime_error(std::string(error));
            return item;
        }

    private:
        std::shared_ptr<void *> m_handle;
};

class Module
{
    public:

        Module(const std::string &filename)
        {
            auto state = new State(filename + ".so");
            try
            {
                this->m_state = std::shared_ptr<State>(state, [] (State *state)
                {
                    delete state;
                });
            }
            catch (...)
            {
                delete state;
                throw;
            }
        }

    private:
        struct State
        {
            Lib lib;

            State(const std::string &filename): lib(Lib(filename))
            {
                auto module = (void (*)(void)) this->lib.get("module");
                if (module == nullptr) std::runtime_error("Error get 'module' routine from \"" + filename + '.');
                module();
            }
        };

        std::shared_ptr<State> m_state;
};

#include <iostream>
#include <vector>
#include "core.h"

int main(void)
{
    {
        std::vector<Module> modules;
        modules.push_back(Module("module"));
        core::doinit();
    }
    std::cout << "Ok\n";
    return EXIT_SUCCESS;
}

core.h

#ifndef __CORE__
#define __CORE__

#include <functional>

namespace core
{
    extern void oninit(const std::function<void(void)> &init);
    extern void doinit(void);
}

#endif // __CORE__

core.cpp

#include "core.h"
#include <vector>

static std::vector<std::function<void(void)>> items;

void core::oninit(const std::function<void(void)> &init)
{
    items.push_back(init);
}

void core::doinit(void)
{
    for (auto &init : items) if (init) init();
}

module.cpp

#include "core.h"
#include <iostream>

extern "C" void module(void)
{
    core::oninit([] () {});
    std::cout << "Module loaded.\n";
}

build.sh

#!/usr/bin/env bash

export LD_LIBRARY_PATH=./:${LD_LIBRARY_PATH}

#std=c++11
#std=c++14
std=c++17

gcc --std=$std core.cpp -shared -fPIC -o libcore.so &&
gcc --std=$std module.cpp -shared -fPIC -o module.so &&
gcc --std=$std start.cpp -l stdc++ -ldl -L. -lcore -o start &&

./start

rm *.so
rm start

 ,

user0xff
()

Gentoo, ppp, Nginx

Форум — Admin

Господа, есть два сегмента сети в одной конторе которые объединены в одну сеть посредством VPN через два канала сразу.

Не спрашивайте почему - это каприз заказчика.

Каналы обозваны ppp0 и ppp1.

В одной из подсетей есть сервер с Gentoo

Ситуация такая. На сервере с Gentoo крутится Nginx, но работает он почему-то только в том случае если оба ppp0 и ppp1 активны (интересует только ppp сейчас).

Если ppp0 не активен то Nginx не работает, даже если с ppp1 всё в порядке.

Конкретно вижу вот это:

$ sudo /etc/init.d/nginx restart
 * WARNING: nginx will start when net.ppp0 has started

Потому что провайдер за ppp0 куда-то отвалился и ppp0 при старте не поднялся, а такое часто бывает.

Провайдер за ppp1 тоже любит часто куда-то исчезать. Каналы не надёжные, но других нет.

Вопрос.

Что нужно сделать что бы Nginx не отваливался от того, что ppp0 или ppp1 не работает или даже если они не активны оба сразу?

Конфиг у Gentoo собственно вот такой:

#
# Ethernet
#

config_eth0="dhcp"

#
# VPN
#

config_ppp0="ppp"
link_ppp0="pty 'pptp ?.?.?.? --nolaunchpppd'"
username_ppp0="username"
password_ppp0="password"
pppd_ppp0=\
"
    require-mschap-v2
    noauth
    noproxyarp
    mtu 1460
    lcp-echo-failure 20
    lcp-max-failure 75
"

config_ppp1="ppp"
link_ppp1="pty 'pptp ?.?.?.? --nolaunchpppd'"
username_ppp1="username"
password_ppp1="password"
pppd_ppp1=\
"
    require-mschap-v2
    noauth
    noproxyarp
    mtu 1460
    lcp-echo-failure 20
    lcp-max-failure 75
"

postup()\
{
    if [[ ${IFACE} == "ppp0" ]]
    then
        ip route add 192.168.0.0/24 dev ppp0
    fi
    if [[ ${IFACE} == "ppp1" ]]
    then
        ip route add 192.168.0.0/24 dev ppp1
    fi
}

postdown()\
{
    if [[ ${IFACE} == "pppO" ]]
    then
        ip route del 192.168.0.0/24 dev ppp0
    fi
    if [[ ${IFACE} == "ppp1" ]]
    then
        ip route del 192.168.0.0/24 dev ppp0
    fi
}

 , ,

user0xff
()

C++ и исключение abi::__forced_unwind

Форум — Development

Вопрос про исключение abi::__forced_unwind.

Почему в Linux оно есть, а в FreeBSD, например, нет?

Вот пример кода. Что бы не получать «FATAL: exception not rethrown» приходится собирать с условной компиляцией.

Как это обойти и из-за чего оно вообще возникает?

#include <iostream>
#include <functional>
#include <vector>

#include <pthread.h>
#include <signal.h>
#include <unistd.h>
#include <string.h>

#ifdef __linux__
#include <cxxabi.h>
#define __catch_all__ catch (abi::__forced_unwind&) { throw; } catch (...)
#else
#define __catch_all__ catch (...)
#endif

bool test_proc(const size_t &nom)
{
    std::cerr << nom;
    sleep(1);
    return true;
}

class threads
{
    public:
        typedef
            struct
            {
                pthread_t pid;
                size_t nom;
            }
            item_type;
        typedef
            std::function<bool(const size_t &nom)>
            proc_type;

    private:
        static std::vector<item_type> items;
        static proc_type proc;

        static void *inner_proc(void *data);
        static void interrupter(int signum);

    public:
        static void start
            (const proc_type &proc, const size_t &count);
        static void stop(void);
};

threads::proc_type threads::proc = threads::proc_type();

std::vector<threads::item_type> threads::items = std::vector<threads::item_type>();

void *threads::inner_proc(void *data)
{
    if (threads::proc)
    {
        auto item = (threads::item_type *) data;
        for (;;)
        try
        {
            threads::proc(item->nom);
        }
        __catch_all__
        {
        }
    }
    return NULL;
}

void threads::interrupter(int signum)
{
    signum = signum;
    threads::stop();
}

void threads::start(const proc_type &proc, const size_t &count)
{
    threads::proc = proc;
    threads::items.resize(count);
    if (!count) return;
    size_t nom = 0;
    for (auto &i : threads::items)
    {
        i.nom = nom;
        pthread_create(&i.pid, NULL, threads::inner_proc, &i);
        nom++;
    }
    static struct sigaction sa;
    memset(&sa, 0, sizeof(struct sigaction));
    sa.sa_handler = threads::interrupter;
    sigaction(SIGINT, &sa, NULL);
    pthread_join(threads::items[0].pid, NULL);
}

void threads::stop(void)
{
    auto nom = threads::items.size();
    while (nom)
    {
        nom--;
        pthread_cancel(threads::items[nom].pid);
    }
    threads::items.resize(0);
}

int main(void)
{
    std::cout << "Start" << std::endl;
    threads::start(test_proc, 3);
    std::cout << "Stop" << std::endl;
    return EXIT_SUCCESS;
}

 ,

user0xff
()

Не запускается Lazarus в Gentoo

Форум — Desktop

Установил Lazarus. Но при попытке его выполнить получаю вот такое:

$ lazarus

(process:8179): GLib-GObject-CRITICAL **: g_object_unref: assertion 'G_IS_OBJECT (object)' failed

(process:8179): GLib-CRITICAL **: g_log_remove_handler: assertion 'handler_id > 0' failed
[FORMS.PP] ExceptionOccurred 
  Sender=EAccessViolation
  Exception=Access violation
  Stack trace:
  $B767ABCF
TApplication.HandleException Access violation
  Stack trace:
  $B767ABCF
[FORMS.PP] ExceptionOccurred

Как побороть?

emerge --info тут.

emerge -pv @installed тут.

/etc/portage/make.conf тут.

 ,

user0xff
()

Qt, перезагружается xorg

Форум — Desktop

x86, gentoo-sources-4.1.12, xorg-server-1.16.4, dev-qt/qt-meta-4.8.6

Установил qt-creator и с его помощью собрал пустую программку. То есть программка вообще ничего не делает - исключительный дефолт (пустая форма).

Если выполнить её - она ничего не делает, как и должно быть. В stdout программы - пусто, в stderr - пусто.

Если выполнить её ещё раз - перезагружаются иксы. В stdout программы - пусто, в stderr -

ICE default IO error handler doing an exit(), pid = 4079, errno = 11

иногда

ICE default IO error handler doing an exit(), pid = 4459, errno = 104

Что может быть? Как побороть?

 , ,

user0xff
()

LaTeX и слайды

Форум — General

Понадобилось сделать презентацию в которой используются курсивные шрифты

Не наклонные, а именно курсивные

Поигравшись с классом beamer я так и не понял как это там сделать...

\textsl и \textit - дают одинаковый результат

Вот код:

\documentclass{beamer}

\usetheme{Madrid}

\usepackage[utf8]{inputenc}
\usepackage[english,russian,ukrainian]{babel}
\usepackage{amssymb}
\usepackage{amsmath}

\title{Презентация}

\begin{document}

    \maketitle

    \begin{frame}[t]
        \frametitle{Заголовок первого слайда}
        \begin{block}{Пункты}
            \begin{itemize}
                \item Первый
                \item Второй
                \item Третий
            \end{itemize}
        \end{block}
    \end{frame}

    \begin{frame}
        \frametitle{Заголовок второго слайда}
        Здесь \textsl{просто}\ \textit{текст}
    \end{frame}

    \begin{frame}
        \frametitle{Заголовок третьего слайда}
        \[
            \sqrt{\pi}=\int\limits^\infty_{-\infty}e^{-x^2}dx
        \]
        \[
            e=\sum\limits^\infty_{k=0}\frac{1}{k!}
        \]
    \end{frame}

\end{document}

В общем не долго думая написал свой

Не знаю как сделать полукруглые рамки для блоков, ну и тени. Что б уж совсем красиво было)

Оверлеи и подобные «украшательства» не нужны

В общем принцип KISS)

Покритикуйте что-ли

example.tex

\documentclass{myslides}

\title{Презентация}

\begin{document}

    \maketitle

    \begin{slide}{Заголовок первого слайда}
        \begin{block}{Пункты}
            \begin{itemize}
                \item Первый
                \item Второй
                \item Третий
            \end{itemize}
        \end{block}
    \end{slide}

    \begin{slide}{Заголовок второго слайда}
        Здесь \textsl{просто}\ \textit{текст}
    \end{slide}

    \begin{slide}{Заголовок третьего слайда}
        \[
            \sqrt{\pi}=\int\limits^\infty_{-\infty}e^{-x^2}dx
        \]
        \[
            e=\sum\limits^\infty_{k=0}\frac{1}{k!}
        \]
    \end{slide}

\end{document}

myslides.cls

%% =============================================================================
%%
%% Клас документа розроблений для створення презентацій
%%
%% =============================================================================

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{mylides}

% Побудувати новий клас на основі extarticle
\LoadClass[14pt]{extarticle}

% Дозволити використовувати кодування UTF-8
\RequirePackage[utf8]{inputenc}

% Дозволити підтримку англійської, російської та української мов
\RequirePackage[english,russian,ukrainian]{babel}

% Дозволити різнобічну роботу з математичними формулами
\RequirePackage{amssymb}
\RequirePackage{amsmath}

% Дозволити роботу з графічними зображеннями
\RequirePackage{graphics}

% Дозволити роботу з обчисленнями
\RequirePackage{calc}

% Дозволити використовувати різноманітні набори символів
\RequirePackage{textcomp}

% Дозволити використовувати кольори
\RequirePackage[usenames,dvipsnames,svgnames,table,x11names]{xcolor}

% Дозволити роботу з таблицями
\RequirePackage{tabularx}

% Дозволити використовувати кольори у таблицях
%\RequirePackage{colortbl}

% Дозволити роботу з форматуванням абзаців
\RequirePackage{setspace}

% Дозволити роботу з нумерацією сторінок
\RequirePackage{lastpage}

% Дозволити роботу з форматуванням сторінки
\RequirePackage{geometry}

% Дозволити роботу з колонтитулами
\RequirePackage{fancyhdr}

% Дозволити роботу з титульним аркушем
\RequirePackage{titling}

% Дозволити роботу з перерахуваннями
\RequirePackage{enumitem}

% Дозволити роботу з неформатованим текстом
\RequirePackage{verbatim}

% Дозволити роботу з URL
\RequirePackage[pdfborder={0 0 0}]{hyperref}

%% -----------------------------------------------------------------------------
%%
%% Налаштування класу
%%
%% -----------------------------------------------------------------------------

% Налаштування розміру сторінки та відступів від її країв
\geometry{top=53pt}
\geometry{headheight=35pt}
\geometry{headsep=18pt}
\geometry{footskip=-6pt}
\geometry{bottom=20pt}
\geometry{left=0pt}
\geometry{right=0pt}
\geometry{papersize={440pt,330pt}}

% Заборонити робити відступ в абзацах
\parindent=0pt
\parskip=9pt

% Визначити відступи ліворуч та праворуч абзаців
\leftskip=15.5pt
\rightskip=15.5pt

% Заборонити виконувати переноси у словах
\hyphenpenalty=10000
\sloppy
%\pretolerance=10000
%\tolerance=9999

% Підготувати колонтитули
\pagestyle{fancy}
\renewcommand\headrulewidth{0pt}
\renewcommand\footrulewidth{0pt}

% Налаштувати перерахування
\setitemize{topsep=4pt,parsep=4pt,partopsep=0pt,itemsep=0pt}

%% -----------------------------------------------------------------------------
%%
%% Визначення кольорової розмітки
%%
%% -----------------------------------------------------------------------------

\newcommand\slidehfBgColor{DarkBlue}
\newcommand\slidehfColor{White}
\newcommand\slideblockhBgColor{DarkBlue}
\newcommand\slideblockhColor{White}
\newcommand\slideblockbBgColor{LightGray}
\newcommand\slideblockbColor{Black}
\newcommand\slidenoteBgColor{DarkBlue}
\newcommand\slidenoteColor{White}

%% --------------------------------------------------------------------------------------------------
%%
%% Визначення макросів
%%
%% --------------------------------------------------------------------------------------------------

%% Оточення "слайд без колонтитулів"
\newenvironment{emptyslide}{%
    % Розпочати нову сторінку
    \newpage%
    % Очистити всі колонтитули
    \fancyhf{}%
    % Номер сторінки не формувати
    \addtocounter{page}{-1}%
}{\par}

%% Оточення "слайд"
%%
%% Приймає один обов'язковий параметр - назву слайда
%%
\newenvironment{slide}[1]{%
    % Розпочати нову сторінку
    \newpage%
    % Очистити всі колонтитули
    \fancyhf{}%
    % Сформувати верхній колонтитул
    \lhead{%
        \colorbox{\slidehfBgColor}{%
            \parbox[c][32.5pt][c]{\paperwidth}{%
                \textcolor{\slidehfColor}{%
                    \large%
                    \textsl{\textbf{\hspace{15.5pt}#1}}%
                }%
            }%
        }%
    }%
    % Сформувати нижній колонтитул
    \lfoot{%
        \colorbox{\slidehfBgColor}{%
            \parbox[c][12pt][t]{\paperwidth}{~}%
        }%
    }%
    \rfoot{%
        \footnotesize%
        \textcolor{\slidehfColor}{%
            \raisebox{2pt}{%
                \textnormal{\textbf{\thepage/\pageref{LastPage}~}}%
            }%
        }%
    }%
}{\par}

%% Оточення "інформаційний блок"
%%
%% Приймає один необов'язковий параметр - ширина блока
%% Приймає один обов'язковий параметр - назву блока
%%
\newenvironment{block}[2][0.91\paperwidth]{%
    % Завжди починати з нового рядка
    \par%
    % У центрі
    \centering%
    % У вигляді таблиці
    \begin{tabular}{m{#1}}%
        \rowcolor{\slideblockhBgColor}\color{\slideblockhColor}#2 \\
        \rowcolor{\slideblockbBgColor}\color{\slideblockbColor}%
        \small\begin{minipage}{#1}\vspace{4pt}%
}{%
        \vspace{4pt}\end{minipage}%
    \end{tabular}%
    \par%
}

%% Макрос "блок примітки"
%%
%% Приймає один необов'язковий параметр - ширина блока примітки
%% Приймає один обов'язковий параметр - текст примітки
%%
\newenvironment{note}[1][0.91\paperwidth]{%
    % Завжди починати з нового рядка
    \par%
    % У центрі
    \centering%
    % У вигляді таблиці
    \begin{tabular}{m{#1}}%
        \rowcolor{\slidenoteBgColor}\color{\slidenoteColor}\begin{minipage}{#1}%
}{%
        \end{minipage}%
    \end{tabular}%
    \par%
}

%% Формування титульної сторінки
\renewcommand\maketitle{%
    % Оформити титульну сторінку як порожню
    \begin{emptyslide}%
        % Відступ згори
        \vspace*{\stretch{1}}%
        % Назва презентації
        \begin{note}%
            \centering%
            \LARGE%
            \vspace{20pt}\thetitle\vspace{20pt}%
        \end{note}%
        % Відступ знизу
        \vspace*{\stretch{1}}%
        \vspace{60pt}%
    \end{emptyslide}%
}

 , слайды

user0xff
()

Права доступа на файлы которые создаются и редактируются в wine

Форум — Desktop

При создании (редактировании) файлов в Word права на файлы почему-то выставляются в -rwxrwxr-x, а мне нужно -rw-r--r--.
Как это настроить в wine?

$ uname -a
Linux myhost 3.11.2-1-ARCH #1 SMP PREEMPT Fri Sep 27 07:35:36 CEST 2013 x86_64 GNU/Linux

$ wine --version
wine-1.7.3

 wine msoffice файлы права

user0xff
()

systemd 207 и php-fpm

Форум — General

systemd 207 стал подвисать при выключении компьютера во время завершения php-fpm.
Выключение компьютера длится минут пять и больше, а не около 20 секунд как раньше.

Как побороть зависания вроде бы нашел - для этого подправил в файле /usr/lib/systemd/system/php-fpm.service параметр Type.

Примерно вот так:

[Service]
Type=notify

на

[Service]
Type=simple

И всё вроде бы стало нормально, но вчера обновился php-fpm с 5.5.3 до 5.5.4 и Type=notify снова на месте. Что видимо правильно.

Каждый раз править Type не выход.
Значит я что-то делаю не так?
Ну и в чем тогда может быть причина подвисания при выключении?

$ uname -a
Linux myhost 3.11.1-1-ARCH #1 SMP PREEMPT Sat Sep 14 19:30:21 CEST 2013 x86_64 GNU/Linux

 ,

user0xff
()

Bluetooch-гарнитура из компьютера

Форум — Desktop

Как сделать из компьютера bluetooch-гарнитуру?

Дистрибутив Arch x86_64.

Пробовал устанавливать aur/hfpforlinux, но не устанавливается он, как и половина всего, что есть в aur.

user0xff
()

Смена раскладок клавитатуры по Ctrl+Shift

Форум — Desktop

Господа!

Есть три раскладки - us,ru,ua

Переключение раскладок настраивается так:
setxkbmap -layout us,ru,ua -variant -option grp:ctrl_shift_toggle

xorg.conf - дефолтный (а точнее вовсе без него)

По нажатии RCtrl+RShift или LCtrl+LShift раскладки меняются как us->ru->ua->...

Как сделать что бы при нажатии LCtrl+LShift раскладки менялись как us->ua->ru->...?
То есть в обратном порядке по отношению к RCtrl+RShift.
Это возможно?

user0xff
()

Linux, Android, WiFi

Форум — Admin

Господа!

Есть модем ADSL (Ethernet, без WiFi).
Есть ноутбук с интернетом через Ethernet, с WiFi который как бы не задействован пока.
Есть смартфон с WiFi.

Как настроить точку WiFi на ноутбуке что бы со смартфона в интернет можно было по WiFi ходить? Реально? С чего начать?

Вариант с покупкой отдельной точки WiFi хороший, но хотелось бы подружить ноутбук со смартфоном так как есть.

 , ,

user0xff
()

Почему Firebird при обращении к UDF закрывает соединение?!

Форум — Development

Господа! Помогите разобраться.

Есть функция:

[user@myhost udf]$ cat str_simple.c
#include <string.h>
#include "/opt/firebird/include/ib_util.h"

char *str_simple(char *str) {

    char *result = ib_util_malloc(strlen(str) + 1);
    memcpy(result, str, strlen(str) + 1);
    return result;
}
[user@myhost udf]$
Для сборки:
[user@myhost udf]$ cat makeudf 
#!/bin/bash

gcc -c -O -fpic $1.c &&
ld -G $1.o -lm -lc -o $1.so &&
rm $1.o &&
mv $1.so /opt/firebird/UDF
[user@myhost udf]$ ./makeudf  str_simple
[user@myhost udf]$
В базе функция объявлена так:
DECLARE EXTERNAL FUNCTION str_simple
CSTRING(256)
RETURNS CSTRING(256) FREE_IT
ENTRY_POINT 'str_simple' MODULE_NAME 'str_simple';
Дальше:
[user@myhost database]$ /opt/firebird/bin/isql base.gdb -USER sysdba -PASS masterkey
Database:  base.gdb, User: sysdba
SQL> SELECT STR_SIMPLE('Текст') FROM RDB$FIELDS;

STR_SIMPLE

=============================================================================== 
Statement failed, SQLSTATE = 08006
Error reading data from the connection.
С чего вдруг закрывается соединение?

Всё это в Linux 3.1.9-2-ARCH ... x86_64 и Firebird-SuperServer 2.5.1.26351_0-4

user0xff
()

LibreOffice и проверка правописания

Форум — Desktop

Подскажите как настроить проверку правописания в LibreOffice.

Есть документы на разных языках.

В основном на русском, украинском и английском.

Почему-то проверка правописания работает только для того языка для которого выбрана локаль, остальные языки даже указать нельзя.

То есть при LOCALE=«ru_RU.UTF-8» проверка орфографии работает только для русского языка и он доступен, но не работает для украинского и английского языков и они не доступны.

При LOCALE=«uk_UA.UTF-8» проверка орфографии работает только для украинского языка и он доступен, но не работает для русского и английского языков и они не доступны.

Ставить словари скачивая их отдельно не хочу — ведь они все и так есть, иначе не работали бы при смене локали.

Как настроить проверку правописания что бы она работала для всех языков не взирая на локаль???

Все это в Linux 3.1.7-1-ARCH … x86_64 & LibreOffice — 3.4.4.

user0xff
()

RSS подписка на новые темы