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 - Filip Jirsák

Stran: 1 ... 152 153 [154] 155 156 ... 375
2296
Vývoj / Re:Java - jak vymazat z ArrayListu množinu položek
« kdy: 26. 09. 2019, 16:19:25 »
Nikde nebyla zminka o soubeznem zpracovani vice vlakny, tak je zbytecne to dovozovat. Predpokladejme pouze existujici referenci.
ConcurrentModificationException ale může vypadnout i v jednovláknové aplikaci. Připadá mi to jako dost základní znalost.

Porad predpokladate, ze jste neco dokazal, ale ja zde na foru zadny vas algoritmus nebo modifikaci meho algoritmu nevidim.
Vy zase předpokládáte, že co nevidíte, to neexistuje. Já jsem tady ale modifikaci vašeho algoritmu popisoval.

Dodejte svoji implementaci a pak se muzeme bavit dal nad benchmarkem techto dvou implementaci.
Já zase nevidím, že byste tu někde popisoval konkrétní benchmark. Původní dotaz byl velmi vágní, můžete vymyslet asi tak milion různých benchmarků, a každý vám vyjde jinak.

Akorát potvrzujete, že vám výpočetní složitost mnoho neříká. Nejdřív jste přišel s obecným tvrzením, že váš algoritmus je maximálně efektivní (tedy ze všech možných hledisek a ve všech možných případech), a teď to chcete dokazovat jedním benchmarkem.

Já bych to uzavřel tím, že váš algoritmus je pro potřeby tazatele dobrý, a do dalšího teoretizování o něm se raději nepouštějte.

2297
Vývoj / Re:Java - jak vymazat z ArrayListu množinu položek
« kdy: 26. 09. 2019, 16:11:19 »
Modifikovat ArrayList, ktery jsem nekam poslal, je naprosto spolehliva cesta do zadeke.
Přesto se to dělá – říká se tomu programování. Modifikovat ArrayList, který nikdo nepoužívá, je totiž k ničemu.


Pokud ta vzdalena strana bude mit nad arraylistem otevreny Iterator, padne to cele na hubu na ConcurrentModificationException.

Pokud bude pristupovat pres indexy, vznikne nahodny chaos, obcas prolozeny IndexOutOfBoundException.
Jinými slovy, pokud bude programátor špatně používat nástroje, bude to špatné. Nu – ano. Programátor by měl vědět, jak se ten ArrayList používá, jaké jsou s ním spojené invarianty, a podle toho se k němu chovat. Dokonce k tomu bylo vymyšleno i programovací paradigma – objektové programování. Datové struktury (zde ArrayList) se schovají dovnitř objektů, a komunikuje se s nimi jenom prostřednictvím volání metod těch objektů. V ideálním případě ty implementace těch metod zajistí dodržování těch invariantů – nebo tomu alespoň pomůže.

Problemy tototo typu osobne resim Spring Beanem instaciovanym v potrebnem scope, ktery ma ArrayList jako svuj atribut s pruslusnymi synchronizovanymi gettery plus ona metoda na odstraneni polozek pomoci pole indexu.
A tato metoda provede v ramci synchronized bloku provede vytvoreni noveho arraylistu ktery zase povesi na pristusny atribut beanu.
Ano, to je krásný příklad strukturovaného programování. Jak jsem psal, dá se to naprogramovat i objektově, strukturu ArrayList vůbec nevystavovat a přistupovat k ní pouze pomocí metod, které budou dělat právě to, co se s tím ArrayListem má dělat.

2298
Sítě / Re:Pevná IP adresa.
« kdy: 25. 09. 2019, 22:35:00 »
Tedy až na fakt, že v6 by měla být tak nějak z principu veřejná by default.
Ne by default, u IPv6 by ISP neměl o ničem jiném než veřejné IP adrese ani sekundu uvažovat. A přidělený blok by měl být i statický, s tím, že se může změnit jen po předchozím upozornění s dostatečným předstihem (aby ISP mohl udělat nějaké přečíslování sítě, pokud si to špatně naplánuje). Doufám, že IPv4 nebude škodit i po své smrti tím, že udělá standard ze „statická IP adresa za příplatek“.

2299
Vývoj / Re:Java - jak vymazat z ArrayListu množinu položek
« kdy: 25. 09. 2019, 22:21:51 »
Nerad rusim vysoce abstraktni debaty, ale IMHO bude nejefektivnejsi prosty pristup puvodniho tazatele, kdy vytvari novy arraylist kopii dat z puvodniho.

A to z toho prosteho duvodu, ze se jedna o shallow copy, na objekty uvnitr array listu (tipuju nejake beany) se nijak nesaha, pouze se vyrobi nove pole s referencema na puvodni objekty (kryci nazev arraylist), kde budou obsazeny pouze pozadovane reference.

A az se puvodni arraylist descopuje, zmizej i reference na vyhozene objekty, garbage collector to pozere.

Hotovo, veru neni potreba vyrabet selmostroje s kopirovanim nalezenych bloku.
Jednoduche, ucinne, proto mame jawu radi.
Tím, co jste napsal, jste ale nijak nedokázal, že ten postup bude nejefektivnější. Postup s přesouváním bloků totiž také jenom přesouvá reference – ono totiž v Javě ani nemáte jak kopírovat „hodnoty“ objektů, máte k dispozici jenom reference.

Postup s vytvořením nového pole je pravděpodobně implementačně nejjednodušší a pokud můžete vytvořit novou instanci Listu a tu vrátit, považoval bych takové řešení (pokud nemáme nějaké další zpřesňující podmínky) za nejlepší. Ale je spousta případů, kdy už jste referenci na ten List někam předal a potřebujete, aby se i tam pracovalo s tím promazaným seznamem – potřebujete tedy ten List promazat in-place.

2300
Vývoj / Re:Java - jak vymazat z ArrayListu množinu položek
« kdy: 24. 09. 2019, 22:56:50 »
Zadani prece nebylo jine - zadani se zmenilo v prubehu debaty a az po mem prispevku. To je velky rozdil.
Vy jste vážně hrozně naivní. Ne, to zadání nebylo jiné a nezměnilo se. Jenom bylo chybně formulované – tak, jako naprostá většina zadání.

Vyraz "vyssi sptreba pameti" se vztahuje k jiz obsazene pameti.
Ne, nevztahuje. Vyšší spotřeba paměti se vztahuje k jiným algoritmům ve stejném okamžiku běhu. A jiný algoritmus umí po skončení mazání mít méně obsazené paměti, než váš algoritmus.

A jak jiz bylo drive zmineno, je to vlastnosti ArrayListu, ze se nasledne po operaci, ktera ma vliv na jeho velikost (zmensi se), muze zavolat metoda, ktera podkladove pole prealokuje. Ale tato operace by se nemela nemela volat vzdy, ale podle pravidel implementace ArrayListu. Vsechno toto jsem jiz drive napsal. A proc takto (podle pravidel prace ArrayListu s podkladovym polem) zmenseni podkladoveho pole neresim? Protoze resim pouze onen problem odmazani prvku z listu a povazuji problem zmenseni podkladoveho pole za marginalni - neprispivam tim prece do JDK, kde bych toto jiz resil zcela zodpovedne.
Vlamujete se do otevřených dveří. Já jsem nikde nepsal, že je z tohoto pohledu váš kód špatně. Pouze jsem ukázal, že existuje paměťově efektivnější algoritmus, čímž jsem vyvrátil vaše tvrzení, že váš algoritmus je nejefektivnější možný. Mimochodem, už jenom to, že existují dva mírně odlišné algoritmy, z nichž jeden je paměťově efektivnější, ale druhý je v obecném případě správnější, svědčí o tom, že všeobecné prohlášení „nejefektivnější možný“ algoritmus je prostě nesmysl, protože – jako už jsem napsal několikrát – můžete porovnávat různé efektivity. Pokud máte problém představit si to na algoritmech, nechte si na nějaké mapě naplánovat cestu autem z bodu A do bodu B. Uvidíte, že budete mít na výběr minimálně ze dvou variant – nejrychlejší a nejkratší. Je nějaká z nich obecně nejefektivnější?

Napsal jsem, ze je "maximalne efektivni". A mel jsem tim na mysli pametovou a vypocetni slozitost - tedy ta zakladni kriteria hodnoceni algoritmu.

Pardon, ale toho, ze  jste to vyvratil, jsem si nevsiml.
Pokud jste tím myslel, že je algoritmus efektivní z hlediska obou základních kritérií, měl jste to napsat. Ono je totiž typické, že snižování výpočetní složitosti zvyšuje paměťovou náročnost a opačně. Ostatně jako v tomto případě – výpočetní složitost můžete snížit tím, že prostě alokujete nové pole o stejné velikosti a pak zkopírujete prvky, které se nemají smazat. Ale paměťovou náročnost tím zdvojnásobíte.

Maximální efektivitu jsem vyvrátil jednoduše tak, že jsem předvedl algoritmus, který má nižší výpočetní složitost, a algoritmus, který má nižší paměťovou náročnost.

Ale ne...copak native metoda je optimalizovana JITem? :-)
Nemyslím si, že by ve standardu bylo uvedeno, jak přesně má být implementována metoda System.arraycopy.

Presouvat bloky pole o male delce potencialne pres docasne jednorazove alokovane pole se vam zda v poradku?
Potenciálně přes dočasné jednorázově alokované pole může být klidně implementováno i to vaše přiřazování. To, že je v dokumentaci napsáno „chování je ekvivalentní k“ neznamená, že to tak musí být opravdu implementováno.

Tady uz pomuze pouze benchmark, jinak je to pouze akademicka debata. Tak si to prosim zkuste, jestli volani arracopy pro kopirovani prvku po jednom (resp. pro jak velke pole se to jeste vyplati a) je rychlejsi nez pure Java prirazeni prvku
do pole.
Vy se zkuste zamyslet nad tím, jak velká je pravděpodobnost, že při náhodném rozložení mazaných indexů se budou mazat všechny sudé nebo všechny liché prvky.

Ano. A ja jsem jiz drive take napsal, ze jsem na tomto foru reagoval proto, ze se mi to zadani libilo a zdalo se mi zajimave. Proto jsem prispel. Pokud bych vedel, ze bude stacit cyklicke volani ArrayList.remove(), tak bych se opravdu neobtezoval :-).
V pořádku. Mně zase přišlo zajímavé vaše sebejisté tvrzení, že vaše řešení je maximálně efektivní. Dalo se předpokládat, že nebude problém dokázat, že existuje paměťově efektivnější nebo výpočetně efektivnější řešení – nakonec se ukázalo, že existují obě.

Podstatou problemu byla prace s ArrayListem a to neni rozhrani.
To, že je použitý ArrayList, málokdy bývá vytesáno do kamene. Pokud se ukáže, že ArrayList není nejvhodnější struktura, bývá možné použít jinou strukturu. Navíc ArrayList není finální třída, takže implementaci potomka nestojí nic v cestě. Když tedy chcete slovíčkařit.

2301
Vývoj / Re:Java - jak vymazat z ArrayListu množinu položek
« kdy: 24. 09. 2019, 13:44:31 »
Jestli je to naivni nebo ne povazuji za vec nazoru. Me to zadani prislo OK. Zpochybnovat se da vse a vzdy, ale nerekl bych, ze to nekam povede.
Jenže se ukázalo, že zadání ve skutečnosti bylo jiné, než jste si myslel. Takže zpochybnění zadání v tomto případě vedlo k nalezení vhodného řešení – podle mne je to dobrý výsledek.

Tady ale vyssi spotreba pameti neni (nealokuje se zadna dalsi pamet na heapu) a procesorovy cas je take OK a srazit ho pod jeden pruchod listu s daty myslim si ze nejde. Tento algoritmus neni obecny, ale zcela konkretni a proto muzu byt konkretni i ve svem tvrzeni.
Je pozoruhodné, jak se ve vašich komentářích snoubí správný algoritmus použitý pro danou věc s absolutní neznalostí obecnějších principů. Když máte pro něco alokované větší pole, než je potřeba, vyšší spotřeba paměti tam samozřejmě je. To, že ta paměť už byla alokovaná dříve, na věci nic nemění – potřeba paměti je závislá na čase, neřeší se jenom maximum. Vašemu algoritmu možná ta nevyužitá paměť nijak nechybí, ale jiný algoritmus nebo proces by jí třeba využil – a v extrémním případě ta vámi nevyužitá paměť může způsobit třeba swapování nebo i pád aplikace, která by potřebovala alokovat další paměť, která ale není k dispozici.

Vy jste ve svém tvrzení nebyl vůbec konkrétní, právě naopak. Napsal jste, že váš algoritmus je nejefektivnější možný – tedy obecně, ve všech kritériích. Nelze napsat algoritmus, který by spotřeboval méně paměti ani algoritmus, který by spotřeboval méně procesorového času. Přitom obojí jsem vyvrátil – váš algoritmus tedy zjevně nejefektivnější možný není. Je možné, že v některých případech je nejefektivnější z hlediska procesorového času – za cenu paměťové neefektivity.

No vidite, v podstate si sam odpovidate :-). Pokud neumim predem efektivne zjistit, zda se System.arraycopy rozhodne v pripade src==dest delat docasne pole, pak je lepsi ho nepouzit a nechat JIT at to za nas zaridi.
Kdybyste použil System.arraycopy(), necháváte to na JIT. V nejhorším případě udělá to, co vy jste naprogramoval ručně. Ale může to udělat i efektivněji. Vy jste ale VM nadiktoval svůj (nejpomalejší) způsob přesouvání bloků pole, s tím už JIT nic neudělá.

Ale jako napad na zrychleni se mi to libi a je to dobry pokus. Staci indexy premapovat na velikost "diry". Pokud by se dalo zjistit, zda to pujde presunout jako blok, pak pouziti System.arraycopy() je vyhodne. Ale...umite to? A neposkodi to prenositelnost? A melo by to byt v odpovedi na tomto foru? :-)
Jasně že to umím, vždyť je to triviální. Jako blok to přesunou jde vždy. V nejhorším případě budete přesouvat bloky o délce jedna. Což by se dalo oifovat, ale to bych považoval ze typickou předčasnou optimalizaci. Přenositelnost to v žádném případě nepoškodí.

Vytvoreni noveho listu hodnot jsem jiz argumentoval drive tim, ze v zadani bylo prvky smazat, tak je mazu a nevytvarim novy list.
Já už jsem vám na to odpovídal, že je naivní očekávat, že to zadání bylo takhle přesné. Ostatně jak se později ukázalo, vytvoření nového listu bylo akceptováno jako vhodné řešení – tedy to „mazání“ byl pouze laický neprogramátorský popis, bylo to jen jinak napsáno „chci, abych měl na konci list, kde nebudou prvky se zadanými indexy“. Jedna z nejdůležitějších věcí, které je potřeba se naučit ohledně analýzy problémů, je následující: To, co někdo chce, a co tvrdí, že chce, jsou obvykle dvě naprosto odlišné věci.

Pokud bych mohl vytvorit nove podkladove pole pro stejny list, pak by to v principu bylo mozne bez vytvoreni nove instance, ale obavam se, ze to take nepujde nebo to nebude dobre reseni. ArrayList neni zase az tak "otevreny".
Proto je výhodné programovat proti rozhraním, protože pak i tu uzavřenost ArrayListu můžete snadno obejít tím, že si vytvoříte vlastní implementaci Listu, která uvnitř vymění celý ArrayList.

2302
Hardware / Re:Je zahřívání SSD důvodem k reklamaci?
« kdy: 23. 09. 2019, 22:07:12 »
To jsem si prakticky jistý, že neplatí.
Ale jistěže platí. Máte provést nějaký úkon, v jehož provedení vám ale brání ten, v jehož prospěch jej máte provést. Jako kdybyste s někým uzavřel smlouvu, na základě které mu máte něco zaplatit na účet, který vám uvede, a dotyčný by vám odmítl prozradit to číslo účtu. Nebude vaše chyba, že nezaplatíte.

Lhůta pro odstoupení od smlouvy v případě objednávky na dálku je od toho, aby suplovala možnost si zboží prohlédnout nebo vyzkoušet tak, aby objednatel na dálku nebyl znevýhodněn proti kupujícímu v kamenném obchodě. Zejméně intenzita vyzkoušení věci nesmí překročit právě tento pomyslný rámec. Např. sekačku na trávu nemůžete vyzkoušet tím, že do ní nalijete benzín a zkusíte posekat kus trávníku. V tu chvíli je to jednoznačně použité zboží a zjevně nad rámec toho, co se dá srovnat s prohlédnutím / vyzkoušením v krámě. Tam si můžete vyzkoušet např. výšku madla nebo poloměr otáčení apod.
Naše právní úprava je bohužel ke kupujícímu vstřícnější, než požadavek EU, tudíž zboží opravdu můžete vyzkoušet tak, že ho začnete používat, i když tím ztratí svou hodnotu. Viz § 1833 ObčZ. Obchodní si na to pravidelně stěžují, ale příslušná novela se myslím zase odsunula.

Tím, že reklamujete, dáváte najevo, že jste zboží přijmul, začal užívat a pro jeho vadu chcete uplatnit právo z vady výrobku. Můžete pak zvolit, jestli preferujete výrobek opravit, slevu, apod. Tuto volbu už později nemůžete změnit, resp. prodejce to nemusí přijmout.
Nikoli, reklamovaná závada může být patrná ještě před tím, než zboží začnu používat, a může mi naopak bránit ověřit si ty vlastnosti, které jsem chtěl ve čtrnáctidenní lhůtě vyzkoušet. A kritériem pro tu 14denní lhůtu ani po úpravě zákona nebude používání – protože použití ještě neznamená snížení hodnoty. Ostatně i v kamenném obchodě si mnohé zboží můžete vyzkoušet tak, že ho použijete.

a) Můžete zvolit řešení opravou - pak někdo servisním zásahem může změnit výrobek tak, že už není původní; typicky, když najdete v obuvnictví poslední pár bot, které se Vám líbí, můžete je koupit a reklamovat s požadavkem opravy. Prodejce boty pošle k ševci, který např. poškozený podpatek vymění za jiný. Bude to funkční, bude to vypada dobře, ale původní výrobek to není.
b) Pro vyřízení reklamace můžete zvolit autorizovaný servis a na prodejce se neobrátit. V tu chvíli seberete prodejci možnost, aby měl zboží zpět ve 14denní lhůtě - prodejce to potřebuje, aby mohl např. uplatnit svá práva u svého dodavatele.
Obojí je věc dohody, jak se bude řešit reklamace, ale to neznamená, že by zákazníkovi mělo být upřeno právo na odstoupení od smlouvy.

Tedy podle mého názoru reklamací se o právo odstoupit od kupní smlouvy efektivně připravíte.
Vy jste jak čeští obchodníci. Připomněl bych, že reklamace znamená, že prodejce (třeba vinou jeho dodavatele) porušil smlouvu, dodal něco jiného (v jiné kvalitě), než dodat měl. To neznamená, že zákazník otravuje a prodejce teda musí zboží opravit, aby se ho zbavil. Neznamená to ani, že chyba je na půl na zákazníkovi a na půl na prodejci. Chyba je ze 100 % na straně prodejce a z 0 % na straně zákazníka. Takže neexistuje žádný důvod, proč by měl být zákazník nějak krácen na svých právech. Zákazníkovi mělo být dodáno bezvadné zboží a on pak má 14 dní na jeho vyzkoušení a případné odstoupení od smlouvy. Pokud během té doby zboží reklamuje, měla by čtrnáctidenní lhůta začít běžet znova od začátku okamžikem vrácení zboží z reklamace (původně jsem psal jen o přerušení lhůty, ale i to je špatně), protože teprve tím okamžikem splnil obchodník svou část smlouvy (předal bezvadné zboží). To před tím byl prostě ze strany obchodníka neplatný pokus a zákazník nese nezaviněné náklady už jenom tím, že na zboží musí déle čekat a má s reklamací nějaké starosti a náklady, které mu prodejce nezaplatí. Dopravu sice prodejce má zaplatit, ale čas, který zákazník strávil tím, že zboží musel zabalit, odnést na poštu, ten mu nikdo nezaplatí.

Pokud někdo místo reklamace zboží ve 14denní lhůtě vrátí a pak ho koupí znova, okrádá sám sebe – protože náklady na vrácení platí zákazník.

Prostě reklamace a odstoupení od smlouvy jsou dvě různá jednání, mají různá pravidla a přisuzují různé zodpovědnosti (při reklamaci jde vše za prodejcem, při odstoupení do smlouvy by to správně mělo být tak půl na půl) a je špatně, pokud by reklamace bránila zákazníkovi ve využití práva na odstoupení od smlouvy.


2303
Hardware / Re:Je zahřívání SSD důvodem k reklamaci?
« kdy: 23. 09. 2019, 20:52:39 »
Pak vůbec nereklamujte a vraťte to do 14 dní. Naopak reklamací riskujete, že 14denní lhůtu prošvihnete.
Odstoupit od smlouvy může i tehdy, když nemá zboží v ruce. Zboží musí vrátit do 14 dnů od odstoupení od smlouvy, ale pokud by ho nemohl vrátit z důvodu, že zboží bylo u prodejce na reklamaci, je z obliga. Nicméně je to zajímavá díra v zákoně, bylo by logické, aby se během reklamace běh 14denní lhůty na odstoupení od smlouvy přerušil.

2304
Vývoj / Re:Java - jak vymazat z ArrayListu množinu položek
« kdy: 23. 09. 2019, 14:51:38 »
Presne zadani jsem ocekaval v prvnim prispevku tohoto fora.
To je dost naivní…

Ponechava puvodni velikost podkladoveho pole a povazuji to za dobrou vlastnost.
Já to také považuji za dobrou vlastnost, většinou to bude nejlepší řešení. Ale ne vždy – a přesné zadání neznáme.

Dovoluji si tvrdit, ze to je maximalne efektivni algoritmus proto, ze pouziva pouze pristup do 2 poli pres index a jeho narocnost neni vyssi nez narocnost jednoho pruchodu podkladoveho pole. Pokud nemam pravdu, tak by to chtelo necim konkretnim dolozit (efektivnejsim algoritmem, at to neni pouze akademicka debata).
Doložil jsem to už v původním příspěvku. Nelze o algoritmu tvrdit, že je „obecně efektivní“ – je velmi časté, že algoritmy efektivní na počet instrukcí nebo na strojový čas mají vyšší spotřebu paměti a naopak.

Původně mi šlo hlavně o to obecné tvrzení, ale když tak toužíte po tom vědět, proč váš algoritmus není ani maximálně efektivní vzhledem k době běhu, máte to mít. Na vašem algoritmu je výpočetně neefektivní to, že kopírujete prvky po jednom. Pokud bude v poli za sebou víc prvků, které se mají zachovat, je efektivnější zkopírovat („posunout“) celý souvislý blok najednou. Záleží na přesné implementaci funkce System.arraycopy, jestli dokáže celý blok posunout jedním směrem bez vytváření dočasného pole.

Dalsi uvadene zpusoby zalozene na kopirovani (neodstranuje elementy a dopredu nevime jako bude mit vysledny list velikost, pouze ze bude mensi nebo stejne velky - opet skryte kopirovani pole pri rustu velikosti vysledneho listu)
Velikost výsledného listu dopředu víme. Kopírování do nového pole by mohlo být na procesorový výkon i efektivnější, než vaše řešení – protože umožní vždy kopírovat celé souvislé bloky, nebo-li je nezávislé na efektivitě implementace System.arraycopy.

Odstranovani pro kazde volani posouva zbytek pole za odstranenym elementem.
To nikdo nezpochybňuje. Ale to, že vaše řešení je lepší, než jiné, ještě neznamená, že je maximálně efektivní…

2305
Vývoj / Re:Java - jak vymazat z ArrayListu množinu položek
« kdy: 23. 09. 2019, 08:26:04 »
Nebo:

Kód: [Vybrat]
int[] itemsToRemove = {0, 5, 1, 4};
Arrays.sort(itemsToRemove);
Arrays.reverse(itemsToRemove);

for(int i = 0; i<itemsToRemove.length; i++) {
  list.remove(itemsToRemove[i]);
}
for-each cyklus je v Javě už 15 let.

2306
Vývoj / Re:Java - jak vymazat z ArrayListu množinu položek
« kdy: 23. 09. 2019, 08:21:35 »
Algoritmu, ktery jsem uvedl v prispevku, je maximalne efektivni
Je dost odvážné tvrdit o něčem, že je to maximálně efektivní, když neznáte přesné zadání. Váš algoritmus ponechá původní velikost podkladového pole, takže není paměťově efektivní. Kdybyste to chtěl spravit zavoláním trimToSize(), bude zase výpočetně neefektivní (nevíte, zda to zmenšení pole není zbytečné).

2307
Server / Re:Odesílání mailu se zablokovaným portem 25
« kdy: 20. 09. 2019, 19:02:26 »
Chápu to správně, že je situace následující? Máte nějaký router s NATem, za ním je nějaká síť a v té síti je mimo jiné váš poštovní server. Když zkusíte telnetem navázat TCP/IP spojení s nějakým serverem v internetu (třeba poštovní server Seznamu) na portu 25, spojení se naváže. Když to samé zkusíte z jiného počítače v síti za NATem, spojení se také naváže. Ale když to zkusíte ze serveru, TCP/IP spojení se nenaváže a dostanete nějakou chybu?

Nemá náhodou ten váš poštovní server přidělenou veřejnou IP adresu, jinou, než používá váš router a NAT? To by se mi jevilo jako nejpravděpodobnější, že vám ISP ten port 25 povolil pro váš NAT a ne pro ten poštovní server.

Pokud jsou všechna ostatní zařízení i server schované za stejným NATem, a z ostatních zařízení to funguje a ze serveru ne, pak musí být problém ve vaší síti. Buď na serveru nebo na routeru/NATu – nejspíš provoz blokuje firewall. Zkoušejte to navázání TCP/IP spojení na port 25 (třeba telnetem) ze serveru a postupně si pouštějte tcpdump (filtrovaný na cílový port 25 a server, proti kterému to zkoušíte) na serveru, na LAN rozhraní routeru a na WAN rozhraní routeru. Uvidíte, kam až pak navazující spojení dorazí a kde zmizí.

Mimochodem, pokud budete mít ten server za společným NATem s jinými zařízeními v síti, zakažte ten port 25 na svém routeru pro všechna zařízení kromě toho serveru. ISP vám povolil port 25 pro celou vaši síť (pokud je schovaná za 1 IP adresou), tím pádem libovolný napadený počítač ve vaší síti, může z vaší IP adresy začít spamovat. ISP by vám ten port 25 zase zakázal a budete ho těžko přesvědčovat, ať ho znova povolí, a navíc by se vaše IP adresa dostala na blacklisty, takže i kdyby ISP ten port znovu povolil, bude mít váš server problém s odesíláním.

2308
Server / Re:Odesílání mailu se zablokovaným portem 25
« kdy: 19. 09. 2019, 15:37:36 »
jestli chci provozovat vlastní mail server, tak požádám ISP o odblokování portu 25.
Souhlas, pokud to nemá být jen jedna poštovní schránka, ale plnohodnotný server pro nějakou doménu, je potřeba se domluvit s ISP, aby odblokoval port 25. Za prvé musí správce mít takové znalosti, aby ten server dokázal provozovat a port 25 mu bylo možné „svěřit“, za druhé o tom bude ISP vědět, nebude to pro něj podezřelý provoz (jako kdyby mu najednou začaly chodit stovky e-mailů přes jeden účet) a bude mít kontakt, na koho se obrátit v případě problémů.

Spravoval jsem několik firmám Kerio mail server a nakonec postupně všichni (z vlastního rozhodnutí) přešli na Google nebo Microsoft.
Z vlastního rozhodnutí – vzhledem k tomu, jak spousta správců menších serverů konfiguruje antispam tak, že nemůže projít skoro nic, a pak dají velké provozovatele jako GMail, Outlook a v ČR Seznam na whitelist (aby jim alespoň nějaké e-maily přišly), není divu, že se postupně všechno přesouvá k těm velkým.

Druhá věc je, že ten komfort, který uživatelům nabízí GMail, nenabízí uživatelům asi nikdo v on-premise řešení – e-mailový klienti jsou horší (i když mají výhodu desktopové aplikace), služby serveru také…

2309
Server / Re:Odesílání mailu se zablokovaným portem 25
« kdy: 19. 09. 2019, 09:49:31 »
použití SMTP serveru providera bude mít problém se SPF a možná i DKIM
Pokud je to cizí doména, bude s tím mít problémy stejně. Pokud je to vlastní doména tazatele, může si SPF i DKIM nastavit, jak potřebuje.

relay přes 587/STARTLS pravděpodobně narazí na to, že jediný povolený SMTP odesílatel je ten, kdo se autentizuje, třeba Google vám v tomto scénáři odesílatele natvrdo přepíše
To záleží na konfiguraci toho serveru, přes který se e-mail rozesílá. GMail tam nezachová ani e-mail uvedený jako alias u daného účtu? A přepisuje jen obálkové odesílatele (to by bylo v pořádku), nebo i From?

Jediné rozumné řešení je VPS, tedy server, který není na domácí přípojce. Nebo přípojku nechat přepnout na nějaký firemní tarif, tam to blokování nebývá, nebo ho lze nechat vypnout.
Asi předpokládáte, že chce tazatel řešit e-maily pro celou doménu. Pokud řeší jednu nebo pár schránek, ale hlavní poštovní server je jinde, je rozumné (a správné) řešení přes mail submission posílat e-maily k odeslání hlavnímu serveru. I to řešení přes server ISP může být rozumné – pokud ISP nechce ve své síti rozesílající SMTP servery, měl by poskytnout svůj server, a pak musí dělat kontrolu přihlášený uživatel vs. doména nějak rozumně. Buď povolit vše a nebo lépe umožnit zaregistrovat, že daný uživatelský účet může v obálkovém odesílateli používat určité domény.

2310
Server / Re:Odesílání mailu se zablokovaným portem 25
« kdy: 19. 09. 2019, 09:42:57 »
A v čem je, prosím, špatná má rada https://forum.root.cz/index.php?topic=21846.msg317076#msg317076 - Návod na využití postfix x google účet s komentáři.
Za prvé to vyžaduje mít účet u Googlu a posílat přes něj všechny e-maily. To ne každý chce. Zároveň platí ta stejná otázka, jakou napsal McFly o Seznamu –  je otázka, co vše GMail kontroluje ve vazbě na přihlašovací údaje, a jak se to případně změní v budoucnosti. A dále je to jen návod, jak něco konkrétního zprovoznit, ale vůbec jste nepopsal proč a jak to funguje. Takže pořád bylo spoustu prostoru vedle té vaší rady poskytnout tazateli i další užitečné informace.

Stran: 1 ... 152 153 [154] 155 156 ... 375