Wątek przeniesiony 2022-06-07 17:52 z Off-Topic przez Riddle.

Pomysł - Ochrona pingów przy zmianie nicka

2

Aktualne pingi - wspomnienia użytkowników, działają przez dopasowanie wyrażenia do istniejącego nicka, tzn pisząc np

Cześć @cerrato

zawołamy @cerrato.

Ma to taką wadę, że zmiana nicka, nawet najdrobniejsza sprawia że pingi przestają być pingami.

Pomysł

Mamy teraz na forum w edytorze autocomplete, więc czemu nie wprowadzić drobnego feature'a do autocomplete'a. Kiedy ktoś używając autocomplete doda wspomnienie użytkownika, dodamy zamiast tego coś takiego

Cześć @cerrato#90224
Cześć @{Adam Boduch}#123

Czyli znak # oraz ID tego użytkownika. Należałoby też zrobić odpowiedni parser w coyote, że aktualne pingi, czyli:

@user
@{user user}

działają tak jak działały, ale dodatkowe formaty, czyli:

@user#123
@{user user}#123

teraz również zaczynają być brane pod uwagę jako nick, tylko wtedy użytkownik byłby znajdowany po id, zamiast po nazwie użytkownika.

Oczywiście, możnaby wtedy wpisać nazwę jednego usera (TomRiddle - id 43956, cerrato - id 90224), więc mógłbym wpisać @TomRiddle#90224. Wtedy owszem, możemy coś takiego wpisać, ale renderer w takim wypadku też powinien pokazać użytkownika po id, więc taka treść:

Cześć @TomRiddle#90224

pokazałaby i tak

Cześć @cerrato

Teoretycznie możnaby też po prostu napisać @#90224, skoro i tak tekst pomiędzy @ i # się nie pokaże.

Czemu, po co

Ma to taką zaletę, że wtedy nawet jak ktoś zmieni nick, to pingi dodane w ten sposób nadal by działały, i by się "automatycznie" poprawiały na forum.

Oczywiście jak ktoś wpisze z palca @TomRiddle bez #, to taki nick i tak zostanie stary. Ale łatwo możnaby zrobić że autocomplete sam dodaje odpowiedni #.

Opinie?

2

To jakieś karkołomne rozwiązanie. Jak zmieni się nazwa użytkownika, to wszystkie pingi powinny się automatycznie zaktualizować, zamiast dezaktywować. To tak samo jak nazwa użytkownika podana jako autor posta.

5
gajusz800 napisał(a):

To jakieś karkołomne rozwiązanie. Jak zmieni się nazwa użytkownika, to wszystkie pingi powinny się automatycznie zaktualizować, zamiast dezaktywować. To tak samo jak nazwa użytkownika podana jako autor posta.

Not gonna happen. Za dużo rzeczy się może popsuć podczas takiego automatycznego replace'a. Modyfikacja treści posta dla userów zmieniających swoje nicki nie wchodzi w grę.

0

Przecież chyba nie da się zmieniać nicków.

2

Owszem, da się, musisz tylko do moderatora napisać.

0

Jak?

0

No ale wydaje mi się, że o ile pomysł jest super, to nie czaję idei pisania dwóch informacji (które mogą być sprzeczne) - czyli zarówno nazwy, jak i ID.
Dałbym jak już samo ID, a potem - zarówno na poziomie edytora, jak i renderowania posta, powinno zostać ono zamieniane na aktualną nazwę usera.
Opcja z trzymaniem dwóch informacji przy przywołaniu jest słaba, tak samo jak obecnie stosowany mechanizm.

0

Ogólnie ten nowy pomysł wymuszałby poleganie na podpowiadaniu, którego nie ma przy pisaniu komentarzy.

1
Manna5 napisał(a):

Ogólnie ten nowy pomysł wymuszałby poleganie na podpowiadaniu, którego nie ma przy pisaniu komentarzy.

Ale będzie, za kilka miesięcy. Pracuję nad wersją nowego edytora do komentarzy.

Poza tym, nie wymusza nic. Jeśli ktoś nie wpisze # to po prostu będzie działało tak jak teraz.

3

Nah, jeszcze kilka takich pomysłów i posty będą wyglądały jak program w Perlu.

0
Riddle napisał(a):
gajusz800 napisał(a):

To jakieś karkołomne rozwiązanie. Jak zmieni się nazwa użytkownika, to wszystkie pingi powinny się automatycznie zaktualizować, zamiast dezaktywować. To tak samo jak nazwa użytkownika podana jako autor posta.

Not gonna happen. Za dużo rzeczy się może popsuć podczas takiego automatycznego replace'a. Modyfikacja treści posta dla userów zmieniających swoje nicki nie wchodzi w grę.

Nie bardzo rozumiem. Przecież autor cytatu np chyba jest podmieniany. Autor posta też. Czemu ping nie może być? Tzn nie twierdzę że nie masz racji, ale trochę to zaskakujące z perspektywy kogoś, kto nie analizował jak to działa od środka. Czy id użytkownika się zmienia, a co za tym idzie link to profilu z pinga? Autor posta to też link, więc nie wiem co to za różnica.

Jeżeli to problem, to już lepiej chyba zostawić jak jest moim zdaniem.

2
gajusz800 napisał(a):

Nie bardzo rozumiem. Przecież autor cytatu np chyba jest podmieniany. Autor posta też. Czemu ping nie może być? Tzn nie twierdzę że nie masz racji, ale trochę to zaskakujące z perspektywy kogoś, kto nie analizował jak to działa od środka

No oczywiście mógłbyś zrobić że jak ktoś zmienia nick z @TomRiddle na @Riddle to robisz replace(), ale nie każde wystąpienie tego podciągu to jest od razu ping. Może ktoś napisać kod `inline`, może dodał fragmentu kodu, np w Perlu lub w SQL wartości z @ mają specjalne znaczenie. Do tego dochodzą dwie formy pingów, tzn @TomRiddle oraz @{TomRiddle}.

Więc nie. Podmiana treści w postach nie wchodzi w grę.

0

@Riddle:

No oczywiście mógłbyś zrobić że jak ktoś zmienia nick z @TomRiddle na @Riddle to robisz replace(), ale nie każde wystąpienie tego podciągu to jest od razu ping.

Szukasz edge casów, a pewnie takich @TomRiddle w np. bloku z kodem jest 5 max na 100k postów.

Więc nie. Podmiana treści w postach nie wchodzi w grę.

Jeżeli edytor forumowy potrafi wykrywać poprawnie te scenariusze

@Riddle:

@Riddle

to backend też może, trzeba tylko wykorzystać informacje z parsera

1

Dużo komplikacji... a może by tak dalej pamiętać w bazie stary nick po zmianie, nigdzie go nie pokazując i używać go tylko do rozpoznawania pingów. W sensie nie robimy żadnego replace we wszystkich postach tylko po napotkaniu pingu ze starym nickiem wyświetlamy nowy nick zamiast oryginalnego.

0
Manna5 napisał(a):

Dużo komplikacji... a może by tak dalej pamiętać w bazie stary nick po zmianie, nigdzie go nie pokazując i używać go tylko do rozpoznawania pingów. W sensie nie robimy żadnego replace we wszystkich postach tylko po napotkaniu pingu ze starym nickiem wyświetlamy nowy nick zamiast oryginalnego.

Nie, bo gdyby ktoś zmienił A na B, a potem ktoś C na A, to się posypie.

PS: Zauważ że to rozwiązanie które podałeś, jest w zasadzie tożsame z moim, tylko w Twoim przypadku id jest starym nickiem.

0

Przy takiej nietypowej sytuacji będzie dużo więcej problemów niż pingi: dezorientacja społeczności, podejrzenia o multikonta itd - powinna być więc ogólnie zabroniona.

0
Manna5 napisał(a):

Przy takiej nietypowej sytuacji będzie dużo więcej problemów niż pingi: dezorientacja społeczności, podejrzenia o multikonta itd - powinna być więc ogólnie zabroniona.

To nadal jest dodatkowe założenie.

Plus. Jak ktoś zmieni nick dwa razy, to co wtedy, będziesz pamiętał dwa nicki? A jak trzy razy to trzy? Nie, to jest średnie rozwiązanie. id usera jest lepsze IMO.

0

No to w takim razie nie podoba mi sie. Jezeli ktos zmieni nick, to obecnie zmienia sie on:

  • w tresci posta (np autor cytatu)

  • w naglowku posta: autor posta

  • w opisie posta (np ze edytowa post)

    Jedyne logiczne rozwiazanie, to zeby ping zmienial sie analogicznie. Jezeli to niemozliwe, to niech lepiej sie dezaktywuje. Bo ta propozycja to jakies karkolomne rozwiazanie. No chyba ze ten id stawi sie tam automatycznie. Tylko nie wiem po co to ma byc widoczne dla uzytkownika? Przeciez ping i tak ma przypisany id, wiec wiadomo jaki on jest, jest w href. A zmiana nazwy uzytkownika nie powoduje zmiany id.

    No ja nie za bardzo rozumiem problem, ale ok.

0
gajusz800 napisał(a):

Jedyne logiczne rozwiazanie, to zeby ping zmienial sie analogicznie. Jezeli to niemozliwe, to niech lepiej sie dezaktywuje. Bo ta propozycja to jakies karkolomne rozwiazanie. No chyba ze ten id stawi sie tam automatycznie. Tylko nie wiem po co to ma byc widoczne dla uzytkownika? Przeciez ping i tak ma przypisany id, wiec wiadomo jaki on jest, jest w href. A zmiana nazwy uzytkownika nie powoduje zmiany id.

Nie byłby widoczny dla czytających post, tylko dla piszących.

1

@Riddle:

Not gonna happen. Za dużo rzeczy się może popsuć podczas takiego automatycznego replace'a. Modyfikacja treści posta dla userów zmieniających swoje nicki nie wchodzi w grę.

No to napisze się testy, nie takie rzeczy ludzie potrafią zakodować,

a jako że nick można zmienić jedynie z pomocą moda, to nikt nie będzie abusował.

Tylko proszę bez żadnych regexów.

1
gajusz800 napisał(a):

No to w takim razie nie podoba mi sie. Jezeli ktos zmieni nick, to obecnie zmienia sie on:

  • w tresci posta (np autor cytatu)

  • w naglowku posta: autor posta

  • w opisie posta (np ze edytowa post)

    Jedyne logiczne rozwiazanie, to zeby ping zmienial sie analogicznie.

Autor cytowanego fragmentu posta to się chyba właśnie nie zmienia (a na pewno nie dla postów napisanych w 2020). Jak znasz poprzednie nazwy niektórych użytkowników to sobie wpisz ich stare nicki w wyszukiwarkę i sam zobaczysz,
Zmienia się w nagłówku posta (autor) i w opisie (edycja), bo - surprise, surprise - w tych dwóch przypadkach w bazie siedzi właśnie ID użytkownika, a nie jego nazwa w momencie stworzenia/edycji posta.

Jak dla mnie propozycja @Riddle z technicznego punktu widzenia jest spoko i to jedyne sensownie rozwiązanie (z uwagą @cerrato czy jest sens wtedy trzymać obie informacje). Do zastanowienia się tylko czy warto komplikować.

Ty @gajusz800 chyba piszesz o podmianie tekstu bezpośrednio w postach i to jest dopiero karkołomne rozwiązanie, a nie to co proponuje @Riddle.

0

to chociaż @90224, zerwać backward compatibility i zrobić update raz ;)

0

chyba piszesz o podmianie tekstu bezpośrednio w postach i to jest dopiero karkołomne rozwiązanie

Tak jeszcze mała uwaga odnośnie działania systemu cenzury - który np. filtruje/poprawia niektóre literówki czy wulgaryzmy. Aktualnie działa to tak, że w bazie jest zapisany post oryginalny, nie ma żadnej ingerencji w jego treść, a dopiero podczas jego wyświetlania zostaje zastosowana cenzura. Dlatego wydaje mi się, że zrobienie tego analogicznie - czyli opcja z trzymaniem odwołania do usera po jego ID a nie nicku, a dopiero zamiana ID 90224 na @cerrato podczas przesyłania treści do przeglądarki jest najlepsza.

2

Tak sobie spojrzałem na tego twitta od @Koziołek

Jeżeli pole w klasie oznaczonej @Entity
ma typ String, to jakiego typu argumenty przyjmuje setter i co zwraca getter?
.
.
To oczywiste!
.
.
.
.
.
Set<Long>
#germańskiprogramista

I naszła mnie myśl że przypadkowo jest wołany użytkownik @Entity a jak by kiedyś użytkownik @Entity zmienił nazwę na @PostConstruct i byłaby podmiana nazw użytkowników w kodzie to sens twitta/posta zostałby zmieniony, bo nie chodzi tu o użytkownika @Entity (który zmienia nazwę na @PostConstruct) tylko o adnotację @Entity (która nie zmienia nazwy). Niby na Coyote powinno się pisać @Entity a nie @Entity jak chodzi o adnotację, ale ile razy zostało to złamane XD

0
KamilAdam napisał(a):

I naszła mnie myśl że przypadkowo jest wołany użytkownik @Entity a jak by kiedyś użytkownik @Entity zmienił nazwę na @PostConstruct i byłaby podmiana nazw użytkowników w kodzie to sens twitta/posta zostałby zmieniony, bo nie chodzi tu o użytkownika @Entity (który zmienia nazwę na @PostConstruct) tylko o adnotację @Entity (która nie zmienia nazwy). Niby na Coyote powinno się pisać @Entity a nie @Entity jak chodzi o adnotację, ale ile razy zostało to złamane XD

No tak, dlatego zmiana ciągów @\w+ nie miałaby sensu. Sam podałeś przykład kiedy to ssie, i na pewno jest więcej przykładów.

Chociaż z drugiej strony, jeśli ktoś pisze @Entity, to przecież to jest zawołanie usera. Jeśli chciał pisać o adnotacji to powinien napisać `@Entity`, w tick-markach.

1
Riddle napisał(a):

Opinie?

Właśnie miałem to zaproponować widząc ile linków zepsułeś swoją zmianą nicka.

Riddle napisał(a):
gajusz800 napisał(a):

To jakieś karkołomne rozwiązanie. Jak zmieni się nazwa użytkownika, to wszystkie pingi powinny się automatycznie zaktualizować, zamiast dezaktywować. To tak samo jak nazwa użytkownika podana jako autor posta.

Not gonna happen. Za dużo rzeczy się może popsuć podczas takiego automatycznego replace'a. Modyfikacja treści posta dla userów zmieniających swoje nicki nie wchodzi w grę.

Moim zdaniem to jedyne rozsądne rozwiązanie, nie żadne magiczne @abc#123 (zresztą ktoś może mieć takiego nicka) ani w żadnym przypadku nie update na bazie tylko prosta podmiana w dwóch miejscach - przy zapisywaniu pingi powinny być podmienione na refkę do usera po id i tak trzymane w bazie, przy odczycie (edycji / wyświetleniu) powinny być zamieniane z powrotem na nicki. Raczej nie ma tu dużo do popsucia, natomiast nie trzeba by było zmieniać edytora.

Alternatywnie też proste rozwiązanie - zakładając że w bazie nadal jest trzymana historia zmian nicków to można zwykłą zmianą zapytania do bazy zrobić podmiankę nawet po stronie klienta biorąc pod uwagę datę ostatniej edycji posta. Takie rozwiązanie zadziałałoby też wstecz bez zmian w edytorze / bazie danych. Trzeba by było tylko trzymać informację od kiedy do kiedy login był używany w bazie. Dodatkowy plus taki że stare posty które gdzieś tam miały @costam czy @Entity nie zaczną nagle wołać nowego usera jeśli taki później powstanie. Zadziała też poprawnie nawet jeśli dwóch userów w przyszłości wymieni się nickami.

0

@obscurity

przy zapisywaniu pingi powinny być podmienione na refkę do usera po id i tak trzymane w bazie

ale wtedy musieliby mieć parser na backendzie ;)

2
Riddle napisał(a):
Manna5 napisał(a):

Dużo komplikacji... a może by tak dalej pamiętać w bazie stary nick po zmianie, nigdzie go nie pokazując i używać go tylko do rozpoznawania pingów. W sensie nie robimy żadnego replace we wszystkich postach tylko po napotkaniu pingu ze starym nickiem wyświetlamy nowy nick zamiast oryginalnego.

Nie, bo gdyby ktoś zmienił A na B, a potem ktoś C na A, to się posypie.

PS: Zauważ że to rozwiązanie które podałeś, jest w zasadzie tożsame z moim, tylko w Twoim przypadku id jest starym nickiem.

Hmm, ja bym opisał to proponowane rozwiązanie tak:

  • każdy użytkownik ma N przypisanych nicków (nazw użytkownika). Jedna z tych nazw jest główną nazwą, wyświetlaną przy postach i w UI.
  • rejestrując konto, użytkownik wybiera sobie swoją nazwę użytkownika. Moderator może (na prośbę użytkownika) nadać użytkownikowi drugą nazwę użytkownika (alias) i zmienić jego główną nazwę na nią.

Np. użytkownik może mieć przypisane do siebie nicki "Riddle" i "TomRiddle", z czego główną nazwą (wyświetlaną w UI) jest "Riddle".

Brzmi jak coś co da się w miarę czysto zamodelować w SQL (kosztem dodatkowego joina przy większości zapytań). Oczywiście w takim rozwiązaniu sytuacja A -> B, C -> A jest niemożliwa, bo jeden nick nie może być przypisany do dwóch użytkowników.

3

W procesie zakładania konta podajesz wybraną przez siebie nazwę, która nigdzie nie jest zapisywana, a Ty dostajesz GUIDa.
Każdy ma GUIDa, wszyscy są równi, nie ma lepszych ani gorszych nicków, nie ma po co ich zmieniać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1