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
()

Обход блокировки VPN

Форум — Admin

Здравствуйте! У меня провайдер блокирует почти пол интернета, youtube, whatsapp, vk, facebook и тд. Раньше спасал впн Psiphon, но теперь и его умудрились заблочить, пробовал разные впн сервисы толку нет, покупал платные но и они не работали. Подскажите как можно обойти эти блокировки, арендовал VPS сервер на нем установил openvpn, но не могу разобраться по какому принципу идет блокировка, могу предоставить любые логи.В России все работает подключается, а вот в этой стране нет. И да провайдера сменить не могу, он один на всю страну))). Хочется просто нормально пользоваться интернетом.

 , ,

sasha_ld
()