Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - Marekuss

Stran: 1 [2] 3
16
Vývoj / Re:Rust - std::ANY alebo lepší návrh?
« kdy: 17. 11. 2021, 22:16:35 »
K tomu navrhu cez Lazy Init, super napad, rovno to pouzijem, uvazoval som ale nic lepsie ma prakticky na momentalne sksuenosti nenapada.
Jde to elegantněji přes get_or_insert.

Diky za hint, vyzera to ako tiez dobra cesta :)

17
Vývoj / Re:Rust - std::ANY alebo lepší návrh?
« kdy: 17. 11. 2021, 21:40:24 »
Dik za hint, mas pravdu, to s tym Option optimalizujem (:
K tomu navrhu cez Lazy Init, super napad, rovno to pouzijem, uvazoval som ale nic lepsie ma prakticky na momentalne sksuenosti nenapada.

Este raz dik za hint.

18
Vývoj / Re:Rust - std::ANY alebo lepší návrh?
« kdy: 17. 11. 2021, 12:47:14 »

Ano, spravne. Jednotlive typy (XYZ) poznam uz v dobe prekladu, nevedel som spravne namodelovat Trait tak, aby som vedel "nacpat" XYZ do funkcie "push", a teda, vyuzil som mne zname std::Any.
Proč nepoužiješ enum?
Este niesom v Ruste spravne "zabehnuty" takze, neviem/netusim ako konkretne by som pouzil Enum ako nahradu za Struct ( tomto konkretnom priklade)

fn push<T:B>(&mut self, data:T)

Ano, k tomuto som sa rovnako dopracoval +- ked ste to postol.

Posielam prehladnejsi, upravenejsi kod, samozrejme v kode pouzivam Result<(), Error>, len pre prehladnost som to odstranil.
Uz sa mi to vcelku pozdava, az na nutnost DatabaseMembers, ale to si myslim, ze casom a skusenostami optimalizujem :)
Diky

Kód: [Vybrat]
use MYSQL::Connection;

pub enum DatabaseMembers {
    X,
    Y,
    Z
}

// Various Structs
pub struct X {
    pub name: String
}

pub struct Y {
    pub text: String
}

pub struct Z {
    pub value: u64
}

/* Builder - traits */
trait DatabaseBuilder {
    fn push(&self, c: &Option<Connection>);
    fn create_table(c: &Option<Connection>);
}

impl DatabaseBuilder for X {
    fn push(&self, c: &Option<Connection>){
        let query = query = "INSERT INTO x (name) VALUES (?1)"
        let query_params = params![&self.name];

        match c {
            Some(e) => e.execute(query, query_params)?,
            None => {},
        };
    }

    fn create_table(c: &Option<Connection>){
        let query =
            "CREATE TABLE IF NOT EXISTS X (
                id      INTEGER PRIMARY KEY,
                name    TEXT NOT NULL,
            );";
        match c {
            Some(e) => e.execute(query, [])?,
            None => {},
        }
    }

}

impl DatabaseBuilder for Y {
    fn push(&self, c: &Option<Connection>){
        let query = query = "INSERT INTO y (text) VALUES (?1)"
        let query_params = params![&self.value];

        match c {
            Some(e) => e.execute(query, query_params)?,
            None => {},
        };
    }

    fn create_table(c: &Option<Connection>){
        let query =
            "CREATE TABLE IF NOT EXISTS X (
                id      INTEGER PRIMARY KEY,
                text    TEXT NOT NULL,
            );";
        match c {
            Some(e) => e.execute(query, [])?,
            None => {},
        }
    }
}

impl DatabaseBuilder for Z {
    fn push(&self, c: &Option<Connection>){
        let query = query = "INSERT INTO z (name) VALUES (?1)"
        let query_params = params![&self.name];

        match c {
            Some(e) => e.execute(query, query_params)?,
            None => {},
        };
    }

    fn create_table(c: &Option<Connection>){
        let query =
            "CREATE TABLE IF NOT EXISTS X (
                id      INTEGER PRIMARY KEY,
                name    INTEGER,
            );";
        match c {
            Some(e) => e.execute(query, [])?,
            None => {},
        }
    }
}

impl DatabaseBuilder for Database {
    fn push(&self, c: &Option<Connection>){};
    fn create_table(c: &Option<Connection>){};
}

/* Database */
pub struct Database {
    c: Option<Connection>,
}

impl Database {
    pub fn new() -> Database {
        Database {
            c: None,
        }
    }

    pub fn open_temporary(&mut self){
        self.c = Some(Connection::open_in_memory());
    }

    pub fn push<T: DatabaseBuilder>(&mut self, data: &T) {
        data.push(&self.conn)
    }

    pub fn create_table(&mut self, m: DatabaseMembers) {
        match m {
            DatabaseMembers::X => X::create_table(&self.conn),
            DatabaseMembers::Y => Y::create_table(&self.conn),
            DatabaseMembers::Z => Z::create_table(&self.conn),
        }
    }
}

fn main() {

    let mut db: Database = Database::new();
    db.open_temporary();


    // X   
    db.create_table(DatabaseMembers::X);
    let x = X {name: String::from("Ahoj")};
    db.push(&x);

    // Y   
    db.create_table(DatabaseMembers::Y);
    let y = Y {text: String::from("Ahoj")};
    db.push(&y);

}



19
Vývoj / Re:Rust - std::ANY alebo lepší návrh?
« kdy: 15. 11. 2021, 23:20:51 »
Mozete spravit kratky snippet, pripadne upravit kod ktory som postol? Nieje mi uplne jasne ako by som to v oboch pripadoch zrealizoval.. v Ruste som novacik tak sa rad naucim novym trikom.
Diky!

20
Vývoj / Rust - std::ANY alebo lepší návrh?
« kdy: 15. 11. 2021, 18:04:43 »
Majme nasledujuci kod, kde mame strukturu X, Y, Z a majme "Database" ktora obsahuje funkciu "push" - vstup je "Any". Na zaklade typu vstupujuceho do "push" sa rozhodne ktory template sa zavola.
Dany zapis samozrejme funguje, len to nieje to prave orechove, skusenejsi kolegovia, mate nejaky navrh na zlepsenie?

Kód: [Vybrat]
// Various Structs
pub struct X {
    name: String
}

pub struct Y {
    text: String
}

pub struct Z {
    value: u64
}

/* Builder - traits */
trait DatabaseBuilder<T> {
    fn add(&self, data: &T);
}

impl DatabaseBuilder<X> for Database {
    fn push(&self, data: &X){
        /* ... */
        let y = data.name;
    }
}

impl DatabaseBuilder<Y> for Database {
    fn push(&self, data: &Y){
        /* ... */
        let y = data.text;
    }
}

impl DatabaseBuilder<Z> for Database {
    fn push(&self, data: &Z){
        /* ... */
        let y = data.value;
    }
}

/* Database */
pub struct Database {
    /* ... */
}

impl Database {
    pub fn new() -> Databse {
        /* ... */
    }

    pub fn push(&mut self, data: &dyn std::any::Any) {

        match data.downcast_ref::<X>() {
            Some(p) =>  DatabaseBuilder::<X>::push(self, p),
            None => {}
        }

        match data.downcast_ref::<Y>() {
            Some(p) =>  DatabaseBuilder::<Y>::push(self, p),
            None => {}
        }

        match data.downcast_ref::<Z>() {
            Some(p) =>  DatabaseBuilder::<Z>::push(self, p),
            None => {}
        }

    }

}

21
Server / sshd(OpenSSH) -> ssh + sftp pre /home/test
« kdy: 17. 10. 2021, 21:02:13 »
Ahojte kolegovia, potreboval by som "postuchnut" pri konfiguratcii (ssh + sftp), sshd(OpenSSH)
Moja vizia je taka, ze ku serveru mozem pristupit cez SSH a mat dostupne /bin, /usr/bin a SFTP je "locknute" do "/home/test"
Majme:

$ adduser -d /home/test test
$ mkdir -p /home/test/home/test
$ chown root:wheel /home/test
$ chmod 755 /home/test

sshd_config:
Kód: [Vybrat]
Port 22
AddressFamily inet
ListenAddress 0.0.0.0
UsePAM yes
UseDNS no
Subsystem sftp internal-sftp

AllowUsers test

Match User test
  X11Forwarding no
  AllowTcpForwarding no
  PasswordAuthentication yes
  ChrootDirectory /home/%u

Konfig vyssie pochopitelne chrootne (lockne) SFTP do zlozky /home/test, ale sposobi ze "/bin" a "/usr/bin" niesu pristupne a teda
$ ssh test@moja_ip
/bin/sh: No such file or directory
Connection to moja_ip closed.

Otazka: Je nieco "vhodnejsie" ako nasledujuci sposob?
$ mount -o bind,ro /dev/bin /home/test/bin

22
Server / Re:BIND nepřekládá některé domény
« kdy: 11. 10. 2021, 10:16:25 »
Riesil som podobnu vec, len rozdiel BIND -> UNBOUND. Linux(nftables) -> BSD(pf), ale +- situacia je rovnaka.

Zacal by som pozretim logov v BIND a este lepsie, traffic cez "tcpdump", uvidis tam vsetko relevantne
Dalej, v ubuntu mozes nastavit na "tvrdo" resolve DNS
Kód: [Vybrat]
# /etc/systemd/resolved.conf
[Resolve]
DNS=192.168.1.1
FallbackDNS=192.168.1.1 1.1.1.1 8.8.8.8

a taktiez skontrolovat ci mas dobre nakonfigurovane DoT (DNS over TLS), android to standardne vyuziva
ku prikladu, moj unbound.conf vyzera nejako takto:
Kód: [Vybrat]
## unbound.conf
#
server:
   
    chroot: ""

    interface: 0.0.0.0@53
    port: 53

    interface: 0.0.0.0@853
    ssl-port: 853                                     
   
  # log verbosity
    verbosity: 1
    log-queries: yes
    logfile: /var/log/unbound.log

  # Enable IPv4, "yes" or "no".
    do-ip4: yes
    do-ip6: no
    do-udp: yes
    do-tcp: yes

  # Access control
    access-control: 127.0.0.0/8 allow
    access-control: 192.168.0.0/16 allow
    access-control: 172.16.0.0/16 allow

    hide-identity: yes
    hide-version: yes
    harden-glue: yes
    harden-dnssec-stripped: yes

    unwanted-reply-threshold: 10000
    do-not-query-localhost: no
    auto-trust-anchor-file: "/usr/local/etc/unbound/root.key"
    val-clean-additional: yes

    private-address: 192.168.0.0/16
    private-address: 172.16.0.0/12

    private-domain: "server.lan"

  # locally served zones can be configured for the machines on the LAN.
    local-zone: "server.lan." static

    local-data: "smb.server.lan.      IN A 192.168.2.2"
    local-data: "ftp.server.lan.      IN A 192.168.2.3"

    local-data-ptr: "192.168.2.2  smb.server.lan"
    local-data-ptr: "192.168.2.3  ftp.server.lan"

  forward-zone:
     name: "server.lan"
     forward-addr: 127.0.0.1       # Internal or private DNS

  # Use the following forward-zone to forward all queries to Google DNS,
  # OpenDNS.com or your local ISP's dns servers for example. To test resolution
  # speeds use "drill calomel.org @8.8.8.8" and look for the "Query time:" in
  # milliseconds.
  #
  forward-zone:
   name: "."
   
   forward-addr: 1.1.1.1@53#one.one.one.one
   forward-addr: 8.8.8.8@53#dns.google
   forward-addr: 9.9.9.9@53#dns.quad9.net
   forward-addr: 1.0.0.1@53#one.one.one.one
   forward-addr: 8.8.4.4@53#dns.google
   forward-addr: 149.112.112.112@53#dns.quad9.net
   
   forward-addr: 1.1.1.1@853#cloudflare-dns.com
   forward-addr: 9.9.9.9@853#dns.quad9.net   


23
Software / Linux - Samba shadow copy
« kdy: 05. 04. 2021, 22:37:27 »
Doma experimentujem s FreeNAS/TrueNAS - pekne klikatko.

V NAS mam spustenu SMB a zapnute shadow copy na zlozku "TEST" - Windows ma klasicky "previous versions" tab - restore suboru ide z SMB_shadow_copy coz je ZFS snaphot na NASku.

Mate nejaky tip na GUI klikatko - ekvivalent "previous versions" pre Ubuntu MATE?
Dohladal som Deja-Dup, ale este sa mi ju nepodarilo rozbehat (nevie najst smb:// zlozku, aj ked ju Caja file manager normalne vidi)

Urcite sa mi nechce vymyslat koleso, data by som mal rad hostoval na NASku a vyuzival ZFS snapshoty aka versioning tam.
NextCloud je alternativa, pripadne 3rd backup ako timeshift, rsnapshots - ale to takmer pochovam snapshoty na NASku

Diky
M.


24
Software / udev - symlink USB HUB port
« kdy: 08. 02. 2021, 12:47:58 »
Ahojte kolegovia,

Riesim specificku USB/udev poziadavku a to, vytvorenie symlinku na USB HUB Port -> usb port passtru do LXD
majme 4-portovy USB HUB, kde je pripojene USB-CDC zariadenie (alebo ine), je mozne v Linuxe jednoznacne cez udev spravit symlink na dany USB HUB Port (nie device/zariadenie)?


udev/rules.d/90-hub-port.rules
Kód: [Vybrat]
    SUBSYSTEMS=="usb", ATTR{devpath}=="1.3.2", SYMLINK+="usb1-2", GROUP="usb", ATTR{authorized}="0", MODE="0660", GOTO="usb_end"

journalctl -f > log.txt
Kód: [Vybrat]
systemd-udevd[4803]: 1-1.3.2: /etc/udev/rules.d/90-hub-port.rules:4 GROUP 119
systemd-udevd[4803]: 1-1.3.2: /etc/udev/rules.d/90-hub-port.rules:4 MODE 0660
systemd-udevd[4803]: 1-1.3.2: /etc/udev/rules.d/90-hub-port.rules:4 LINK 'usb1-2'
systemd-udevd[4803]: 1-1.3.2: /etc/udev/rules.d/90-hub-port.rules:4 ATTR '/sys/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3.2/authorized' writing '0'


systemd-udevd[2399]: 1-1.3.2: Creating symlink '/dev/usb1-2' to 'bus/usb/001/009'

..
zatial v poriadku ale...
...

systemd-udevd[2405]: 1-1.3.2: Updating old name, '/dev/usb1-2' no longer belonging to '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3.2'
systemd-udevd[2405]: 1-1.3.2: No reference left, removing '/dev/usb1-2'


Vyzera ze udev mi vytvoril symlink na dany USB port, ale po enumeracii celeho USB-CDC (coz este som nedosiel ako mu zabranit) symlink prestal platit tak ho zmazal..

Je vobec mozne vyriesit popisanu situaciu?



AD: symlink na konkretne USB-CDC zariadenie cez udev funguje, aj forward do LXD, osobne by som ale chcel forwardnut dany fyzicky port z USB HUBU, nakolko chce bindovat port a nie zariadenie, co je pre mna viac genericke...

25
Vývoj / C++ - template a constexpr pre dvojicu trieda - funkcia
« kdy: 11. 01. 2021, 19:15:03 »
Ahojte kolegovia, prisiel som si pre radu ku skusenejsim :)

majme nasledujuci kod (vid nizsie), kde su 3 triedy (A,B,C) a k nim prisluchajuce funkcie (A_graph, B_graph a C_graph) - 3rd libka.
Posladal som si Builder a Helper class. Helper sluzi na inicializaciu dat, je narocny, tak sa oplati ho vyskladat iba raz (samozrejme, pre danu A/A_graph ...)

Riesim ako elegantnejsie vyriesit Helper constructor, a jeho privatneho clena unique_ptr<(A/B/C)> graph = make_unique<(A/B/C)>(A_graph/B_graph/C_graph("path"))

Dakujem pekne za hinty!
M

Kód: [Vybrat]
#include <string>
#include <memory>
#include <type_traits>

using namespace std;


/* 3rd lib defs */
class A {
    /* .. */
};

A A_graph(const string & in) {
    A ret;
    /* ... */
    return ret;
};

class B {
    /* .. */
};

B B_graph(const string & in) {
    B ret;
    /* ... */
    return ret;
};

class C {
    /* .. */
};

C C_graph(const string & in) {
    C ret;
    /* ... */
    return ret;
};

/* Own classes */
class IResult {};
class XResult : IResult {};
class YResult : IResult {};
class ZResult : IResult {};


template <class G>
class Helper {
    private:
        unique_ptr<G> graph;
        /*
        unique_ptr<GraphCalculator> calc;
        unique_ptr<Contraction> conc;
        unique_ptr<Router> rtr;
        */
    public:
        Helper(const string & in){


            if(0){
            }else if constexpr (std::is_same<G, A>::value){
                graph = make_unique<A>(A_graph(in));
            }else if constexpr (std::is_same<G, B>::value){
                graph = make_unique<B>(B_graph(in));
            }else if constexpr (std::is_same<G, C>::value){
                graph = make_unique<C>(C_graph(in));
            }

            /* Some data - time consuming init and calculations
           
            calc = make_unique<Contraction>(graph);
            ...
            */
        };
};

template <class R, class G>
class Builder {
    private:
        unique_ptr<Helper<G>> builder;
    public:
        unique_ptr<R> build(void){
            if(!builder)
                builder = make_unique<Helper<G>>("path");
           
            R ret;

            /* some stuff
            ...
           
            auto calculate = MySuperCalculateFunction(builder->conc->results());
            ret.append(route);
           
             ... */
           

            return make_unique<R>(ret);
        };
};

using XABuilder = Builder<XResult, A>;

int main(){

    XABuilder builder;
    auto A = builder.build();

    return 0;
};

AD: poprosim upravit nazov temy, netusim ako som to mal pomenovat

26
Vývoj / Re:C++ - Filter pattern
« kdy: 23. 12. 2020, 19:36:01 »
Pokud chceš filtr, který se bude dynamicky rozhodovat podle více možných typů vstupu, tak můžeš použít třeba std::variant.
Super, myslim ze toto by slo, o tej moznosti som ani netusil :)

Ahoj ahoj, totiz , ani ja som sa nevyjadril uplne presne :), nakoniec som musel cvhilku porozmyslat o navrhu a myslim ze to slo :)

Ano, ano, do prikladu som vrazil "new", nastastie bezne pouzivam smart pointre, ich vyhoda je nezrovnatelna :)
Povodny priklad som vyklepal do nasledujuceho tvaru, od zapudzrenia viacerych class (naprikald cez std::variant) do jedneho filtra som  upustil. Tak davam na inspiraciu/skomentovanie nasledujuceho kodu:
Kód: [Vybrat]
/* abstract rule template */
template <class T>
class TRule {
    public:
        virtual ~TRule(){};
        virtual bool operator()(const T & t) = 0;
};

template <typename T>
using RulePtr = std::unique_ptr<TRule<T>>;

template <typename T, typename Arg>
std::unique_ptr<T> Rule(Arg&& arg){
    return std::make_unique<T>(std::forward<Arg>(arg));
};

template <class T>
class TFilter {
    private:
        std::vector<RulePtr<T>> v_rule;
    public:
        TFilter(){};
        ~TFilter(){};

        void add(RulePtr<T> rule){
            v_rule.push_back(std::move(rule));
        }

        bool operator()(const T & t){
            for(auto & rule : v_rule){
                if((*rule)(t) == false){
                    return false;
                }
            }
            return true;
        }
};

/* Class */
struct Item {
    int16_t     id;
};

namespace ItemRule {

    class LessThan: public TRule<Item> {
        private:
            int16_t id;
        public:
            ~LessThan(){};
            LessThan(int16_t iid): id(iid){};
            bool operator()(const Item & item) override{
                return item.id < id ? true : false;
            }
    };

    class EqualTo: public TRule<Item>  {
        private:
            int16_t id;
        public:
            ~EqualTo(){};
            EqualTo(int16_t iid): id(iid){};
            bool operator()(const Item & item) override{
                return item.id == id ? true : false;
            };
    };
};

class ItemFilter : public TFilter<Item>{};

int main(void){

    /* test A */
    Item item_A = {15};

    ItemFilter itemfilter;
    itemfilter.add(std::make_unique<ItemRule::EqualTo>(15));   // (1)
    itemfilter.add(Rule<ItemRule::LessThan>(20));              // (1) 

    // (1) equivalent

    if(itemfilter(item_A) == true){
        std::cout << "ok" << std::endl;
    }else{
       std::cout << "off" << std::endl;
    }

    return 0;
}


27
Vývoj / C++ - Filter pattern
« kdy: 19. 12. 2020, 19:21:34 »
Ahojte kolegovia,

prichadzam si po radu ku skusenejsim :)
Riesim Filter pattern(?) ale zasekol som sa v navrhu:( tak prichadzam s prozbou
majme :
Kód: [Vybrat]
struct Item {
    int16_t     id;
};

class Rule{
    public:
        virtual ~Rule(){};
        virtual bool operator()(const Item & item) = 0;
};

class RuleLessThan: public Rule {
    private:
        int16_t id;
    public:
        RuleLessThan(int16_t iid): id(iid){}
        bool operator()(const Item & item){
            return item.id < id ? true : false;
        }
};

class RuleEqualTo: public Rule {
    private:
        int16_t id;
    public:
        RuleEqualTo(int16_t iid): id(iid){};
        bool operator()(const Item & item){
            return item.id == id ? true : false;
        };
};

class Filter {
    private:
        std::vector<Rule *> v_rule;
    public:
        Filter(){};
        ~Filter(){
            for(auto & rule : v_rule){
                delete rule;
            }
        };

        void add (Rule * rule){
            v_rule.push_back(rule);
        }

        bool apply(const Item & item ){
            for(auto & rule : v_rule){
                if((*rule)(item) == false){
                    return false;
                }
            }
            return true;
        }
};

int main(void){
    Item item_A = {15};
    Item item_B = {30};
    Item item_C = {40};

    Filter filter_A;
    Filter filter_B;

    filter_A.add(new RuleEqualTo(15));

    filter_B.add(new RuleEqualTo(30));
    filter_B.add(new RuleLessThan(50));


    if(filter_A.apply(item_A) == true){
        std::cout << "ok" << std::endl;
    }

    if(filter_B.apply(item_B) == true){
        std::cout << "ok" << std::endl;
    }

    if(filter_B.apply(item_C) == false){
        std::cout << "ok" << std::endl;
    }

    return 0;
}
majme vsak dalsi mozny vstup do rule a to:

Kód: [Vybrat]
struct Type {
    std::string type;
};

napada Vas, ako spravne zakompnovat "Type" do "Filter" a/alebo ako zakomponovat "Type" do "Filter" class?
Primarne ide o to, ze budem mat triedu Filter, ktora bude mat vo "Vector" n-Rules, ale tie by mali byt "Item" tak aj "Type"
Filter bude vediet pouzit .apply() podla typu--
Trocha som sa v navrhu zamotal tak hladam spravnu cestu

Diky
M.


28
Hardware / Re:Nákup periferií pro sběrnici 1-Wire
« kdy: 25. 10. 2020, 21:51:25 »
Ahoj all,

Ako pisal kolega vyssie, 1-Wire je leda tak dobry na "lokalne" zariadenie, t.j. dlzka do 1m.. tahat to viac.. mno, neni to k tomu ucelu ani navrhnute.

Tak isto i2c, da to jednotky metrov, ale...

Z mojho pohladu, ak chces kabel a WiFi/Wireless ee.. tak ries to prudovo: RS-485/422, a medzi RPi a svoju "siet" zaradis opticke/galvanicke oddelenie..

Ale, chce to isty skill a trocha bastlenia :)
M.

29
Server / NAS pre zálohovanie dokumentov, Samba a WireGuard
« kdy: 24. 10. 2020, 21:32:25 »
Ahojte kolegovia,

Kedze zacina isto iste zima, a situacia je aka je, dostal som sa znova k vyrieseniu domaceho NAS. Mal som na skusku Synology (2HDD) ale nebolo to ono, tak sa pohravam s myslienkou na stavbu NAS.

Co ocakavam:
1) Nizku spotrebu
2) RAID, "kdyby neco" a Backup/Zalohy
3) Ked sa nieco rozbije t.j. HDD, aby obnova bola jednoducha, pripadne dobre zdokumentovana
4) Pristup z LAN/WAN - wireguard/openvpn
5) jails/lxc
6) Dostupnost 24/7 ale restart nieje problem

Co tam pobezi:
a) wireguard/openvpn
b) SAMBA - storage pool blbosticky, share na LAN (nemusi byt ani backup, ani raid)
c) SAMBA - storage per user (raid, zalohy), 4x user, kazdy 50GB Dat, + zaloha fotiek 100GB...
d) pravdepodobne - CALDAV server

Konfiguracia:
I) supermicro doska - Intel Atom @4 Core, 16GB single slot ECC RAM, 8x SATA + PCIe 4x
II) M.2 SSD - 64/128GB - system
III) UPS
IV) Diskove pole - na diskusiu

Zvysok:
*) FreeNAS
*) Financie 15k Czk + HDD (15k CZk)

Tak a teraz otazka na diskusiu:
Jedna sa primarne o NAS pristupny cez LAN/WAN(wireguard/openVPN) na zalohovanie uzitocnych a cennych dat, pripadne na jednoduchu sluzbu typu CalDav
Ako system si predstavujem FreeNAS, vcelku ma oslovil... zatial som vyskusal ten Synology a OpenMediaVault.

Predstavoval by som si to takto, (je to predstava a preto sa radsej obratim na VAS).
- Ako system preferujem FreeNAS, ktory bude na 64/128GB M.2 SSD (myslim ze ani vacsi nema zmysel)...
- Na storage pool pre blbosticky, kde sa bude asi kopirovat najcastejsie, tak by som dal SSD, 256/512GB, ked bude malo miesta, zmaze sa
A teraz najtazsia vec, ako riesit disky, zabezpecenie:
- 3x4TB RAID 5 + Backup 4TB Int + 4TB HDD ext
- 2x4TB RAID 1 + 2x4TB Raid 1 Int + 4TB HDD ext
- Ine? (je to na diskusiu, chapem ake vyhody/nevyhody ma RAID 1/5/6, pripadne 10 .. ide mi o zlatu strednu cestu, +- 1 TB Hore dole je nic, 4TB nemam sancu zapratat do konca zivota

Pripadne, nejake vase tipy na NAS, ktore nieje enterprise a posluzi ucelu?  inak preinvestovat prostriedky?
Prosim o vecnu diskusiu, problematiku ECC, non-ECC ZFS/BTRFS, BTRFS RAID 5/6, pripadne mdamd ZFS/BTRFS som si stihol nastudovat.

Diky M.



30
Hardware / Re:Mobil s dobrou podporou LineageOS
« kdy: 21. 05. 2020, 21:15:57 »
Tiez sa uz poobzeravam pre nejaky telefon s dobrou podporou LineageOS, pripadne /e/.
Zatial mi uspesne a pekne bezi Samsung Galaxy SIII, napodiv uz cez 3 roky som si vystacil iba s F-droidom...
Chcelo by to nejaky dobry tip, na mensi telefon :)

Stran: 1 [2] 3