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.


Témata - Marekuss

Stran: [1]
1
Vývoj / Rust - serde/bincode serializacia/deserializacia dat
« kdy: 17. 12. 2021, 22:34:04 »
Ahojte kolegovia,

Tentokrat sa na Vas obraciam kvoli serializacii/deserializacii struktur(y) - jednoduchych MSG (TCP/IP) medzi serverom(Rust) a klientom C/freeRTOS(32bit MCU, 128kb RAM).
Spravy su vsehovsudy jednoduche, nieje nutne ich balit do msgpack, protobuf, bson a pod.

Na serializaciu/deserializaciu som pouzil serde/bincode, s tym ze vysledna sprava sa sklada z MessageHeader + MessageBody => Message. Na tomto designe sa mi nepacia dve veci, a to:

MessageHeader::message_type je ulozena hodnota z MessageBodyType::{Version, BatteryHealth} a sucastne Message::body obsahuje {enum MessageBody::Version(Version), enum BatteryHealth(BatteryHealth) }
co ma za nasledok ze Serde serializuje Message(Version) nasledovne

Kód: [Vybrat]
0             1       2      3        4
[message_type | _pad0 | body_size     ]
[              crc                    ]
[              enum                   ]      <---- serde vlozil enum
[x1           |  x2   |     x3        ]

Takze "struct MessageHeader" ma dlzku 8 bajtov, "struct Version" ma dlzku 4 bajty => idealne by "struct Message" mal mat 12 bajtov.
V skutocnosti ma "struct Message" 16 bajtov, a to z dovodu ze serde prida 4 bajty na rozlisenie enum MessageBody::{Version, BatteryHealth}

Serializovany objekt s prihladnutim na kod vyzsie vyzera nasledovne, kde 11/22 je MessageBodyType::{Version, BatteryHealth}, a 0/1 na 9 pozicii je "enum MessageBody::{Version(), BatteryHealth()}"
Kód: [Vybrat]
serialized_version: (16) vec![11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...]
serialized_battery: (16) vec![22, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, ...]

 
Preto sa pytam skusenejsich, akceptovat to, ze serde prida 4bajty na rozlisenie enumu a tuto vec zohladit na strane klienta,
Pripadne, napada Vas moznost ako namodelovat kod nizsie, tak, aby serde/bincode serializovalo/deserializovalo iba mne chcenych 12bajtov (MessageHeader + MessageBody)

AD: Pokusal som sa namodelovat "pub fn deserialize<'a>(bytes: &'a [u8]) -> Box<MessageTrait>", toto sa mi nepodarilo skrz (https://doc.rust-lang.org/error-index.html#E0038)

Rust:
    cargo - serde
    cargo - bincode
Kód: [Vybrat]
use serde_repr::*;
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, PartialEq, Debug)]
pub enum MessageBody {
    Version(Version),
    BatteryHealth(BatteryHealth),
}

#[derive(Serialize_repr, Deserialize_repr, PartialEq, Debug)]
#[repr(u8)]
pub enum MessageBodyType {
    Version = 11,
    BatteryHealth = 22,
}

impl MessageBody {
    pub fn value(&self) -> MessageBodyType {
        match *self {
            MessageBody::Version(_) => MessageBodyType::Version,
            MessageBody::BatteryHealth(_) => MessageBodyType::BatteryHealth
        }
    }
}

#[derive(Serialize, Deserialize, PartialEq, Debug)]
#[repr(C)]
pub struct MessageHeader {
    message_type: MessageBodyType,  // 1
    _pad0: u8,                      // 1
    body_size: u16,                 // 2
    crc: u32,                       // 4
}

impl MessageHeader {
  pub fn new_as(message_type: MessageBodyType) -> MessageHeader {
    MessageHeader {
        message_type: message_type,
        _pad0: 0,
        body_size: 0,
        crc: 0,
    }
  }
}

#[derive(Serialize, Deserialize, PartialEq, Debug)]
struct Message {
    header: MessageHeader,
    body: MessageBody,
}
impl Message {
    pub fn serialize(mt: MessageBody) -> Vec<u8> {
        let header = MessageHeader::new_as(mt.value());
        let header_size_of = std::mem::size_of::<MessageHeader>();
        let header_vec =  bincode::serialize(&header).unwrap();
        let header_vec_len = header_vec.len();


        let body_version_size_of = std::mem::size_of::<Version>();
        let body_vec: Vec<u8> = bincode::serialize(&mt).unwrap();
        let body_vec_vec_len = body_vec.len();


        let message: Message = Message { header:  header, body: mt };
        let message_size_of = std::mem::size_of::<Message>();
        let message_vec = bincode::serialize(&message).unwrap();
        let message_len = message_vec.len();
       
        message_vec
    }

    pub fn deserialize<'a>(bytes: &'a [u8]) -> Message {
        let message_header_len = std::mem::size_of::<MessageHeader>();

        let header_slice: &[u8] = &bytes[0..message_header_len];
        let header: MessageHeader = bincode::deserialize(header_slice).unwrap();

        let message: Message = bincode::deserialize(bytes).unwrap();

        message
    }
}

#[derive(Serialize, Deserialize, PartialEq, Debug)]
#[repr(C)]
pub struct Version {
    pub x1: u8,       // 1
    pub x2: u8,       // 1
    pub x3: u16,      // 2
}

#[derive(Serialize, Deserialize, PartialEq, Debug)]
#[repr(C)]
pub struct BatteryHealth {
    pub x1: u8,       // 1
    pub x2: u8,       // 1
    pub x3: u16,      // 2
}

fn main () -> Result<(), Box<(dyn std::error::Error + 'static)>> {
    let serialized_version: Vec<u8> = Message::serialize(MessageBody::Version(Version{x1: 3, x2: 6, x3: 0xFAFA}));
    let serialized_battery: Vec<u8> = Message::serialize(MessageBody::BatteryHealth(BatteryHealth{x1: 10, x2: 20, x3: 0x0A0A}));

    let deserialized_version: Message = Message::deserialize(&serialized_version);


  Ok(())
}

Diky M.

2
Hardware / MMC karta - nieje mozne ju precitat
« kdy: 05. 12. 2021, 13:31:25 »
Ahojte, dostal som od znameho SDKartu, ktora sa tvari ze je mrtva. Bola povodne v telefone s Androidom (??? verzia) ktory je uz nefunkcny.
Hovoril nieco o tom, ze telefon si vyziadal PIN pre kartu - ja som tuto funkciu nenasiel/nepoznam ju, ale myslim si ze to nieje dovod aby to Linux nerozpoznal.

Napada Vas nejaka moznost ako precitat kartu? Linux ju rozoznal, tak este uplne mrtva nie je.
Kód: [Vybrat]
dmesg:
    usb 1-3: new high-speed USB device number 31 using xhci_hcd
    usb 1-3: New USB device found, idVendor=0bda, idProduct=0109, bcdDevice= 9.59
    usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
    usb 1-3: Product: USB2.0-CRW
    usb 1-3: Manufacturer: Generic
    usb 1-3: SerialNumber: 20090815198100000
    usb-storage 1-3:1.0: USB Mass Storage device detected
    scsi host9: usb-storage 1-3:1.0
    scsi 9:0:0:0: Direct-Access     Generic- SD/MMC           1.00 PQ: 0 ANSI: 0 CCS
    sd 9:0:0:0: Attached scsi generic sg1 type 0
    sd 9:0:0:0: [sdb] Attached SCSI removable disk
   
lsusb:
    Bus 001 Device 031: ID 0bda:0109 Realtek Semiconductor Corp. microSDXC Card Reader [Hama 00091047]

lsblk:
    Nothing
   
ls /dev/sg*
    /dev/sg1
   
ls /dev/sd*
    /dev/sdb
   
sudo fdisk /dev/sdb
    fdisk: cannot open /dev/sdb: No medium found

sudo dd if=/dev/sdb of=~/Temp/test.img
    dd: failed to open '/dev/sdb': No medium found
   
sudo sg_dd if=/dev/sg1 of=Temp/test.img2 bs=4M count=1024
    reading (SG_IO) on sg device, error: Invalid argument
    sg_read failed, at or after lba=0 [0x0]
    Some error occurred,  remaining block count=1024
    0+0 records in
    0+0 records out

3
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 => {}
        }

    }

}

4
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

5
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.


6
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...

7
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

8
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.


9
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.



10
Ahojte Linuxaci (:

Mam drobny problem s konfiguraciou systemd a mDNSResponder, a switch systemd-networkd nastaveni medzi AP a Client mode.
mDNSResponder je spusteny ako servisa zo systemd, ked sa nahodi network, bezi stale, nevypina sa.

Doska operuje v dvoch modoch, AP a Client, medzi tymito modmi sa prepina v sposobe:
(notConfigured) -> AP -> configured -> Client
(configured) -> Client

prechod medzi AP -> Client riesi skript s wpa_supplicant a generuje wpa_supplicant.conf

vAP mode:
* Doska je izolovana, nema ziadny externy internet/ethernet
systemd-resolved by mal resolvovat mena v tvare myhost.local, systemd-networkd maa zapnuty DHCP server a prideluje adresy zariadeniam co sa pripoja, mdnsresponder bezi na pozadi.
Zapnuty http server (localhost)
Doska nieje pripojena na externy internet, funguje ako izolovane AP

vClient mode:
* Doska je pripojena k externemu WiFi
systemd-networkd by mal byt v clientmode, + podporovat IPV4LinkLocal, adresy brat z DHCP
vypnuty http server



Momentalne to mam nastavene takto:

#/etc/nsswitch.conf
--
hosts: files myhostname mdns dns
--

#/etc/hosts
127.0.0.1 localhost.localdomain localhost

vAP mode:
#/etc/resolv.conf
nameserver 192.168.5.1

Otazka:
1) Ako prepinat medzi "network" konfiguraciami pre AP a Client mode na wlan s pouzitim systemd-networkd?
 a) vygenerovat wlan0_AP.network wlan0_Client.network a treti v */systemd/network/20-wlan0.network, coz ten treti bude symlink na jeden podla toho ci AP alebo Client?
 b) existuje nieco rozumnejsie ako a)?
2) Treba nejako extra nastavovat systemd-resolved pre AP a pre Client?

Trocha ma natahuje to systemd, mal som to riesene bez systemd, ale rozkaz znel jasne...

Diky
M.


11
Vývoj / Návrh frontend/backend model-view-controller
« kdy: 08. 12. 2019, 09:51:11 »
Ahojte.

Mame napisanu GUI aplikaciu v QT, ktora sa stara o zobrazovanie dat zo snimacov a zobrazuje ich na paneli (1024/768), coz funguje pekne a dobre. Ovsem, casto sa stava ze zakaznik chce zmenit design, navrh toho GUI na ine farbicky, poposuvat zopar okien a pod, takze sa to musi menit v QT, znova skompilovat, odtestovat a dodat...

Kedze nam doba HW poskocila, tak premyslame o tom, ze by sa dalsia verzia toho GUI prerobila do electronu, pripadne cisto na chromium s HTML, CSS, javascript. Na Paneli by bezal chromium, v nom by bolo navrhnute GUI a data by tahal v nejakom definovanom formate zo siete.

Otazka do plena, ak to postavime na chromium, je dobre do toho designu zapracovat MVC, alebo riesit cisto iba "View" a zvysok nechat na backende na serveri? Alebo napisat cele MVC v javascripte/typescripte a data pollovat zo serveru?
A do tretice, pozeral som po websockets, trochu sa mi zapacilo, bude to vhodne?

Diky

12
Sítě / Captive portal / http:80 redirect to localhost
« kdy: 13. 03. 2019, 18:27:25 »
Ahojte,

Zdanie je spravit captive portal pre WLAN, jedna sa o embedded Linux 4.11, BEZ iptables a net_forward.

Redirect nastane, ak sa uzivatel pripoji na HOST AP, a napise v prehliadaci "google.com", automaticky sa presmetuje na 127.0.0.1:80
Pripadne otvori WebBrowser na danej AP a bude presmerovany na 127.0.0.1:80 bez akejkolvek interakcie

Standardne by som to vyriesil cez iptables PRE/POST routing, nakolko nieje a nebude k dispozicii , hladam ine riesenie.
Nejake riesenia?

Najlepsie nieco co ide skompilovat pomocou GCC a nevyzaduje hromadu dependencies...
Diky M

Stran: [1]