LINUX.ORG.RU

Избранные сообщения slowpony

Готовое решение для бекапа файлов с разными условиями

Форум — General

Немного надоело возиться со скриптами. Хочу попробовать что-то готовое. Только вот пока из того, что на слуху, ничего удобного/полностью удовлетворяющего не нашел. Насоветуйте.

  • Разные директории-источники в разные целевые директории, в т.ч. одна директория-источник в несколько целевых директорий (на разные диски).

  • По сети и локально (ssh).

  • Исключения по маске и полному пути.

  • Дифференциальные и инкрементные бекапы, в т.ч. для разных директорий-источников.

  • Расписание вплоть до минут и очередности.

  • Автоудаление при достижении условий вроде % заполненности диска или превышение числа нужных копий.

  • Возможность задавать схему сохранения бекапов вроде 1 ежедневный, 1 еженедельный, 2 месячных, 2 годовых.

  • Проверка бекапов.

  • Возможность поиска по файлам и копирования нужного файла без деплоя всего бекапа.

  • Без легаси вроде второго питона.

  • Желательно с GUI.

Слишком волшебно или все же что-то есть?

 

Nedderokumo
()

bash - конструкция вида ${x%-y}

Форум — General

Всем доброго дня, изучаю чужой скрипт на баше (заодно и сам баш таким путем) в скрипте есть строки такого вида:

tail -n 1 -f /var/log/syslog | while read string

do

echo $string | grep «FWALL.*REJECT» > /dev/null || continue

export $string 2>/dev/null

CHAIN=${CHAIN%-REJECT}

Вот подскажите мне пожалуй - в упор не пойму последнюю строчку

CHAIN=${CHAIN%-REJECT}

запускал скрипт прописав в начале set -x и set -v CHAIN=${CHAIN%-REJECT} - выцепляет ту последовательность символов что идет перед словом REJECT в строчке которая сверху грепается но что значит эта конструкция ${CHAIN%-REJECT}? что значат символы %- ? И откуда баш узнает что операция ${CHAIN%-REJECT} проводится над переменной $string?

 

barmaley99
()

Быстрые деревья

Форум — Development

Имеется структура данных: дерево из 100 тысяч узлов. Самая длинная ветвь — 50 тысяч. Число дочерних узлов не ограничено. Требуется быстро найти наинизшую общую вершину для примерно миллиарда пар узлов.

Для менее асимметричного дерева из 10 тысяч узлов и 20 миллионов пар я тупо построил список списков предков и сравнил для каждой пары. Но для большого дерева не хватит памяти.

Вопрос: есть ли готовая библиотека, способная быстро искать общую вершину?

 ,

question4
()

хочу сидя в наушниках слышать все, что происходит вокруг

Форум — Talks

на ноутбуке дистр Manjaro Gnome

Перемещено @Shaman007 из desktop

и чего оно перемещено в Talks, если оно про десктоп?

решение:

Установка Pulseaudio

sudo apt-get install pulseaudio

pulseaudio --start -D

Включить прослушивание микрофона

pactl load-module module-loopback latency_msec=1

Выключить прослушивание микрофона

pactl unload-module module-loopback

 , ,

votafak
()

Вопрос по RAID 1 (зеркалирование)

Форум — General

Всем привет!

Настроил RAID-массив (зеркало), изначально планируя перемещать этот RAID между своим PC и ноутбуком (на время поездок).

Разбивка такая:

/dev/sda1 // монтирование: /boot
/dev/sda2 // монтирование: /boot/efi
/dev/sda3 // монтирование: / (RAID 1)
 
/dev/sdb1 // клон через dd: /boot
/dev/sdb2 // клон через dd: /boot/efi
/dev/sdb3 // монтирование: / (RAID 1)

/dev/sda3 & /dev/sdb3 - RAID. Внутри LVM с LUKS-шифрованием и одним разделом подо всё.
Bitmap - internal.
  1. Систему поставил на RAID находясь на ноутбуке. Переставил оба диска в PC - грузится с любого, второй в RAID не включает на автомате. UUID у партиций одинаковые и в mdadm.conf указал диск по UUID. lsblk / fdisk -l видят все диски, но примонтирован в raid только /dev/sda3. cat /proc/mdstat говорит, что второй диск missing. Почему не срабатывает?

  2. Поставил оба диска обратно в ноутбук - загрузился нормально и оба диска включились в RAID автоматом. НО - Linux «не заметил», что диски больше не синхронны (я ведь писал на деградировавший массив). И он не знает, какой из них более актуальный, но молча запустился и начал работу. Почему он по Bitmap не видит, что есть несинхронность и не предлагает выбрать более актуальный диск для синхронизации? Как это настроить?

  3. Иметь два клона /boot это конечно здорово, но нельзя ли его тоже объединить в RAID, желательно с шифрованием? При каждом обновлении ядра или update-initramfs в моем случае придется заново использовать dd.

 , , ,

DOKA
()

помогите с gnu parallel и bash

Форум — Admin

у меня есть

#!/bin/bash

for FILE in $(find . -maxdepth 1 -type f); do

 очень
 много
 разных
 команд
 делающих $VAR1 $VARtw $VARetc

 build1 $VAR1
 buildtw $VARtw
 buildetc $VARetc

done

самые долгие и однопоточные это build*
как мне его распаралелить оставив совместимость с системой без установленного gnu parallel?

 ,

doc0
()

Защита локальной сети

Форум — Admin

Всем салют! Недавно электрики в офисе исполнили и подкинули следующую задачку: Перенесли стойку с неуправляемыми коммутаторами и после переноса воткнули все провода, которые были около неё. Провода, которые раньше не были подключены идут в офисы, которые больше не принадлежат конторе, там сидят арендаторы. Таким образом, у арендатора появляется возможность попасть в сеть нашей конторы. Для защиты доступа в интернет левых, настроен прокси с авторизацией в домене, но не это не исключает того, что при подключении к сети чужого компа не будут видны другие устройства в сети.

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

В связи с этим вопрос, как обезопасить себя от подключений чужих устройств? Можно ли как-то организовать белый список мак адресов?

 ,

mafaka
()

Оцените безопасность iptables конфига

Форум — Admin

Прошу помощи, чтобы оценить безопасность и правильность настройки моего iptables. Нужно настроить по принципу: «Запрещено все, кроме необходимого минимума». Есть ли косяки?

Полное содержание файла /etc/sysconfig/iptables:

*filter

:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [5881:2975599]

# Открываем нестандартный порт для SSH:
-A INPUT -p tcp --dport 25243 -j ACCEPT

# Разрешаем localhost и локалку:
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT

# Блокируем некоторые виды атак:
-A INPUT -p tcp ! --syn -m state --state NEW -j DROP
-A INPUT -p tcp --tcp-flags ALL NONE -j DROP
-A INPUT -p tcp --tcp-flags ALL ALL -j DROP

# Разрешаем установленные входящие соединения:
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Открываем порты для вебсервера:
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT

# Разрешаем NTP соединения:
-A INPUT -p udp --dport 123 -j ACCEPT

# Разрешаем DNS запросы:
-A INPUT -p udp --dport 53 -j ACCEPT
-A INPUT -p tcp --dport 53 -j ACCEPT

# Разрешаем пинги:
-A INPUT -p icmp --icmp-type echo-request -j ACCEPT

# Разрешаем соединения OpenVPN
-A INPUT -p tcp -m tcp --dport 1194 -j ACCEPT

# Разрешаем использовать прокси Squid только с определенных адресов
-A INPUT -s 10.0.144.6/32 -p tcp -m tcp --dport 3128 -j ACCEPT
-A INPUT -s 10.0.144.8/32 -p tcp -m tcp --dport 3128 -j ACCEPT
-A INPUT -s 10.0.144.10/32 -p tcp -m tcp --dport 3128 -j ACCEPT
-A INPUT -s 10.0.144.12/32 -p tcp -m tcp --dport 3128 -j ACCEPT

# Запрещаем все, что не разрешено:
-P INPUT DROP
-P OUTPUT ACCEPT
-P FORWARD DROP

COMMIT

 

Virap
()

Как, простите, понимать весь этот цирк с конями и клоунами?

Форум — Talks

Я очень часто вижу тут много новых слов, но понять их смысл могу не в полной мере. А посему вопрошаю: джун, мидл, сеньор, лид, линукс админ и иже с ними. Кто-нибудь понимает смысл этих слов? А еще фреймворк и девопс.

Вот, допустим, надо мне нанять двух дворников и трёх разнорабочих на стройку, где я, наверное «техдир» считаюсь (хрен знает, прораб вобщем).

Пришли ко мне Махмуд, Гюльчатай, Ахмадинежад, Мамлака́т и Джамшут. Я им всем выдал по метле и ведёрку - метут хорошо, значит джуны уже точно? Или уже миддлы? А если метут хорошо, но мимо мусорки складывают? А как мне узнать, вдруг Гюльчатай это сеньор(ка) по чебурековарению, а я её на таскание кирпичей определяю?

Пожалуйста, объясните, где заканчивается джун и начинается лид с фреймворком. И главное - как их всех по-русски назвать? А то что, в электронную трудовую теперь так и писать:

Работает с 2020 года миддл-джуном по фреймворкам для сеньора по заказу девопса

 , ,

Brillenschlange
()

Обезопасить Debian после установки

Форум — Security

Столкнулся с тем, что в Debian 10 по умолчанию после установки есть некоторые вещи, связанные с безопасностью, которые хотелось бы изменить. Раньше использовал в основном Fedora/RHEL/CentOS и привык к другому подходу. То, что в Debian не включен SELinux, еще не так страшно в моем случае. Но, например, хотелось бы закрыть доступ других пользователей к содержимому домашнего каталога и поднять firewall.

Скажите, пожалуйста, какие еще есть такие базовые вещи, которые я мог сразу не заметить, которые в безопасности отличают Debian от RHEL-подобных? Пытался найти какие-то статьи по безопасности в Debian, но не нашел ни в одной про права на домашний каталог.

 

centr-o
()

Работа с grep ( различные условия )

Форум — General

Добрый вечер ребята. Нубский вопросик. Дано: различные ява логи со стектрейсами ( ОС дебиан ), например:

Exception in thread «main» java.lang.NullPointerException

at com.example.myproject.Book.getTitle(Book.java:16)

at com.example.myproject.Author.getBookTitles(Author.java:25)

at com.example.myproject.Bootstrap.main(Bootstrap.java:14)

Если я просто грепую: grep -i ‘NullPointerException’ /путь Он выведет мне строку с данной надписью.

Вопрос: можно из поиска «всех ошибок» (который вывести простым grep -i «ERROR» /путь), убрать ненужные ошибки, те на которые я не хочу обращать внимания.

Допустим: Вывести все ошибки ERROR, кроме NullPointerException. Есть ключ -V, но насколько я понимаю он уберет только строчку содержащую значение NullPointerException ( grep -v «NullPointerException» /путь А мне бы хотелось, что бы и стектрейс этой ошибки тоже не выводился. Или это из области фантастики?

 , ,

Gera123
()

makefile и озвучка, в зов-ти от результата

Форум — Development

добрый день!

нужно озвучить работу makefile, в зов-ти от успеха/ошибки
makefile - в общем-то стандартный (не без надстроек :о)
рассмотрим, самый простой случай

make all
makefile
all:   build
build: elf hex epp lss sym

elf: 		$(TARGET).elf
hex: 		$(TARGET).hex
eep: 		$(TARGET).eep
lss: 		$(TARGET).lss
sym: 		$(TARGET).sym
нужно, что-бы при успехе/ошибке, !!! внутри makefile !!! вызывались команды, соответственно:
${BEEP_OK}  # OK
${BEEP_ERR} # ERR  
+
slackware 12.2/14.2 x32/64
avr-gcc/xc8
bash

спасибо

p.s. все с набегу пока мысля не влетела в голову...

уточняю - надо все упаковать в makefile

 , ,

sunjob
()

Как вы справляетесь с запотеванием очков ?

Форум — Talks

при использовании маски ?

Снимаешь очки - нифига не видно, оставляешь - все запотевает и опять же нифига не видно ?

Линукс тут при том, что в основном очкастые задроты красноглазят

 

Jopich1
()

Linux raid level 6 скорость записи около 30 Мб/с

Форум — Admin

Массив

root@host103:~# mdadm --detail /dev/md127 
/dev/md127:
           Version : 1.2
     Creation Time : Fri Nov  6 20:36:47 2020
        Raid Level : raid6
        Array Size : 92273631232 (87998.99 GiB 94488.20 GB)
     Used Dev Size : 11534203904 (10999.87 GiB 11811.02 GB)
      Raid Devices : 10
     Total Devices : 10
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Mon Nov  9 04:17:49 2020
             State : active, checking 
    Active Devices : 10
   Working Devices : 10
    Failed Devices : 0
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : bitmap

      Check Status : 0% complete

              Name : host103:2  (local to host host103)
              UUID : 4e5483ae:2e82d657:2ec42c81:1593e833
            Events : 13709

    Number   Major   Minor   RaidDevice State
       0       8       33        0      active sync   /dev/sdc1
       1       8       49        1      active sync   /dev/sdd1
       2       8       65        2      active sync   /dev/sde1
       3       8       81        3      active sync   /dev/sdf1
       4       8       97        4      active sync   /dev/sdg1
       5       8      113        5      active sync   /dev/sdh1
       6       8      129        6      active sync   /dev/sdi1
       7       8      145        7      active sync   /dev/sdj1
       8       8      161        8      active sync   /dev/sdk1
       9       8      177        9      active sync   /dev/sdl1
root@host103:~# 

из дисков

root@host103:~# fdisk -l /dev/sdc
Disk /dev/sdc: 10.94 TiB, 12000138625024 bytes, 23437770752 sectors
Disk model: TOSHIBA MG07ACA1
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: CC7399F1-714A-4ECF-B7A8-79BB1767F1B7

Device     Start         End     Sectors  Size Type
/dev/sdc1   2048 23068674047 23068672000 10.8T Linux filesystem
root@host103:~# 
root@host103:~# smartctl -i -A /dev/sdc
smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.4.0-52-generic] (local build)
Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Toshiba MG07ACA... Enterprise Capacity HDD
Device Model:     TOSHIBA MG07ACA12TE
Serial Number:    20B0A2AQFDUG
LU WWN Device Id: 5 000039 9f8cb26c8
Firmware Version: 4003
User Capacity:    12,000,138,625,024 bytes [12.0 TB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Rotation Rate:    7200 rpm
Form Factor:      3.5 inches
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ACS-3 T13/2161-D revision 5
SATA Version is:  SATA 3.3, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is:    Mon Nov  9 04:18:41 2020 UTC
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000b   100   100   050    Pre-fail  Always       -       0
  2 Throughput_Performance  0x0005   100   100   050    Pre-fail  Offline      -       0
  3 Spin_Up_Time            0x0027   100   100   001    Pre-fail  Always       -       7148
  4 Start_Stop_Count        0x0032   100   100   000    Old_age   Always       -       10
  5 Reallocated_Sector_Ct   0x0033   100   100   010    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000b   100   100   050    Pre-fail  Always       -       0
  8 Seek_Time_Performance   0x0005   100   100   050    Pre-fail  Offline      -       0
  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       85
 10 Spin_Retry_Count        0x0033   100   100   030    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       10
 23 Helium_Condition_Lower  0x0023   100   100   075    Pre-fail  Always       -       0
 24 Helium_Condition_Upper  0x0023   100   100   075    Pre-fail  Always       -       0
191 G-Sense_Error_Rate      0x0032   100   100   000    Old_age   Always       -       0
192 Power-Off_Retract_Count 0x0032   100   100   000    Old_age   Always       -       9
193 Load_Cycle_Count        0x0032   100   100   000    Old_age   Always       -       15
194 Temperature_Celsius     0x0022   100   100   000    Old_age   Always       -       27 (Min/Max 19/27)
196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0032   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0030   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x0032   200   200   000    Old_age   Always       -       0
220 Disk_Shift              0x0002   100   100   000    Old_age   Always       -       2228224
222 Loaded_Hours            0x0032   100   100   000    Old_age   Always       -       61
223 Load_Retry_Count        0x0032   100   100   000    Old_age   Always       -       0
224 Load_Friction           0x0022   100   100   000    Old_age   Always       -       0
226 Load-in_Time            0x0026   100   100   000    Old_age   Always       -       594
240 Head_Flying_Hours       0x0001   100   100   001    Pre-fail  Offline      -       0

root@host103:~# 

Диски подключены к контроллеру PERC H730 Mini (Embedded) в режиме HBA (шасси PowerEdge R730xd)

Поверх лежит LVM.

root@host103:~# vgs
  VG   #PV #LV #SN Attr   VSize   VFree   
  vg01   1   4   0 wz--n- 439.87g  399.87g
  vg02   1   3   0 wz--n- <85.94t <158.99g
root@host103:~# 
root@host103:~# lvs | grep -e LV -e test
  LV              VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  test-begin      vg02 -wi-ao---- 400.00g                                                    
  test-end        vg02 -wi-a----- 400.00g                                                    
  test-middle     vg02 -wi-a-----  85.00t                                                    
root@host103:~# 

Показывает на операции

root@host103:~# shred -n0 -z -vv /dev/mapper/vg02-test--begin                                                                                                                                                      
shred: /dev/mapper/vg02-test--begin: pass 1/1 (000000)...                                                                                                                                                          
shred: /dev/mapper/vg02-test--begin: pass 1/1 (000000)...145MiB/400GiB 0%

скорость на запись около 30 мебибайт в секунду. Это нормально?

Прямо сейчас идёт ресинк, я руками запустил. На момент прогона shred ресинка не было.

 , ,

targitaj
()

Помогите оседлать iptables

Форум — Admin

Пытаюсь сделать некий kill-switch для vpn соединения, работать должно крайне просто - отвалился VPN - тут же любые пакеты наружу - Operation not permitted.

Проблема в том, что у меня несколько интерфейсов, условный eth0 и wlan1 wlan2. Работать должно везде равносильно.

[url] https://paste.ubuntu.com/p/jyZXg5pFBw/ [/url]

Да, не очень красиво выглядит. Самое главное, что работает только с Ethernet интерфейсом, если же я подключён по WLAN, нету запрета на выход при отвале впн, спокойно идёт наружу пакет, непонятно почему.

И попутный вопрос, можно ли как-то в одну строку запихать правило с двумя тремя интерфейсами, типа iptables -A OUTPUT -j DROP -p TCP -o eth0 wlan1 wlan2 wlan3 ?

 ,

cheetah111v
()

Прервалось обновление

Форум — General

При обновлении ОС, случайно отключил комп. ОС загрузилась. У меня Fedora, при загрузке показывает версию 32, а в самой системе показывает 33. Программы не обновляются показывает конфликт пакетов версии 33 с версией 32. Откат к старым версиям не прокатывает. Помогите решить проблему!

 ,

RazorBG
()

Что нам делать с пьяным Quoted-printable

Форум — Development

Доброй ночи, ЛОР.
Разбирая в своей программе структуры vCard и vMessage, я наткнулся на поля, которые помечены как quoted-printable, но на самом деле таковыми не являются.
RFC 2045 определяет Literal representation только для ASCII-символов, всё остальное оборачивается в HEX (что-то типа =D0=9E=D0=BB=D0=B5=D0=B3). Такой quoted-printable у меня обрабатывался давно и обрабатывался нормально.
Но вот я столкнулся с полями, где указано ENCODING=QUOTED-PRINTABLE, а дальше идёт чистый текст в UTF8. В шестнадцатиричку закодированы только переносы (=0A=0A). Варианты действий:

  1. игнорировать такие поля как неправильные. Самый простой и самый плохой подход (пользователь потеряет данные);
  2. ввести искусственный хак — при обнаружении non-ASCII символов в «кодированном тексте» возвращать его как уже декодированный (возможно, заменив =0A на символы перевода строки);
  3. сделать полноценный парсер с учётом юникода.

Сейчас я остановился на варианте 2. Это дёшево и сердито (и имхо, справедливо по отношению к такого рода данным). Смущает только, что я не знаю, какие ещё символы придётся обрабатывать отдельно.

По уму, если делать вариант 3, надо пробегаться по всем юникодным символам в ожидании знака =, и то, что с него начинается, уже трактовать как 16-ричку. Но при этом надо уметь для каждого UTF8-символа определять его длину, чтобы не принять за = какой-нибудь средний байт какого-нибудь 4-байтного символа. Алгоритм определения, в принципе, найти можно. Вопросов только 2: стоит ли этим заморачиваться для уже нестандартного случая, и нельзя ли сделать это как-нибудь проще?

 ,

hobbit
()

Java джун познаёт мир

Форум — Development

Работаю больше 4 месяцев джуном на джаве (spring-boot, hibernate), познаю кровавый интерпрайз. Пока легаси поддерживать не кидали, пилю новый функционал на проектах.

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

Getters/Setters

Постоянно в дтошках вижу одну и туже картину. Куча private полей, и к каждому из них геттер и сеттер. Больше ничего в классе нету. Я не понимаю, нафига строить тут типа «инкапсуляцию», если класс ничего семантически не инкапсулирует? Почему бы не сделать просто public филды?

Lombok

Крутая штука, но некоторые её до жути боятся и продолжают генерировать шаблонный код. Из трёх проектов, в которых я писал код, в двух ломбока не было и всё надо было делать руками (да, нажать биндинг для генерации в idea - тоже, считай, руками). Кроме того ломбок предоставляет @RequiredArgsConstructor, который в спринг-бинах просто мастхэв

Любовь к старым технологиям

Во всех трёх проектах (и это не легаси говно, с нуля все написаны в 2020) используется java 8. Почему не 9, где для optional подвезли нормальные методы? Почему вообще у чуваков такая тяга к старым технологиям? В новой джаве вот уже рекорды добавили, чтобы без ломбока и прочего жить нормально, так не, мы продолжим сидеть на 8, в худше случае и без ломбока.

И это не только с версией джавы, на проектах (новых!) используется версия querydsl 3.x, поддержка которой давно закончилась. Понятно, что в 4.x поломали совместимость, но неужели разобраться с этим это прям такое запарное дело?

Ехал singleton через singleton или процедурное программирование

По сути в архитектуре веб-приложухи на джаве нету никакого ООП. Все Service-компоненты с бизнес-логикой это по сути просто набор процедур. Все объекты service-классов существуют в единственном виде как синглтон. По крайней мере, я так это понял. Dtoшки это вообще не класс, это просто классический record в виде си. Всё в итоге сводится к процедурному программированию, когда дтошки (читай - записи) суются в методы сервисов (читай - в процедуры), откуда вызываются другие методы (по сути те же процедуры).

Код и данные максимально разделены. Это как-то не сходится с моими представлениями о ооп и тому, чего я ожидал от «ооп-языка»

Непонятные решения в БД и около её.

В лабах я привык использовать idшники в качестве PK, однако в реальном интерпрайзе везде uuidшники. Я погуглил, понял, что всё как-то связано с масштабированием и немного с безопастностью (если неавторизованные юзеры работают с сущностями), но в одном проекте у нас были и idшники, и uuidшники! Зочем?

Чейнджсеты ведутся в liquibase, причём все они хранятся в одном каталоги и инклюдятся в мастер-чейнджсет через includeAll. Нумеруются по принципу дата-айдишник-описание.xml. НО. Это же костыль! Если у меня в один день будет changeset в id=9 и с id=10, то 10ка попросту выполнится перед девяткой! Если уж использовать только числовые айди, то почему бы liquibase Не выполнять их по очереди?

Также не пишутся никакие sql-триггеры, вся логика прописывается в коде. Хотя в некоторых местах триггеры выглядели бы прям как образцовый пример из методички, на мой взгляд.

 , ,

Fizzika
()

Вопрос про mmap() файлов в память.

Форум — Development

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

Необходимо в режиме read only иметь быстрый случайный доступ к разным узлам дерева, но при этом не хотелось бы, что процесс отъедал много реальной оперативной памяти, так как есть другой процесс, которому она нужна. Думаю замапить весь файл в память с помощью функции mmap().

Правильно ли я понимаю, что ОС будет автоматически подгружать в память странички по мере чтения и только те, к которым обратились? И выгружать те странички, которыми давно не пользовались, если физической оперативной памяти на всех не хватает и она нужна другому процессу.

Или я слишком много хочу от ОС?

 

pathfinder
()

Просто оставлю это здесь: Игра в supertux2 с множественными `tail /dev/zero` в фоне без зависаний

Форум — Desktop

Собственно: https://youtu.be/fPnbnNX9CPE

Система на HDD, Debian 9 Mate, MemTotal=10GB, swap on zram (disksize=14GB). memavaild, prelockd и nohang-desktop работают в фоне и помогают сохранять отзывчивость несмотря ни на что.

https://github.com/hakavlad/nohang

https://github.com/hakavlad/prelockd

https://github.com/hakavlad/memavaild

Кратко: prelockd - новейшее оружие в борьбе за отзывчивость при нехватке памяти.

Спрашивайте ответы.

 

hakavlad
()