IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
matesax
Tvůrce
Avatar
matesax:11.9.2012 10:04

Dobrý den,
rád bych dopřál uživateli komfort a tedy umožnil mu psát pouze částečnou URL. Problém je, že k tomu potřebuji plné namespace System.Web - tedy neklientský framework. Dělám to ve WPF, takže to by nefungovalo. Tak jsem založil knihovnu, kde jsem vyřešil druhý problém (to, že to pracuje pouze se statickými daty) tak, že z nestatické třídy přesměruji požadavek na statickou třídu. Nejsem si jist, jestli je to dobré řešení, každopádně mým hlavním problémem je nekompabilita mezi klientskou verzí a plnou verzí frameworku. Jak mám tedy použít tuto knihovnu ve svém WPF projektu? Děkuji.

 
Odpovědět
11.9.2012 10:04
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:11.9.2012 10:09

Co si představuješ pod pojmem "částečné URL"? Pokud jen relativní URL, tak kvůli tomu snad žádnou knihovnu nepotřebuješ.

Nahoru Odpovědět
11.9.2012 10:09
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:11.9.2012 10:49

Samozřejmě, že myslím relativní URL - když to chceš odborně, tak dobrá - chci převést relativní URL na absolutní URL...

Tak vysvětlení pro tebe - potřebuji k tomu použít jiný framework - a ve WPF projektu mi to bude dělat problémy - ani by to snad nešlo. Takže jsem založil další projekt - a knihovna se podle mě k tomuto účelu hodí. V ní jsem vyřešil problém se statickými daty - a stačí ji jen dostat do toho WPF projektu... Takže ji potřebuji...

Editováno 11.9.2012 10:51
 
Nahoru Odpovědět
11.9.2012 10:49
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:11.9.2012 10:58

Tak tomu rozumím ještě méně. Nikdy jsem netušil, že by někdo mohl potřebovat na "částečné URL" nějaký framework. Nestačilo by zavolat nějakou standardní funkci?

Jenom stále nevím, co si představuješ pod pojmem "částečné URL". Znám jen absolutní a relativní. Znám i všechny komponenty URL, ale fakt netuším, co je to "částečné URL". Vlastně všechna URL jsou částečná. Téměř nikdo nepoužívá kompletní URL.

Nahoru Odpovědět
11.9.2012 10:58
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:11.9.2012 11:46

Napsal jsem to tam odborně, co víc chceš... Co si představuješ pod pojmem standartní funkce? Jenom potřebuji použít v projektu plný framework, ne klientský. Jak píši, nejsou kompatibilní, ...

 
Nahoru Odpovědět
11.9.2012 11:46
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:11.9.2012 11:55

Co víc chci? Aby ti na ten tvůj dotaz konečně někdo odpověděl.

Nepsal jsem o žádné standartní, ale o standardní funkci. To znamená funkci, která je součástí programovacího jazyka, ve kterém píšeš svou aplikaci, případně nějaké jeho knihovny.

Nahoru Odpovědět
11.9.2012 11:55
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:11.9.2012 12:42

Pak to tvé podmínky splňuje - jen potřebuji jiný framework - který je součástí .NET...

 
Nahoru Odpovědět
11.9.2012 12:42
Avatar
matesax
Tvůrce
Avatar
matesax:16.1.2013 20:10

Problém se mi zatím nepodařilo efektivně vyřešit. Aktuální podoba:

private string[] prefixes = { "https://", "http://", "https://www.", "http://www." };

...

public static bool UrlExists(string url)
{
        try
    {
                WebRequest.Create(new Uri(url)).GetResponse();

                return true;
    }
        catch
        {
                return false;
        }
}

public string GetAbsoluteURL(string path)
{
        this.Path = path;

        return GetAbsoluteURL();
}

public string GetAbsoluteURL()
{
        if (UrlExists(Path))
                return Path;
        else
        {
                foreach (string prefix in prefixes)
                        if (UrlExists(prefix + Path))
                                return prefix + Path;
        }

        return null;
}

Což sice funguje, ale třeba facebook.com to nenajde. Čily opravdu by se nedalo postupovat tak, jako prohlížeče postupují? Děkuji.

Editováno 16.1.2013 20:13
 
Nahoru Odpovědět
16.1.2013 20:10
Avatar
mtecl
Neregistrovaný
Avatar
mtecl:16.1.2013 21:04

Pokud to má jít po webech, tak asi do podoby http://www.... můžeš doplňovat vždycky. Z http na https se přesměrovává až podle odpovědi serveru.

_____________­________________________­_______________
Ten tvůj "web pinger" je slušná čuňárna - jestli uživatel chce na "http://www.sez­nam.cz" a napíše "seznam.cz", dohrabeš se ke správné url po pěti requestech?! Víš, že někdy může request trvat třeba i pár vteřin?
Nehledě teda na spojování stringů plusem, navíc úplně stupidně dvakrát po sobě. Divím se, že někdo jako ty, kdo dělal parser a kompiler na několik objektově orientovaných jazyků pro několik OS, klidně dělá instaci konstaního pole stringů pro každou instanci třídy. Tok kódu zásadně neřídíme pomocí try-catch! Od odborníka tvého formátu bych čekal víc, chlapče...

 
Nahoru Odpovědět
16.1.2013 21:04
Avatar
Odpovídá na matesax
Luboš Běhounek Satik:16.1.2013 22:07

Uh, ke kodu se radsi vyjadrovat nebudu, uz to udelal mtecl.

Ja bych to resil asi tak, ze bych zjistoval, zda slovo ma alespon 4 znaky (nejkratsi adresa muze byt ve tvaru "a.cz") a obsahuje nejakou tecku, ktera neni uplne na konci ani uplne na zacatku.
Pokud ano, zjistil bych, jestli za nejakou z tech "vnitrnich" tecek je string, ktery odpovida nejake existujici domene prvniho radu. Pokud ano, tak bych to slovo vzal a zacal ho zkoumat odpredu - jestli obsahuje protokol, tak uz bych ho nechal byt, jestli chybi protokol, doplnil bych klasicky http (nejsem vestec, abych hadal protokol za uzivatele, pokud ho nenapise) a pak zjistil, jestli tam je domena tretiho radu a pripadne doplnil www...

O moc lip to asi uz resit nepujde...

Editováno 16.1.2013 22:08
Nahoru Odpovědět
16.1.2013 22:07
https://www.facebook.com/peasantsandcastles/
Avatar
matesax
Tvůrce
Avatar
matesax:16.1.2013 22:12

Jde mi o to, že prohlížeče weby vyhledávají - nedosazují možné předpony...

Jinak - je to takto, jelikož https upřednostňuji...

Editováno 16.1.2013 22:13
 
Nahoru Odpovědět
16.1.2013 22:12
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:17.1.2013 8:55

Prohlížeče weby nevyhledávají. Pouze si z DNS zjistí IP adresu podle domény v URL.

Ta aktuální podoba vyhledávání je úplně špatně. Ten objekt nemá vracet URL, ale deskriptor otevřeného spojení.

Nahoru Odpovědět
17.1.2013 8:55
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:17.1.2013 12:17

Když budu vědět jak...

 
Nahoru Odpovědět
17.1.2013 12:17
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:17.1.2013 12:45

A co tedy dělá

WebRequest.Create(new Uri(url)).GetResponse();

Vůbec nepoužíváš navatovou hodnotu. Přesně to bys měl vrátit returnem.

Nahoru Odpovědět
17.1.2013 12:45
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:17.1.2013 13:03

C# sice neumím, ale viděl bych to asi takto:

private string[] prefixes = { "", "https://", "http://", "https://www.", "http://www." };

...

public WebRequest OpenURL(string path) {
    foreach (string prefix in prefixes) {
        try {
            return WebRequest.Create(new Uri(prefix + path)).GetResponse();
        } catch (WebException e) {
        }
    }
    throw new OpenURLException("Nepodařilo se otevřít " + path);
}
Editováno 17.1.2013 13:06
Nahoru Odpovědět
17.1.2013 13:03
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
lcet.m
Člen
Avatar
lcet.m:17.1.2013 14:55

Pánové, takhle to fakt nejde... Co když někdo napíše "https://face­book.com"? Chrome si s tím poradí, ale vám vyletí výjimka "Nepodařilo se otevřít /…facebook.com".

Buď si Matesex bude muset přiznat, že tohle je nad jeho síly a uživatel prostě bude url zadávat přesně, nebo to chce něco si o formátu url přečíst, rozsekat na komponenty a pak doplnit do funkčního stavu.

http://cs.wikipedia.org/…urce_Locator

 
Nahoru Odpovědět
17.1.2013 14:55
Avatar
Kit
Tvůrce
Avatar
Odpovídá na lcet.m
Kit:17.1.2013 15:02

Všiml sis těch prázdných uvozovek, které jsem připsal na začátek pole prefixes?

Nahoru Odpovědět
17.1.2013 15:02
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:17.1.2013 18:20
using System.Net;
using System;

namespace RunsWolf
{
        public class URL
        {
                private string[] prefixes = { "", "http://", "http://www." };

                public string Path { get; set; }

                public URL ()
                {
                }

                public URL (string path)
                {
                        this.Path = path;
                }

                public WebResponse OpenURL(string path)
                {
                        this.Path = path;

                        return OpenURL();
                }

                public WebResponse OpenURL()
                {
                        foreach (string prefix in prefixes)
                                try
                                {
                        return WebRequest.Create(new Uri(prefix + Path)).GetResponse();
                        }
                                catch { }

                        throw new WebException("Nepodařilo se otevřít " + Path);
                }
        }
}
 
Nahoru Odpovědět
17.1.2013 18:20
Avatar
Odpovídá na matesax
Luboš Běhounek Satik:17.1.2013 18:31

WebRequest může trvat i několik vteřin, takže pokud cíl prostě neexistuje, tak vyzkoušení všech tří předpon zabere tuším 15 sekund (pokud je defaultní timeout 5 sekund, nejsem si jistý).

Proto bych se snažil eliminovat počet pokusů na minimum a nejdříve si tu adresu zpracovat a zjistit, která část tam je a která není - nemá cenu před adresu lepit "http://", pokud už tak ta adresa začíná.

Nahoru Odpovědět
17.1.2013 18:31
https://www.facebook.com/peasantsandcastles/
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
matesax:17.1.2013 18:45

No 5 sekund to asi netrvá, jelikož nejdéle jsem čekal oněch 5 sekund - a to nemám nejrychlejší připojení... Takže těžko říci, zda rozebírat ten string nevyjde na stejno. Především - ty zadáváš absolutní URL? Právě proto to dělám - protože s ní nepočítám... Ale ještě si pořád hraji - kdo ví, na co narazím...

 
Nahoru Odpovědět
17.1.2013 18:45
Avatar
lcet.m
Člen
Avatar
Odpovídá na Kit
lcet.m:17.1.2013 19:43

Nevšim. Ale - ty prázdné uvozovky jsou teda zrovna v tom případě co jsem napsal funkční, nicméně třeba pro vstup "https://seznam.cz" už ne. Prostě tímhle způsobem je to blbost.

using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

            foreach (var tst in GetTestEntries())
            {
                var repaired = RepairUrl(tst);
                Console.WriteLine("{0} -> {1}", tst, repaired);

                PrintResponse(repaired);
                Console.WriteLine();
            }

            Console.ReadLine();



        }

        private static string RepairUrl(string uri)
        {
            if (string.IsNullOrWhiteSpace(uri))
                throw new ArgumentException();

            var protocol = "http";
            uri = uri.Trim();

            var protoInx = uri.IndexOf("://");
            if (protoInx > -1)
            {
                protocol = uri.Substring(0, protoInx);
                uri = uri.Substring(protoInx + 3);
            }

            var sb = new StringBuilder();

            sb.Append(protocol);
            sb.Append("://");
            if (!uri.ToLower().TrimStart().StartsWith("www."))
                sb.Append("www.");
            sb.Append(uri);

            return sb.ToString();
        }

        private static IEnumerable<string> GetTestEntries()
        {
            yield return "seznam.cz";
            yield return "https://seznam.cz";
            yield return "http://seznam.cz";
            yield return "www.google.com";
            yield return "http://google.com";
            yield return "facebook.com";
            yield return "google.cz#q=matesax";

        }

        private static void PrintResponse(string url)
        {
            var rq = WebRequest.Create(url);
            using (var rdr = new StreamReader(rq.GetResponse().GetResponseStream()))
                Console.WriteLine(rdr.ReadLine());
        }
    }
}
 
Nahoru Odpovědět
17.1.2013 19:43
Avatar
lcet.m
Člen
Avatar
Odpovídá na matesax
lcet.m:17.1.2013 19:46

Ono to tak dlouho netrvá, protože WebRequest není mentál a většinou přijde na chybný formát URL ještě před zkoušením requestu.

 
Nahoru Odpovědět
17.1.2013 19:46
Avatar
Kit
Tvůrce
Avatar
Odpovídá na lcet.m
Kit:18.1.2013 9:53

Hlavně je blbost doplňovat to "www.".

Už tady bylo napsáno, že by bylo lepší URL parsovat a chybějící údaje doplnit, než takto pitomě rozšiřovat.

Nahoru Odpovědět
18.1.2013 9:53
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:18.1.2013 10:13

A tohle má být co?

catch { }

Za to se vyhazuje z práce.

Jinak jako jediný přínos tvého zápisu vidím jeho zbytečné prodloužení. Zřejmě proto, aby byl méně přehledný.

Nahoru Odpovědět
18.1.2013 10:13
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na lcet.m
Kit:18.1.2013 10:18

Co vlastně dělá metoda RepairUrl? Nedala by se využít třída Uri? Přinejhorším bych URL rozparsoval, doplnil údaje a složil. Takové harakiri na řetězcích by se s tím dělat nemělo.

Nahoru Odpovědět
18.1.2013 10:18
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:18.1.2013 10:42

Proč by se za to mělo vyhazovat z práce? I já občas použiju prázdný catch.
Pokud je to něco, co nemá smysl logovat nebo nějak řešit a je to tam jen kvůli tomu, aby ti kód nevyskočil ven z funkce v případě vyjímky, pak na tom není nic špatného.

Nahoru Odpovědět
18.1.2013 10:42
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:18.1.2013 10:47

Vždycky bys měl vědět, kterou výjimku chceš zahodit. Neočekávanou výjimku bys měl vždy postoupit do dalších vrstev.

Nahoru Odpovědět
18.1.2013 10:47
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:18.1.2013 11:15

Zrovna u WebRequest.Create by mi v tomhle případě bylo celkem fuk, která z vyjímek byla vyhozena ( http://tinyurl.com/a9vmpms ), protoze realne tu muzu narazit vicemene jen na UriFormatException (maximalne pro jednu adresu z tisice jeste na SecurityException) a obe pro me znamenaji to same - tahle adresa je pro me nepouzitelna, zkousim dal.

Editováno 18.1.2013 11:16
Nahoru Odpovědět
18.1.2013 11:15
https://www.facebook.com/peasantsandcastles/
Avatar
lcet.m
Člen
Avatar
Odpovídá na Kit
lcet.m:18.1.2013 11:23

Nevím na který můj post je to odpověď, ale přesně parsování a doplnění do kompletního stavu je to, co ten můj kód dělá.

Co se týče pužití Uri vs. harakiri, třída Uri, pokud něco takového umí, uvnitř zřejmě musí dělat +- totéž. (Jen na rozdíl ode mě možná kluci z MS uměj dobře regexy, no :) ). Samořejmě je vždy lepší použít něco nativního z .NETu, ale to už se mi zas pro Matesaxe zkumat nechtělo. Každopádně jak je z toho kódu vidět, repairUrl umí doplnit všechny běžné formáty nekompletní url na formát akceptovaný WebRequest-em. Je to asi lepší, než původní Matesaxův čuninec se zkoušením špatných variant a řízeím kódu výjimkou.

 
Nahoru Odpovědět
18.1.2013 11:23
Avatar
lcet.m
Člen
Avatar
lcet.m:18.1.2013 11:24

(holky z MS amozřejmě taky, aby to bylo džendr)

 
Nahoru Odpovědět
18.1.2013 11:24
Avatar
Kit
Tvůrce
Avatar
Odpovídá na lcet.m
Kit:18.1.2013 14:32

Právě to jsem měl na mysli. Třídy a funkce, které jsou součástí jazyka, jsou obvykle tak dobře vytuněny, že by byl hřích toho nevyužít.

Nahoru Odpovědět
18.1.2013 14:32
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:18.1.2013 14:45

Vytuněny po stránce funkcí, po stránce rychlosti to občas docela pokulhává :)

Nahoru Odpovědět
18.1.2013 14:45
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:18.1.2013 15:15

Zrovna třída Uri řeší většinu z toho, co se tady matesax snaží dělat opisem. Pokud někdo vybere nevhodnou metodu nebo ji použije špatně, tak to mívá dopad nejen na rychlost, ale jazyk za to nemůže.

Nahoru Odpovědět
18.1.2013 15:15
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:18.1.2013 15:27

Před pár lety jsem zkoušel rychlosti některých komponent a třeba Funce Sort u Listu (zkoušel jsem to asi na 100 000 Stringů) byla 10x pomalejší než má vlastní implementace.

Pro nějaké malé množství dat to samozřejmě je fuk, ale pro větší balíky dat už to je pomalé a je lepší použít implementaci vlastní.

Nahoru Odpovědět
18.1.2013 15:27
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:18.1.2013 15:48

Zřejmě proto, že tvá vlastní implementace zanedbávala NLS. Který algoritmus jsi použil?

U větších balíků dat bych se s řazením asi raději spolehl na databázi. Bývá to v nich optimalizováno velmi dobře. Na objektový jazyk žádná práce nezbude, takže pak už není co optimalizovat :)

Nahoru Odpovědět
18.1.2013 15:48
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:18.1.2013 16:28

No a to jak? Jelikož já nenašel žádnou užitečnou metodu...

 
Nahoru Odpovědět
18.1.2013 16:28
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:18.1.2013 16:59

Tak jsem to nasel a je to jen 4x rychlejsi, nevim uz, jestli jsem to nezkousel predtim na jinem PC, ale mel jsem za to, ze to bylo skoro 10x :)

Ani nevim, jestli se NLS u bezneho porovnani stringu pouziva, ja to ignoruju, radim jen podle pozice znaku v (rozsirene) ASCII tabulce.
Algoritmus mam nejakej vlastni, ani vlastne nevim, jakej, ale asi to bude nejaka variace na BucketSort/Ra­dixSort.

Psal jsem to v dobach, kdy jsem zacinal s C#, ted bych to zas napsal uplne jinak :)

Nahoru Odpovědět
18.1.2013 16:59
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:18.1.2013 17:11

Radix sort je skvělý algoritmus, zejména na obrovské množství dat, ale pro obecné použití se moc nehodí. Je možné, že jsi s ním měl lepší výkon, než s obecným algoritmem.

Bucket sort vypadá také zajímavě.

V Javě/C# se NLS běžně používá a proto může být řazení pomalejší. Ale že by až tak moc? Vyzkouším. Nic to však nemění na tom, že na řazení velkého objemu dat mám raději DB :)

Nahoru Odpovědět
18.1.2013 17:11
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:18.1.2013 17:15

Už v konstruktoru Uri se přece dá použít druhý parametr, který doplní chybějící údaje.

Nahoru Odpovědět
18.1.2013 17:15
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:18.1.2013 17:43

No je tam leda tak doplnění relativní URL. Ale hlavně - ne všechny weby jedou na www... Čily stejně to budu muset nějak zjistit - jak? (Když ne pokusem načíst stránku...)

 
Nahoru Odpovědět
18.1.2013 17:43
Avatar
lcet.m
Člen
Avatar
lcet.m:19.1.2013 0:17

Nechceš nám Matesi prozradit, co přesně děláš? Browser to předpokládám nebude...

 
Nahoru Odpovědět
19.1.2013 0:17
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:21.1.2013 8:56

Je dobré do sekundární URL zadat předchozí URL.

Nahoru Odpovědět
21.1.2013 8:56
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na lcet.m
matesax:21.1.2013 9:04

No nebude - již je... :)

Aktuálně dělám UI pro konzoli - boxy, panely,... Hodlám sem vše dát.

Editováno 21.1.2013 9:04
 
Nahoru Odpovědět
21.1.2013 9:04
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 43 zpráv z 43.