LINUX.ORG.RU

Сообщения elonmusk

 

Продам сервер

Форум — Talks

Приветствую.

Технические характеристики:

  • 16 GB RAM (можно добавить, есть много слотов)
  • 1 TB Disk
  • Intel(R) Xeon(R) CPU E5-2407 0 @ 2.20GHz
  • Спеки: specs

Сервер полностью в рабочем состоянии, использовался 3 года, за это время поломок не было.

Фото:

  • Внешний вид: 1, 2, 3
  • Некоторые показатели здоровья: 4

Стоимость: 75 000 ₽, возможен разумный торг, доставка в ваш город за ваш счёт.

Можете спрашивать о вещи, на вопросы отвечу. Связаться лично можно в тг: tg

 ,

elonmusk
()

Помогите найти ошибку в настройке сети

Форум — Admin

Как у меня настроена сеть:

  • К роутеру подключаюсь через wifi. Это ОС-хост.
  • В virtualbox стоит ОС-гость, в ней сеть настроена как мост до интерфейса в ОС-хосте.

Проблема в ОС-госте. Первый запрос на любой адрес из интернета, например на google.com, выполняется очень долго (засекал: 1 минуту 3 секунды), а потом уже быстро (менее секунды). Спустя некоторое время опять долго (6 секунд, 58 секунд).

Сеть настроена с помощью systemd-networkd и systemd-resolved. Единственный конфиг, который я написал:

# /etc/systemd/network/network.network
[Match]
Name=enp0s3

[Network]
Address=10.0.0.20/24
Gateway=10.0.0.1
DNS=8.8.8.8
DNS=8.8.4.4

В логах systemd-networkd ничего интересного, а в systemd-resolved кое-что есть:

Это всё что было в логах до очередного долгого запроса:

Jul 5 14:01:59: Using degraded feature set (UDP+EDNS0+DO) for DNS server 8.8.8.8.
Jul 5 14:02:04: Using degraded feature set (UDP+EDNS0+DO) for DNS server 8.8.4.4.
Jul 5 14:02:30: Using degraded feature set (TLS+EDNS0) for DNS server 8.8.8.8.
Jul 5 14:02:30: Server 8.8.8.8 does not support DNSSEC, downgrading to non-DNSSEC mode.
Jul 5 14:14:03: Grace period over, resuming full feature set (UDP+EDNS0+DO+LARGE) for DNS server 8.8.8.8.
Jul 5 14:14:08: Using degraded feature set (TLS+EDNS0) for DNS server 8.8.4.4.
Jul 5 14:14:08: Server 8.8.4.4 does not support DNSSEC, downgrading to non-DNSSEC mode.

Потом я выполняю запрос на google.com, жду 58 секунд, смотрю в логи и вижу новые записи:

Jul 5 14:22:10: Grace period over, resuming full feature set (UDP+EDNS0+DO+LARGE) for DNS server 8.8.4.4.
Jul 5 14:22:36: Using degraded feature set (UDP+EDNS0+DO) for DNS server 8.8.8.8.
Jul 5 14:22:42: Using degraded feature set (UDP+EDNS0+DO) for DNS server 8.8.4.4.
Jul 5 14:23:08: Using degraded feature set (TLS+EDNS0) for DNS server 8.8.8.8.

Если посчитать время между первой и последней записью, то получится ровно 58 секунд.

Значит, у меня есть ошибки в настройке DNS или резолвера. Помогите решить проблему.

 ,

elonmusk
()

Какое DE вы используете как основное или единственное?

Голосования — Голосования

Прошло традиционно 3 года с последнего опроса про DE. За это время многое успело измениться: Wayland, Flatpak становятся популярнее, в Ubuntu теперь GNOME вместо Unity, KDE 4 уже 5 лет как не поддерживается, в XFCE теперь GTK3. Интересно посмотреть как изменилось мнение аудитории ЛОРа.

Мультивыбор отсутствует преднамеренно. Нужно выбрать то DE, которое вы используете как основное или единственное.

В опросе перечислены только популярные DE и те, которые были популярными в предыдущем опросе. Если вашего DE нет в списке, выберите «другое DE».

Если вы пользуютесь оконным менеджером или живёте без X или Wayland, выберите «не использую DE».

Если вы используете мак или винду, выберите «не использую *nix как основную ОС». Тогда результаты опроса будут точнее.

  1. KDE 5 Plasma 317 (29%)

    ********************************************************************************************************************************************************************************************************************************************************************************************************************************

  2. GNOME 181 (16%)

    **************************************************************************************************************************************************************************************

  3. XFCE 174 (16%)

    *******************************************************************************************************************************************************************************

  4. Не использую DE 149 (13%)

    ******************************************************************************************************************************************************

  5. MATE 68 (6%)

    ********************************************************************

  6. Cinnamon 60 (5%)

    ************************************************************

  7. Другое DE 50 (5%)

    **************************************************

  8. Не использую *nix как основную ОС 47 (4%)

    ***********************************************

  9. Unity 30 (3%)

    ******************************

  10. LXDE 19 (2%)

    *******************

  11. KDE 4 13 (1%)

    *************

  12. Deepin 1 (0%)

    *

Всего голосов: 1109

 , , , ,

elonmusk
()

Почему в XFCE и i3 эти глюки есть, а в GNOME нет?

Форум — Desktop

На экране при скроллинге браузера появляются следующие глюки: видео на google drive (если на видео шакалы, его можно скачать, тогда будет видно чётко) и скриншот

Похоже на какие-то задержки в отрисовке.

Самый интересный вопрос — почему это есть только в XFCE и i3, а в GNOME всё нормально? В GNOME также используются иксы, не вейланд.

Ядро, иксы, весь софт — всё из арча.

Видеокарта — какая-то AMD или ATI. Дрова никакие не ставил, ничего не настраивал.

Это чисто спортивный интерес. [s]Интересует то, что, похоже, GNOME — топ, а XFCE и i3 (только их тестил) — УГ.[/s]

Ответы: 1 2

 , , , ,

elonmusk
()

Возврат ошибки с контекстом в C

Форум — Development

Язык C не имеет встроенного механизма работы с ошибками. Но работать с ошибками как-то нужно, значит это придётся делать вручную.

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

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

Есть, например, функция, которая работает с файлами. Попробуем в случае ошибки завершить работу программы:

void
kill_running_instance
        (char *pid_file)
{
        FILE *f = fopen(pid_file, "r");
        if (f == NULL) {
                fprintf(stderr, "can not open file for reading: %s: %s\n", pid_file, strerror(errno));
                exit(1);
        }
        ....
}

Проблема в том, что так мы не сможем вызвать код очистки. Попробуем исправить функцию:

void
kill_running_instance
        (bool *ok, char *pid_file)
{
        // reset error
        *ok = true;

        FILE *f = fopen(pid_file, "r");

        // indicate error
        if (f == NULL) {
                *ok = false;
                return;
        }

        ....
}

Так мы сможем извне узнать — функция нормально выполнила свою работу или что-то пошло неправильно.

Здесь появляется главная проблема. Как узнать что конкретно пошло неправильно? Хотя бы для того чтобы записать ошибку в лог и в консоль:

bool *ok;
if (kill_running_instance(&ok, pid_file), !ok) {
        // how can we find out what went wrong?
}

Это произошла ошибка открытия файла или ошибка чтения? Узнать это невозможно.

Небольшая заметка: посмотреть в errno не получится. Эта переменная используется для уточнения ошибки, а не полного описания ошибки. Например, strerror(errno) скажет Permission denied, а как извне узнать к чему это ошибка относится — всё ещё неизвестно.

Чтобы решить эту проблему, я придумал возвращать не bool *ok, а сообщение об ошибке и тип ошибки. Выглядит вот так:

void
kill_running_instance
        (struct error *e, char *pid_file)
{
        FILE *f = fopen(pid_file, "r");
        if (f == NULL) {
                ERROR_SET(e, SYSTEM, "can not open file for reading: %s: %s", pid_file, strerror(errno));
                return;
        }
        ....
}

....

struct error e;
INIT_ERROR(&e);
if (kill_running_instance(&e, pid_file), e.type != UNSET) {
        print_error(&e);
        deinit_error(&e);
        goto cleanup;
}

Контекст ошибки нам известен извне. Мы можем вывести её в консоль, в лог, отправить по почте, etc. Конечная цель выполнена!

Кстати, благодаря макросам известны имя файла и номер линии где был вызван ERROR_SET.

error определён так:

enum error_type {
        UNSET,

        /*
                Standard library function fails
        */
        SYSTEM,
};

struct error {
        enum error_type type;
        char *msg;
        char *filename;
        size_t line;
        bool is_set;
};

INIT_ERROR присваивает структуре дефолтные значения.

ERROR_SET раскрывает функцию, которая присваивает ошибке тип, сообщение, имя файла и номер линии где возникла ошибка. Стринги копируются, всё норм.

Теперь, собственно, вопросы.

  1. Много ли Open Source проектов, где работа с ошибками организована похожим образом? Буду благодарен, если покажете.

  2. Если в Open Source проектах с ошибками работают по-другому, значит, логично, они считают свой способ лучше моего. Можете показать как по-другому работают с ошибками и объяснить почему эти способы лучше моего?

  3. Буду благодарен, если подскажите какие есть риски и недостатки в моём методе работы с ошибками.

Заранее спасибо.

 

elonmusk
()

Какой программы под Linux вам не хватает?

Форум — Talks

Хочется найти полезные идеи для создания ПО.

Какого ПО на Linux нет и, по вашему мнению, появление такого ПО будет полезно многим людям?

Если кто-то знает свежие проекты, которые создают нечто подобное, буду благодарен, если дадите наводку.

Также буду благодарен, если скажете «хочу в $ПО_нейм иметь фичу $Х».

С другой стороны, ответы «хочу порт Photoshop» не считаются интересными. Графические редакторы уже имеются под Linux, проблема в изучении нового инструмента и числе отсутствующих фич.

 , ,

elonmusk
()

Рендеринг шрифтов в линуксе как в Windows 10

Галерея — Скриншоты

Делюсь конфигом, который делает шрифты очаровательно читаемыми. На скриншоте текстовый редактор VS Code.

Больше скриншотов: Lor / Firefox, Lor / Chromium, GitHub, Telegram, System

Сравнение: до и после, до и после

Конфиг здесь: GitHub Gist

Автор конфига и скриншотов не я.

Критика и контрибьюции приветствуются.

Дисклаймер, мнение автора отличается от Вашего. Спорить кому нравится или нет можете дома, здесь, будьте добры обсуждайте техническую сторону решения: техники сглаживания, пресеты рендеринга в разных системах, технические возможности freetype etc

Основной посыл поста: получилось ли у автора сделать рендеринг как в Windows 10 на линуксе или нет? Если нет, то как улучшить конфиги?

 , , , ,

elonmusk
()

Подскажите как писать код на C

Форум — Development

У меня есть несколько проблем, из-за которых я не знаю как можно создать свой проект.

  • Как мне использовать key-value структуру данных? В других языках используется библиотека (Java) или встроенная реализация (Go). А что используют в проектах, написанных на C?
  • Как в проектах на C узнают длину массива, переданного как аргумент? Я знаю, что массивы передаются как указатели, а указать длину данных за указателем - невозможно. Нужно всегда передавать длину как аргумент? Я также понимаю, что можно создавать свои структуры, состоящие из указателя и длины, но как это грамотно сделать, чтобы потом не запутаться в типах и бойлерплейте? Возможно, есть нормальная практика, которой все следуют?
  • Единственный способ иметь в структуре несколько массивов - использовать указатели. Значит, память нужно выделять и очищать вручную. Значит, для работы с такими структурами нужно иметь функции-обёртки. Так все делают для создания нескольких массивов в структуре?

 , ,

elonmusk
()

Объясните как работать с Docker

Форум — Development

Я прочитал статьи про то зачем нужен докер, как на нём разворачивать простейшие приложения, но всё ещё не понимаю как я могу его использовать в своём проекте.

Мой стэк — Node.js/Express/TypeScript, MongoDB, RabbitMQ, nginx. Я бы вручную установил ОС, весь стэк, конфигурацию, и общую папку (чтобы не копировать файлы). При необходимости эмулировать продакшн — создал бы ещё один контейнер. Если бы у меня была macOS, то я бы использовал VirtualBox.

Но я до сих пор не понял что мне делать в Docker. Конкретно:

  • Ой. Мой список вопросов закончился :)

Отвеченные вопросы:

  • Мой главный вопрос — что мне вообще делать с вашим докером? Работать как с виртуалкой?
    • Ответ: 1
  • Мне нужно все этапы установки, которые я выполнял при ручном создании контейнера, перенести в Dockerfile/docker-compose?
  • Зачем нужен DockerHub, если можно выбрать ОС и самому установить нужный софт?
    • Ответ: нужно понимать в чём смысл докера, тогда эти вопросы отпадают. Во многих гайдах упускают тот момент, что вы не должны создать единый образ, который содержит всё, а должны все процессы поместить в отдельные контейнеры. Например, приложение на Node.js и сервер MongoDB должны быть в разных контейнерах. В Docker это называется сервисами
  • Я в некоторых Dockerfile видел apt-install — разве это уже не означает, что образ не иммутабелен? Ведь изменится версия библиотеки в репах — изменится и в твоём образе, разве нет?
    • Ответ: 1
  • Я вижу как в очередном Dockerfile пишут FROM php:alpine-666 и чуть ниже RUN apt-install .... Это значит, что используемый образ из DockerHub — Ubuntu-based?
    • Ответ: образы в DockerHub действительно базируются на какой-то ОС. Причём не всегда очевидно на какой.

Спасибо!

 ,

elonmusk
()

Как правильно сделать роутинг без фреймворков в TS?

Форум — Web-development

Я дошёл до этапа, когда у меня есть название контроллера и метода в переменной. Мне нужно используя эти переменные вызвать нужный метод

Контроллеры и методы представлены в следующем виде:

// базровый класс для всех контроллеров
class Controller {}

class Global extends Controller {

    // метод
    doStart(): object {
        return {
            status: 'ok',
            message: 'я работаю, всё ок',
        };
    }
}

Теперь нужно имея переменные controller: string и method: string вызвать нужный мне метод. Я затрудняюсь как. Кто знает — подскажите, пожалуйста :)

[hr]

Я пробовал сохранять методы в key-value массиве, чтобы метод можно было получить по строке. Вот так:

class Global extends Controller {
    _allow_method_list = {
        doStart: this.doStart,
    };
}

Этот это не подходит, потому что в этих методах почему-то нельзя использовать this, а это существенно и вообще знак что я что-то делаю не так.

 , ,

elonmusk
()

Вещественные числа в Go

Форум — Development

Вопрос относится к коду. Я написал функцию на Go и на C для вычисления расстояния в метрах между двумя точками. Но на разных языках функция выдаёт разный результат.

Вот код функции на Go:

const earthRadiusM = 6371000

func calculate_distance(lon1, lat1, lon2, lat2 float64) float64 {
	lon_delta := lon2 - lon1

	// convert degrees to radians
	lat1_radians      := lat1 * math.Pi / 180.0
	lat2_radians      := lat2 * math.Pi / 180.0
	lon_delta_radians := lon_delta * math.Pi / 180.0

	return earthRadiusM * math.Acos(math.Sin(lat1_radians) * math.Sin(lat2_radians) + math.Cos(lat1_radians) * math.Cos(lat2_radians) * math.Cos(lon_delta_radians))
}

И на C:

const int EARTH_RADIUS_M = 6371000;

double
calculate_distance
(double lon1, double lat1, double lon2, double lat2)
{
	double lon_delta = lon2 - lon1;

	// convert to radians
	double lat1_radians      = lat1 * M_PI / 180.0;
	double lat2_radians      = lat2 * M_PI / 180.0;
	double lon_delta_radians = lon_delta * M_PI / 180.0;

	return EARTH_RADIUS_M * acos(
		sin(lat1_radians) * sin(lat2_radians) +
		cos(lat1_radians) * cos(lat2_radians) * cos(lon_delta_radians)
	);
}

Вот результат, который они выдают для точек 55.099879, 51.76003 и 55.100524, 51.764685:

$ go run calculate_distance.go 
519.5123039447425
519.5123039447425
$ gcc -lm calculate_distance.c
$ ./a.out 
519.512286164
519.512286164

Почему результат настолько разный? Запускал на x86_64 64-bit. Я проверил на других языках — результат такой же как в C, отличия начинаются после 8 цифры после запятой:

$ php calculate_distance.php 
519.51228616389
519.51228616389
$ node calculate_distance.js 
519.5122861638861
519.5122861638861

Ответ: 1

Полный исходный код: go, c, php, js

 ,

elonmusk
()

bash: отловить ошибку в subshell

Форум — Development

Приветствую

Я хочу отлавливать ошибки через trap. Использую следующий код:

( читать дальше... )

 

elonmusk
()

У меня в GNOME не работают настойки языка

Форум — Linux-install

Приветствую

Имеется система с установленной английской локалью, но для отдельного пользователя хочу включить русский язык.

Проблема в том, что я указал в настройках гнома русский язык, но всё равно остался английский.

Только в календаре на верхней панельке дни недели и месяцы стали отображаться на русском.

Если открыть терминал, то LANG и LC_* заданы значения ru_RU.UTF-8. Но если из под этого же терминала запустить nautilus, то всё будет отображаться на английском.

Я уверен что чего-то не знаю, т.к. даже хромиум не локализирован.

Кто подскажет как можно поставить русский язык отдельному пользователю - буду благодарен :)

Конфиги:

# /etc/locale.gen
en_US.UTF-8 UTF-8
ru_RU.UTF-8 UTF-8
# /etc/locale.conf
LANG=en_US.UTF-8

locale-gen сделан.

 , ,

elonmusk
()

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