
BG Development · За реклама · За контакти |
![]() ![]() ![]() ![]() ![]() |
Здравей! ( Включване | Регистриране ) |
thrawn | Публикувана на: 28-04-2025, 16:15 |
![]() Мнения: 1 Преглеждания: 59 |
ICS се активира на VPN-а и много трябва да се внимава с маските - проблемът ми се указа именно в тях/ |
Форум: Мрежови комуникации и технологии · Преглед: #502457 |
thrawn | Публикувана на: 28-04-2025, 14:59 |
![]() Мнения: 1 Преглеждания: 59 |
Цял ден се мъча с едно черчаве, VPN сървър (wireguard) с 10-тина клиента. Комуникацията клиент сървър върви перфектно, но ми трябва комуникация peer-to-peer. Маршрутизирането от страна на клиентите е ОК. С wireshark виждам, че пакетите се доставят до VPN сървърът, но до там. Няма рутиране към съответния peer. Същата постановка, под linux работи с net.ipv4.ip_forward=1 Аналогът под windows е ICS. Самата машина има един физически интерфейс и vpn-а. На който и от двата да активирам ICS рутирането го няма (не знам, на кой от двата трябва да го пусна реално, затова налучквам, но...). Някой ако е правил подобна конфигурация под windows нека удари едно рамо... |
Форум: Мрежови комуникации и технологии · Преглед: #502455 |
thrawn | Публикувана на: 27-04-2025, 08:42 |
![]() Мнения: 68 Преглеждания: 2213 |
Java те задължава или да обработиш изключението или да декларираш, че методът ти хвърля изключение. Така оставяш друг да го обработи. Отделно имаш runtime изключения които мижеш да не обработваш (приема са, че трябва да доведът до срив на приложението). Те обикновено се оставят на VM но нищо не ти пречи и тях да обработиш. Самата обработка на изключения в много случаи се свежда само до try блок. Методът продължава да хвърля изключение, но добавяш finally логика, която да се изпълни независимо от това как завърши изпълнението (има и синтактична захар - try with resource, която се ползва за затваряне на ресурси). Иначе, ръчно трябва да си декларираш целия път по който ще се озовеш от място Х в catch блок. Това е причината да няма изненади. Ясно се декларира, че искаш това да се случи точно така (това е една от причините, някои хора да не харесват езика). Самата обработа на логиката в catch / finally блоковете няма как да става автомтично, трябва да кажеш точно какво искаш да стане (освен в try with resource, там се извиква close на ресурсът във finally блок) |
Форум: Други · Преглед: #502427 |
thrawn | Публикувана на: 26-04-2025, 19:00 | ||||
![]() Мнения: 68 Преглеждания: 2213 |
Не казвам да пишеш на всяко ниво try/catch а там където има смисъл да го обработиш. Да речем, пишеш в база данни, в транзакция. Нещо се дъни (дублираш ключ, невалидна стойност...) и получаваш изключение. Тъпо е да го хвърлиш чак в main, нали? Обработваш го веднага (обикновено с rollback, правиш лог запис...) и хвърляш друго изключение (или същото) на извикващата функция с описание (което използваш за да покажеш съобщение за грешка на потребителя например). Друг пример - четеш от файл. Ако по време на четеното се получи грешка (изключение) го обработваш за да затвориш самия файл. Пък поле, ако искаш го подхвърляй на горе. Ако си стигнал обаче до края на файла не получаваш изкючение а статус -1 който използваш за flow control, спираш да четеш, освобождаваш ресурсите и минаваш към обработка на данните. В java когато нещо хвърля изключение си длъжен или да го обработиш на място или да декларираш, че методът хвърля изклчението. По този начин принуждаваш този който го ползва да го обработи (демек, няма как да не разбере, че методът може да се провали точно с това изключение) или също да декларира че неговия метод хвърля изключението и така чак до main. Именно липсата на тази рестрикция е причината да водите спора. Нещо в кода може да мете някакво изключение и безусловно да се озовете някъде оставяйки приложението в неопределено състояние. |
||||
Форум: Други · Преглед: #502422 |
thrawn | Публикувана на: 26-04-2025, 16:47 |
![]() Мнения: 68 Преглеждания: 2213 |
Цялата ви драма с тия изключения е, че не сте длъжни да ги обработвате. Затова се зарязват необработени (по малко писане), не сте длъжни да ги декларирате (не се знае от къде какво може да гръмне) което води до тия скокове на горе по-веригата, до място на което някой е решил да хване нещо. Основната разлика между изключението и връщан статус за грешка е, че изключението не бива (не, че не може) да се ползва за логически операции (flow control), докато върнат статус за грешка може да се използва в логически оператор (то и това му е идеята). Така че, въпреки приликите двете не са директно заменяеми и много често се налага да се ползват успоредно (пиша го от позицията на човек пишещ основно на java, демек принуден да ползва/обработва изключения почти на всеки ред) |
Форум: Други · Преглед: #502416 |
thrawn | Публикувана на: 28-03-2025, 20:14 |
![]() Мнения: 5 Преглеждания: 605 |
Малко късно ама... Дразни ме, че вдига теми на години с тъпи коментари, уж по темата. Дори съм сигурен, че това е един и същи човек, който видя, че номерът мина и почна периодично да прави регистрации и да пуска по едно две безсмислени мнения. |
Форум: За Форума · Преглед: #502334 |
thrawn | Публикувана на: 28-03-2025, 20:10 |
![]() Мнения: 5 Преглеждания: 550 |
Предложението ти има резон да се имплементира, но така се вкарваш в по-голямо приключение, да следиш регистрираните потребители, сесии и т.н. Като цяло, не е философия но ако не ти трябва точно това, не се занимавай. Решението е да използваш стандартните функции за оторизация на web сървърът. Имаш basic ауторизация (име и парола) която би може би, ще е точно това което търсиш. Единствения проблем при нея е, че протоколът (http) не поддържа функция изхд. |
Форум: Други · Преглед: #502333 |
thrawn | Публикувана на: 26-03-2025, 10:39 |
![]() Мнения: 5 Преглеждания: 605 |
Защо не им разкарате подписите на тия спамери? |
Форум: За Форума · Преглед: #502303 |
thrawn | Публикувана на: 10-03-2025, 20:11 |
![]() Мнения: 35 Преглеждания: 5510 |
Тоя коментар не го разбрах... |
Форум: Разни · Преглед: #502231 |
thrawn | Публикувана на: 10-03-2025, 19:59 |
![]() Мнения: 35 Преглеждания: 5510 |
Всичко е на телефона, карти, електронно банкиране, е-токен... Плюс няколко клиента за двуфакторна автентикация. Истинския въпрос е, какво става ако телефона загине. |
Форум: Разни · Преглед: #502229 |
thrawn | Публикувана на: 06-03-2025, 11:21 |
![]() Мнения: 13 Преглеждания: 7406 |
Няма слънце, няма ток. Който е инвестирал в батерии продава. Останалите рупат джанки. Демек, ако ще печелиш, трябват инвестиции. Не разбрах само, защо темата е в тоя раздел? Или пък целта е да се направи някакво тулсче да следи слънчевата активност... |
Форум: Разни · Преглед: #502162 |
thrawn | Публикувана на: 26-02-2025, 07:44 |
![]() Мнения: 7 Преглеждания: 719 |
Цялост на данните, означава, че данните са пълни (няма изчезнали данни и всичко е логически свързано). Една от основните задачи при проектирането на базата данни е именно да се гарантира цялостта на данните които се съхраняват в нея. В случая ти говориш за 3 основни групи от данни специфични за всеки потребител. След като махнеш дефиницията на тези три типа данни от базата данни, то няма какво да ти гарантира, че ключовете с които ги асоциираш в нея са правилни (както сам си открил, в случай на изтриване). Проблемът обаче не е само с триенето. Имаш и редактиране. Това значи, че губиш основните ключове гарантиращи цялостта на данните. С други думи, решението ти е много неподходящо защото води до лош дизайн на базата данни. Да не говорим, че не дава никакви реални ползи. |
Форум: PHP/Perl/Python/ASP · Преглед: #502124 |
thrawn | Публикувана на: 25-02-2025, 12:50 |
![]() Мнения: 7 Преглеждания: 719 |
Така губиш основните ключове които ти гарантират цялостта на данните в базата данни. |
Форум: PHP/Perl/Python/ASP · Преглед: #502118 |
thrawn | Публикувана на: 25-02-2025, 11:57 |
![]() Мнения: 7 Преглеждания: 719 |
Какво ти пречи да ги прочетеш веднъж от базата данни и да си ги съхраняват в паметта? Това се нарича кеширане. Но трябва да съобразиш, че кешът трябва да се актуализира при промяна на съответните данни. |
Форум: PHP/Perl/Python/ASP · Преглед: #502116 |
thrawn | Публикувана на: 25-02-2025, 11:07 |
![]() Мнения: 7 Преглеждания: 719 |
Обектите за които говориш, са част от модела (данните) с които работи приложението. С други думи, мястото им е там където приложението съхранява данните си (в базата данни). |
Форум: PHP/Perl/Python/ASP · Преглед: #502114 |
thrawn | Публикувана на: 22-02-2025, 15:56 |
![]() Мнения: 15 Преглеждания: 5917 |
Под зелени нишки, имаш в предвид асинхронност въру една работна нишка? Като цяло, това не е някакъв проект по който работя сериозно. Просто си играя, за да видя за какво иде реч в края на краищата. За сега като цяло ми харесва възможността за синхронизация между отделните нишки която се получава на готово. Не че е проблем да го направиш и ръчно, но с тая библиотека става с два реда код. Пускаш задача в друга нишка (или където искаш) и резултатът ти идва в UI-а (или където го искаш) без особено нагъване, когато е готов. А най-хубавото е, че това върви и в андроид (а той, милинкия е претенциозен). Не ми харесва само фиксацията в това реактивно програмиране. Между другото, щото последните години ползвам основно FX, гледам че плъгина за FX не поддържа rxjava3 та си пуснах собствен scheduler който да изпълнява задачите на FX нишката. То реално само това ми трябва от него. |
Форум: Java/Kotlin · Преглед: #502105 |
thrawn | Публикувана на: 22-02-2025, 08:37 |
![]() Мнения: 7 Преглеждания: 2108 |
Ами в сайтът им пише, че работиш под името на фирмата/групата. Също така пише, че от персонален акаунт можеш да направиш бизнес но от бизнес на зад не може да минеш. |
Форум: Разни · Преглед: #502101 |
thrawn | Публикувана на: 22-02-2025, 06:54 |
![]() Мнения: 7 Преглеждания: 2108 |
И като избереш физическо лице си пак в началото - трябва да потвърдиш самоличността си (проне при гугъл с документ за самоличност, със снимка) и след това да потвърдиш адрес (пак с документ). Така ще получил бизнес акаунтът като физическо лице (но ще можеш да ползваш функциите които не са налични в обикновените акаунти). С други думи, не печелиш това което искаш (всъщост, само предпоагам, но цялата идея на това е, че трябва да се знае точно кой седи зад съоъветния акаунт, ако щеш дори само заради данъчните). Можеш да пробваш бизнес акаунт със служебен булстат. Така ще минеш за фирма, но пък името на фирмата което ще получиш от регистърът ще са трите ти имена. Ако в paypal позволят да го промениш (било трябвало да може) ще получиш псевдонимът който искаш. Но пък справка в регистъра по булстат ще даде отново имената и адреса ти. Трети вариант, регистрираш фирма, но отново проверката и ще даде данните на управителя и собственика на капитала. Плюс е, че адресът на управление може да не е личния ти адрес. Но пък учредителите актове (макар и цензурирани са публични и пак адресът ти е видим, ако си сред управителите). Като цяло, най-вероятно няма как да останеш анонимен защото целта е именно това са не се случи. |
Форум: Разни · Преглед: #502099 |
thrawn | Публикувана на: 21-02-2025, 18:07 |
![]() Мнения: 7 Преглеждания: 2108 |
Предполагам, че бизнес акаунтът ще иска фирма с която да се регистрира (и съответно да докажеш, че е твоя). Тогава "псевдонимът" е името на фирмата. Така че, пак ще трябват доста данни. А от фирмата се стига до теб, освен ако не е регистрирана в офшорна заона. Същия казус го имах с google. Там също искаха потвърждаване на самоличност и имам спомен, че за фирми беше също разправия и за това избрах регистрация на физическо лице. Тогава се опитах да мина със шофьорска книжка, но на някой от етапите се оказа, че не я приемат и пак стигнах до лична карта. Та като цяло, ако искаш да ползваш услугата спазват правилата. |
Форум: Разни · Преглед: #502092 |
thrawn | Публикувана на: 21-02-2025, 14:01 |
![]() Мнения: 15 Преглеждания: 5917 |
Е, то и аз не съм програмист, така че сме двама ![]() |
Форум: Java/Kotlin · Преглед: #502087 |
thrawn | Публикувана на: 21-02-2025, 13:06 | ||||
![]() Мнения: 15 Преглеждания: 5917 |
Тук става дума за принципен проблем. Не получаваш нищо в повече или по-малко. Просто подходът е различен. В императивното програмиране сам си взимаш данните докато в реактивното чакаш някой да ти ги сдъвче и изплюе на готово ![]() |
||||
Форум: Java/Kotlin · Преглед: #502084 |
thrawn | Публикувана на: 21-02-2025, 12:50 |
![]() Мнения: 15 Преглеждания: 5917 |
В примерът ти се разчита на това, че httpClient е реактивен (предполагам) и сам ще си прихване и емитне изключенията. Защото ако не е така, то ще има проблем при липса на връзка да речем. Иначе, в ревюто което си дал (точно линкнатите слайдове с map) наистина си ползват императивна логика. За съжаление, при представянето на обсървърът са свели примерът до println. Но като цяло почва да ми се затвърждава мнението, че генерализирането на темата е погрешно. Имай в предвид, че това което давам като примери е гола работна постановка (набита в статичен контекст). В крайна сметка, api-то ще следва същия синтаксис като потребителя ще трябва да посочи поне един от трите манипулатора onResponseOk, onResponseError и onError (е, плюс посочване на remote интерфейс и подаване на съответните параметри). Реално от вън няма да се вижда конкретната имплементация. |
Форум: Java/Kotlin · Преглед: #502082 |
thrawn | Публикувана на: 21-02-2025, 08:45 | ||||
![]() Мнения: 15 Преглеждания: 5917 |
Ами RxJava е имплементация за java на реактивното api на reactivX. RxJS съответно е имплементацията за javascript. Та двете би следвало да са почти еднакви (с дребни езикови различия де). Така че, каквото е валидно за javascript в rxjs би трябвало да е валидно и тук (та java практически не ти трябва. Спокойно можеш да даваш решение/я на javascript). Генерирането на самия Observable обект не е интересно (спецификата, че става дума за web api). Емитнатите данни могат да са дори прости числа и да трябва да предприемем различно действие в зависимост от самото число. Основния момент тук е, че се въвежда терминът "реактивно програмиране" и съответно се почват някакви разпалени обяснения как if/else, for ... не бива да се ползват в контекстът на реактивното програмиране. Съответно почват да се появяват подобни тривиални проблеми (Може би, от липса на опит, знам ли. Затова и пуснах темата). Та като се замисля, когато в java въведоха stream апи-то (синтактично няма разлика с реактивното апи) коментирахме точно итерирането на потоци. Та тогава, ако не се лъжа Stilgar каза, че като свикна да го ползвам ще ми е търсене да пиша цикли, и беше прав. Сега почти винаги го ползвам. Затова, ако направим аналогия между двете, то избягването на подобни структури се прилага само при модифициране и/или трансформиране на потока или данните в него. Докато обработката на самите данни (било в крайните точки, или в междинните) може да се извърши както е по-удачно. А причината за различните мнения е, че хората които са прекалено ентусиазирани от самото апи генерализират докато хората с опит (може би) казват, че няма лошо да се ползва императивен стил на програмиране във функциите. Това е първия вариант по двата начина
--- Що се касае до самото api, то изключенията са в следствие на проблеми я по връзката, я с парсването на данните. Абе грешки. Докато http статус кодовете, въпреки че, носят информация за грешка то не винаги се третират като такава. Да речем 401 ще предизвика влизане в процедура по автентикация (логин). 404 при заявка за търсене не се третира като грешка а отговор няма данни (вместо празен обект). 500 в повечето случаи носи информация за настъпено ограничение в базата данни (нещо вече съществува, друго не може да бъде изтрито защото се използва). И въпреки, че е възможно всичко това да се вкара в изключения то употребата на try/catch за управление на бизнес логика в приложение е много неудачно. Всичко дискутирано до тук приема за успешни заявки с код 200 - 299 |
||||
Форум: Java/Kotlin · Преглед: #502080 |
thrawn | Публикувана на: 20-02-2025, 10:30 | ||||
![]() Мнения: 15 Преглеждания: 5917 |
Същия подход го приложих, като се абонирах с мой observer.
И самата фабрика
Всичко е ОК, само дето това е пряко повторение на първия вариант, но с повече код... Ако някой има идеи как е редно да се подходи да казва ![]() |
||||
Форум: Java/Kotlin · Преглед: #502068 |
thrawn | Публикувана на: 20-02-2025, 09:58 | ||||
![]() Мнения: 15 Преглеждания: 5917 |
Следващ опит, който изглежда малко по-чисто разчита на мой оператор
Но пък самата имплементация на оператора използва if/else
|
||||
Форум: Java/Kotlin · Преглед: #502067 |