sens
g/CozienaProfdyuktywnoscINfrmtyczn

I wiecie jak się kurwa skończyło z tymi GUI pythonowymi? XD python robi okienko z WebView i podaje mu dane z bazy, reszta to zwykła stronka

Jakbym robił to dla siebie to bym sobie pewnie pisał swoje widgety i robił system layoutów w pytongu ale kurwa pomyślałem se, nie mój cyrk, zrobię to po prostu w pythonowej wersji elektrona

Naprawdę obsługa eventów w tkinter to jest jakieś średniowiecze. Qt nie będę bo powody, a reszta nie ma nic kurwa żadnych kontrolek najwyżej button co se możesz go przycisnąć I usnąć

#
sens
g/CozienaProfdyuktywnoscINfrmtyczn

Z perspektywy czasu doceniam wprowadzenie := w pytongu. Jest to na tyle składniowo obrzydliwe i przypominające Pascala (kto indeksuje od 1 ten zapierdala) rozwiązanie, że używa się tego w ostateczności, a jednak czasem się przydaje.

#
Show remaining entries (3 replies)
spam_only

@sens: nie krytykuję, tylko twierdzę, sam w nim rzezbie od jakiegoś czasu, bo jest uniwersalny i fajny, ale smietnik i pierdolnik wokół niego jest czasami ciężki.

#
sens

@spam_only: z moich doświadczeń to pierdolnik dotyczy głównie bibliotek, które mocno zależą od kompilowanych w c lub cpp modułów właśnie jak pyqt. Wiadomo, idealnie nie jest ale wydaje mi się, że ekosystem jest dużo łagodniejszy w obsłudze niż cpp a już na pewno js/ts bo to jest dopiero prawdziwie koszmarne, a długoterminowe utrzymanie projektu większego niż wizytówka januszexu wymaga sporego wysiłku

#
sens
g/CozienaProfdyuktywnoscINfrmtyczn

Jprls, całą dobę mi zajęło ustawianie nowego repozytorium. Miliony tsconfigów, jebanie się z zależnościami, konfiguracja pnpm i workspace'ów, linkowanie .d.ts na 7 różnych sposobów.

Obsługa tych wszystkich narzędzi wokół js to jest jakiś kurwa dramat. Jak układanie puzzli z jakimś obrazem dwurnika, którym nadpobudliwe dziecko poobrywalo końcówki, zalało sokiem, a potem przyszedł pies i na to nasrał.

Naprawdę kurwa, te nerdy od C++ to może i ohydne, ale przynajmniej mają jakieś standardy ustalone na sztywno, a nie kurwa dziś robisz repo, a pojutrze ci się wszystko rozpierdala, bo ktoś uznał że jednak trzeba coś robić zupełnie inaczej

#
sens
g/CozienaProfdyuktywnoscINfrmtyczn

Jest taka zajebista apka na MacOS betterdisplay. Jest w chuj użyteczna, pozwala na ustawienie wyższej jasności niż Apple pozwala w ustawieniach i ogólnie ma miliard innych opcji .

Oczywiście jest płatna, ale ma pro trial dwutygodniowy. Co dwa tygodnie odpalam sobie skrypt który mi kasuje kilka plików konfiguracyjnych i mi się ten trial resetuje.

Chore? Ale mam do tego prawo (chyba, przecież kasowanie plików z komputera to nie zbrodnia?)

#
Show remaining entries (2 replies)
ajdajzler

@sens: ja zaplacilem za apke Maccy która zachowuje schowek na pasku xd ale kosztowala malutko

#
sens

@Deykun: od razu bym wypierdolil xD ale to jeszcze pół biedy. Ja miałem kiedyś taki theme, który zżerał mi CPU tak że mi się vscode zacinał I chyba z pół roku mi zajęło dojście do tego że to jest źródło problemu

#
sens
g/CozienaProfdyuktywnoscINfrmtyczn

W nawiązaniu do ostatniego postu użytnika @ajdajzler chciałem się pochwalić swoim znaleziskiem. Szukałem jakiegoś symulatora tych komputerków pokładowych w samolotach pasażerskich, żeby obczaić jak to w sumie działa i znalazłem

https://www.equicom.net/mcdu/index.php

Wiadomo, nie ma się co śmiać, bo to jest robota jednego człowieka, który nie jest programistą, więc nawet dość imponujące, ale niektóre kawałki kodu są przeurocze xD

<body style="overflow-x:hidden;">
<!-- this is used to catch keypress -->
<input type="text" value="" id="keycatcher">
<!-- end of keypress thing -->

You should use this site with Chrome or Chromium browser for best results because other browsers may have too many keyboard quirks that will quickly become annoying (for example, the QuickFind feature in Firefox, or the way Firefox uses the backspace key for navigation).

Czyli nie odpalisz na FF, bo autor nie zna preventDefault

///////////////////////////////////////////////////////////////
// Key E //
MCDU.keyE.node.onclick = function(){
    if(powerStatus=="on"){
        if(canUserEdit==true){
            if(textBufferSize<31){
                textBuffer=textBuffer + "E";
                updateScratch();
            };
        };
    };
};

I tak dla każdego przycisku xD

#
sens
g/CozienaProfdyuktywnoscINfrmtyczn

Ciekawe wsm skąd się wzięło canvas API. Wiadomo że te półmózgi JavaScriptowe nie zdołałyby wymyślić czegoś co się jako tako trzyma kupy, więc zacząłem szperać. Cairo sprzed 2003 roku używa prawie identycznych funkcji. Ale geneza to chyba tak naprawdę postscript, też jest stack, macierz transformacji, fill, stroke I inne pierdolety. A to już wczesne lata 80

#
Deykun

@sens: nie wiem czemu szkalowanko, wszedł w HTML5 i próbował zastąpić flasha (powodzenia xd), no ale faktem jest, że jak mówimy o chujowym sofcie to Flash stał na podium.

#
sens

@Deykun: nie no, źle mnie zrozumiałeś, ja chwalę canvas API i dlatego byłem przekonany, że to nie jest pomysł jsowych soyboyów, tylko skopiowali istniejące od dawna, dojrzałe rozwiązanie

i oczywiście miałem rację

#
sens
g/CozienaProfdyuktywnoscINfrmtyczn

Ujdzie, czy przesada i dzwonicie po policję? XD

Chciałem sobie otypować grupę podobnych metod i po prostu użyć dekoratorów jak normalny człowiek, które co prawda w TS są trochę upierdliwe, ale da się je doprowadzić do działania. Tylko potem zmusić TS do wykminienia, jaki jest typ udekorowanej metody to jednak jest trochę koszmar, więc spłodziłem takie gówno.

W pythonie jakoś sobie poradzili z tym sprawniej, ale pewnie mieli łatwiej, bo dosłownie wszystko jest obiektem, a w JS to null niby jest prymitywną wartością, ale typeof null === 'object' zwraca true i nie są tego w stanie naprawić od 30 lat, bo internet by wybuchł xd

export const vecOp = <T>(op: (this: Vec, v: IVec) => T) => {
  function wrapped(this: Vec): T
  function wrapped(this: Vec, v: IVec): T
  function wrapped(this: Vec, x?: number, y?: number): T
  function wrapped(this: Vec, vx?: IVec | number, y?: number) {
    return op.apply(
      this,
      typeof vx === 'number'
        ? [{ x: vx, y: y ?? 0 }]
        : vx === undefined
        ? [{ x: 0, y: 0 }]
        : [vx],
    )
  }
  return wrapped
}

export class Vec implements IVec {
  add = vecOp(v => new Vec(this.x + v.x, this.y + v.y))
  sub = vecOp(v => this.add(-v.x, -v.y))
  dot = vecOp(v => this.x * v.x + this.y * v.y)
  dist = vecOp(v => this.sub(v).norm)

#
sens

@sens: aha, jak powyższe nie wywołuje u was odruchu wymiotnego, to co powiecie na emulację przeciążania operatorów używając template tagów? XD

export class Vec implements IVec {
   static expr(ops: TemplateStringsArray, ...args: any[]): Vec | number;

A po dopisaniu jakiegoś prostego shunt yarda można sobie używać takiego lukru składniiwgo :--DD

const u = new Vec(2, 1)
const v = new Vec(3, 7)
const p = Vec.expr​​​`|${u} - ${v}|^2​`

#
sens
g/CozienaProfdyuktywnoscINfrmtyczn

Mój graf niedomaga przy obliczaniu pozycji wierzchołków i jej dwóch pochodnych przy liczbie ~5k node'ów (na jednym wątku jedna klatka się renderuje około minuty xd) więc sobie przepisuję obliczenia do webgpu, bo to coś nowego a nie te upośledzone workery ciągle. Napisałem już shader, poustawiałem bufory. Teraz już tylko muszę wepchnąć do nich dane i zobaczymy czy działa. Czymajcie kciuki

#
sens

@sens: działa! XD z jednej klatki na minutę udało się zrobić prawilne 60 fps (no może nie jest stabline podczas interakcji z UI, ale to wina raczej tego, że nie dzielę renderowania na mnijesze części, żeby się renderowało bardziej asynchronicznie)

#
sens
g/CozienaProfdyuktywnoscINfrmtyczn

bawię się tym wyświetlaniem grafu wywołań funkcyj, chyba mi wyszła jakaś galaktyka z poprzeczkom

jjuż jest coraz lepiej, wierzchołki reprezentujące funkcje próbują się zgrupować według odległości w łańcuchu wywołań i tego, w jakim pliku siedzą i mi nie spierdalają poza canvas xd

#
sens
g/CozienaProfdyuktywnoscINfrmtyczn

no kurwa xD nawet mi sie podoba

https://i.imgur.com/1HpflUU.jpeg

#
sens

@sens: https://i.imgur.com/7Wxhv76.jpeg

pamietacie jak jakies 10 lat temu wszyscy słuchali makintosz plus i byli AESTHETIC?

ja kurwie

to było 15 lat temu

x__X

15 lat temu był 2010 rok

## SZOK

#
sens
g/CozienaProfdyuktywnoscINfrmtyczn

Wczoraj wieczorem zacząłem się po raz kolejny zastanawiać, jak bardzo spierdolony jest projekt tego typka od dependency injection, więc zacząłem szukać sobie jakichś analizatorów kodu, które by wyszukiwały zależności po wywoływanych funkcjach, a nie tylko importowanych plikach.

No i znalazłem i zajebiście to działa, tylko że to narzędzie ma absolutnie obleśną i nieergonomiczną wizualizację grafu wywołań (to nie ty mi @Deykun mówiłeś o tym cytoscape? oni tego właśnie użyli, ale chyba niezbyt im poszło xD)

No to sobie zacząłem robić swoją własną wizualizację, bo mnie kurwa stać. No i tak robię robię i kminię jak zmierzyć siłę powiązań między danymi funkcjami, żeby ten graf się jakoś ładnie układał, żeby te wierzchołki miały wporzo grawitację, a nie że 10k node'ów nasranych na przestrzeni stu pikseli kwadratowych, c'nie

No i tak powoli rozkminianie tego przeszło w zwyczajne bawienie się canvasem i kolorkami, jak to zazwyczaj bywa. No i tak sobie myślę jescze w międzyczasie o tym jak liczyć tę grawitację i się bawię, i kiminię, i bawię

se klikam

#
Show remaining entries (5 replies)
Deykun

@sens:

mówiłeś coś chyba o jakiejś libce antycznej napisanej w vanilla js

gojs

#
sens

@Deykun: szabesgo.js

#
sens
g/CozienaProfdyuktywnoscINfrmtyczn

Mamy taki projekt na podstawie szeroko wykorzystywanego core'a, w którym z powodu szczątkowej dokumentacji i ogólnego burdlu (Microsoft, heh) po zbudowaniu podstawowego projektu wstrzykujemy skrypty js na chama do index.html. skrypty są koszmarne, bo połowa kodu to document.createElement, a funkcje tego rozszerzenia są dość obszerne (bluetooth, transpilator, I inne ciekawostki). Ogarnięcie skąd bierze się dany stan i dokąd zmierza graniczy z cudem.

Więc piszę teraz od nowa w typescripcie. Nadal będzie to osobno budowane i wstrzykiwane, ale ponieważ przynajmniej jest teraz jakaś struktura i typowanie, to jest to gra warta świeczki.

Aha, i pisze też do tego customowy jsx-runtime z bieda-reaktywnością, żeby się nie szarpać z DOMem ręcznie. Nawet to jakoś działa xD

#
sens
g/CozienaProfdyuktywnoscINfrmtyczn

Zrobiłem jakiś czas temu rozszerzenie do vscode, dziś patrzę a tu jakiś typek który projektował którąś tam wersję AutoCAD pisze mi issue że super rozszerzenie, podał listę ficzerow, które by chciał i zaproponował 50$ dla Polaka robaka jeżeli zaimplementuje przynajmniej jeden xD

Czuję dobrze open sos kontrybutor

Hajsik przyjmę chętnie ale fajnie że mojego kodu używa z własnej woli 80 letni gość z dużym doświadczeniem a nie że Mati po bootcampie Vibe koduje bota i spamuje gównianymi issuesami żeby umieścić changelog.md w repo, bo on tak lubi

#
sens
g/CozienaProfdyuktywnoscINfrmtyczn

To bardzo budująca myśl, że nie ważne czy wstrzykujesz asynchroniczne korutyny do kontenera, czy trenujesz wielowarstwową sieć neuronową czy tworzysz grę o ruchaniu psów. Pod spodem to i tak jest tylko zegarek, kalkulator i goto

#
spam_only

@sens: crudy, wszędzie crudy...

#
sens
g/CozienaProfdyuktywnoscINfrmtyczn

Mamy nowe biurka w biurze ale chyba stare bo na moim jest naklejka gnu Emacs.


Wysłane z mojego emacsa przez sendmail

#
sens
g/CozienaProfdyuktywnoscINfrmtyczn

Upierodolilbym łeb bez wahania temu gnojowi, który przeforsował używanie dependency injection do ładowania pierdolonego stringa w pojekcie. Zaraz wam kurwa policzę ile warstw abstrakcji zostało stworzonych do tego ultra skomplikowanego zadania

#
Show remaining entries (4 replies)
Deykun

@spam_only: a mi smakuje dx

#
sens

@Deykun: no ja też lubię spaghetti, ale po którymś dniu z kolei to może się znudzić

#
sens
g/CozienaProfdyuktywnoscINfrmtyczn

https://i.imgur.com/9DgiEHN.jpeg

no, zaczyna to jakoś nawet wyglądać

#
sens
g/CozienaProfdyuktywnoscINfrmtyczn

remderuje sb mapki z GTA2 w babylon JS, prosto z pliczków gry. Docelowo bendzie to edytor do mapek

https://i.imgur.com/ndzbOD2.jpeg

ofc trochę tekstur poobracanych i źle zmapowanych, nie ma oświetlenia, bo to jeszcze praca w toku

#
Show remaining entries (3 replies)
Deykun

Kiedy czytasz sensika

#
sens

@Deykun: ahhh nikt mnie nie rozumie :(

#
sens
g/CozienaProfdyuktywnoscINfrmtyczn

https://i.imgur.com/a06XD9g.png

już przechodzę powoli z tworzenia gramatyki do implementacji interpretera (na razie nie ma absolutnie nic związanego z tworzeniem grafiki, bo zacząłem od obsługi zmiennych, procedur, call stacków etc.), nie szkalujcie za składnię, okazuje się że wymyślenie czytelnej i funkcjonalnej składni to dosyć trudne zadanie xd

#
Zilog
g/CozienaProfdyuktywnoscINfrmtyczn

Vibe coding FTW. Nigdy nie używałem Java Script, a potrzebowałem w arkuszach googlowskich niestandardowych funkcji, bo miałem dane wejściowe w amerykańskim formacie. No i odpaliłem AI od gógla, powiedziałem mu, że potrzebuję skrypt w Apps Script i opisałem, co ma robić.
Pierwsza wersja nie wyszła w ogóle, nie chciało mi się nawet debugować. Rozbiłem na 3 mniejsze kroki, każdy opisałem oddzielnie no i zaczęło działać :)

ps ale to jest wolne, płaku płaku

#
Deykun

ps ale to jest wolne, płaku płaku

jak się kochają to chuj z nimi

#
sens
g/CozienaProfdyuktywnoscINfrmtyczn

Jjb przerobiłem przez ostatnie parę dni chyba z pięć różnych generatorów parserów. Każdy mnie czymś wkurwial. Jeden fajny, malutki, kompaktowy, ale ograniczony. Drugi spoko, ale jest tylko jako biblioteka js. Trzeci niby też wygodny, ale ma zjebane API.

W końcu natrafiłem na tree-sitter. Do tej pory widziałem te nazwę tylko w logach npm xd i zawsze myślałem że to jest paczka do optymalizacji dependecji, chyba mi się pojebało z tree shakerem xd

No i ogólnie spoko jest. Generuje parser w C i bindingi do każdego popularnego języka. Ale kurwa xd

Gramatykę definiuje się w javascripcie xd (reszta raczej używa jakiejś formy EBNF) i zeby sobie wygenerować parser to trzeba mieć node'a. No niby wszyscy mają po 50 node'ów poinstalowanych, ale no niesmak trochę jest. W sumie ma to jakiś sens nawet bo przynajmniej jest podpowiadanie składni.

Ale to nie wszystko xd jest opcja generowania podświetlenia składni. Ale wymaga to podefiniowania sobie dodatkowych skryptów w jakimś dialekcie lispa xd

Kobyła trochę to jest i zamiast jednego pliczku źródłowego to domyślna definicja parsera stanowi cały pierdolony projekt.

Ale w zasadzie to chyba najwygodniejsze rozwiązanie

#
Deykun

@sens:
Haha, rozumiem ten emocjonalny rollercoaster bardzo dobrze 😄
Tree-sitter ma dokładnie tę aurę „o, to wygląda prosto… a jednak jest pół fabryki pod spodem”.

To co opisujesz, to w sumie dość typowe:

  • Małe, kompaktowe generatory → zazwyczaj fajne na prototyp, ale później wychodzi, że brakuje ci drobiazgów, np. sensownego error recovery albo wsparcia dla komentarzy.
  • „Tylko JS” → no i wtedy jesteś w klatce ekosystemu, nawet jak twój projekt w ogóle z JS nie korzysta.
  • Tree-sitter → niby C core, szybki, cross-language bindingi, ale... cała definicja w JS + cała ta magia „generowania” wymaga Node’a.

Paradoksalnie to, że gramatyka jest w JS, ma sens techniczny — dzięki temu można robić programistyczne konstrukcje w definicji (makra, reużywalne reguły itp.) i to się kompiluje do czystej struktury C, ale z punktu widzenia purysty „chcę jeden plik .grammar” to jest trochę „meh”.

Co do highlightingu w Lispu — to jest Tree-sitter queries, czyli ich mini-dialekt S-expressions. Też się z tym pierwszy raz obijałem w Neovimie i miałem wrażenie, że ktoś mnie teleportował do Emacsa, ale to jest w sumie całkiem potężne (i trochę lepiej się debuguje niż klasyczne regexowe highlighty).

No i tak, domyślna definicja parsera jako cały projekt to w sumie cena za to, że potem dostajesz:

  • AST w czasie rzeczywistym
  • error recovery
  • możliwość modyfikowania highlightu i foldingów bez rekompilacji parsera
  • od razu wsparcie w kilkunastu edytorach

Jak na ironię — dla kogoś, kto chce tylko „mały parser” to jest kobyła, ale jeśli chcesz coś długofalowo rozwijać, to trudno znaleźć lepsze narzędzie.

Jeśli chcesz, mogę ci pokazać jak spłaszczyć definicję Tree-sittera do jednego katalogu z minimalnym Node-overheadem, tak żeby nie wyglądało to jak rozdmuchany projekt. To dość mocno redukuje „niesmak”.

Chcesz, żebym to od razu rozpisał?

#
sens

@Deykun: Haha, dokładnie, ten opis trafia w punkt.
Tree-sitter to trochę taki „prosty jak młotek, ale waży jak kowadło” — wygląda niewinnie, a potem odkrywasz całą tą machinę wokół.

Co do spłaszczania definicji, to brzmi sensownie. Ja też mam odruch, żeby ograniczyć bałagan i Node-overhead, szczególnie kiedy parser ma być częścią większego projektu, a nie samodzielnym kombajnem.
Pokaż, jak to zrobić — chętnie zobaczę, bo może faktycznie da się mieć ciastko i zjeść ciastko.

#
sens
g/CozienaProfdyuktywnoscINfrmtyczn

Jprdl, pisze se ten parser do tego pseudo SVG, pomyślałem co się będę jebał z wymyślaniem koła na nowo w C, to jest drzewko, elementy ast dziedziczą po sobie, potrzebuję klas i odpada alokacja buforów I takie tam.

no to zasiadam do c++, bo mówią że teraz to zupełnie co innego, że da się tego używać nie to co trzy standardy temu.....<>()[]std:::::::&&c**onst~~`|€°€^¢^£§¥§• I pamiętaj oczywiście żeby usunąć destruktor w klasie wirtualnej, bo inaczej vtable się wypierdoli

A
Aaaaaaaa no ale słuchaj mordo, C++17 MA ITERATORY :0000 I NIE UZYWA SIE NEW I DELETE TYLKO SMART POINTEROW

nawet nie jestem do końca pewien czy ten zjebany rust nie jest lepszy

#
sens
g/CozienaProfdyuktywnoscINfrmtyczn

gcc* - przy włączonym -g** zalecana jest optymalizacja -Og, czyli tak, jak normalny zdrowy polak by się spodziewał

clang - przy -g manual zaleca -O0, mimo że istnieje flaga -Og, z tym że jest ona równoznaczna -O1

Note that Clang debug information works best at -O0.
-Og Like -O1. In future versions, this option might disable different optimizations in order to improve debuggability.

XD dalczego KURWA DLACZDGO?!


dla frontasiów chłoptasiów webowych dżawaskryptowców:

*kompilator to taki program podobny do transpilatora TS -> JS, tylko że zamiast konwertować schujowaciałe skrypciki na równie gówniany kod, tylko że działający w IE8, to tłumaczy kod źródłowy na wykonywalny kod maszynowy

**generowanie metadanych do debugowania

#
sens
g/CozienaProfdyuktywnoscINfrmtyczn

Kocham SVG, jeszcze żeby to miało lepszą składnię, lepsze rozdzielenie definicji obiektu od jego użycia i lepsze kaskadowanie atrybutów (teraz niektóre się propagują w dół drzewa, a niektóre nie, wkurwia mnie to), to byłoby ideolo.

#
Show remaining entries (5 replies)
Deykun

@sens:
W ogóle śmieszne, bo jak robiłem te mapkę herbami i mi zaczęło jebać przeglądarkę przy 2k nodów w HTMLu to doszedłem, że jednak trzeba je wrzucić na canvas z 0FPS. I potem poszedłem na rozmowę do firmy od diagramów to jest dokładnie problem z diagramami więc błysnąłem, że sam miałem ten problem i tak go rozwiązałem. I jak są przeskurwysyńskie diagramy to ją stawiają na płatnej libce na canvasie https://gojs.net/latest/ i ta libka rysująca wszystko sama bez htmla (więc button musi mieć onMouseOvery w canvasie setowane i cuda żeby był hover) jest rozwijana w js od 1998 roku czuć w niej czasami, te decyzje programistyczne z 2006 roku.

Dużo bindownania po this, funkcje które nie mają obiektu że robisz setPosition({ y }) tylko musisz dać setPosition(undefinded, y) bo funkcja powstała jak jeszcze nie było dekonstrukcji w obiektach. ;d

W sumie jak na to co robi tak całkiem ułożona, ale inny i zbudowany osobno świat JSa, a jeszcze żaden darmowy MIT projekt jej nie zeżarł, bo jednak 25 lat developmentu daje jakąś przewagę. xD

#
sens

@Deykun: zastanawiałem się nad tym czy nie robić tego na canvasie, ale uznałem, że nie mam siły ani czasu się użerać z tym API, a SVG w sumie można traktować normalnie jako komponenty reactowe i normalnie reagują na zmiany stanu, więc nie muszę jeszcze się osobno renderowaniem manualnym przejmować. Obawiałem się czy wydajnościowo będzie ok, ale to też w sumie przecież nie trzeba wyświetlać całego grida tylko to co widać, więc w sumie spox.

Ale teraz znowu zasiadłem do tego pomysłu na preprocesor SVG z poprawionymi rzeczami które wymieniłem. Mam wielkie plany, oprócz tłumaczenia na SVG to jeszcze osobna funkcja enderowania tego bezpośrednio + bindingi w wasm i do pajtona.

Za 20 lat wykupi mnie Google albo inna zbrodnicza organizacja i będę milionerem szybciej niż żółtak

#
sens
g/CozienaProfdyuktywnoscINfrmtyczn

właśnie zescrape'owałem wszystkie wpisy niektórych userów strm.pl i próbuję wsadzić wasze osobowości do modeli AI, niedługo nie będziecie już potrzebni

#
Show remaining entries (2 replies)
Deykun

niedługo nie będziecie już potrzebni

Ja już dawno

#
Aleks

@sens: z jakiego czasu te wpisy bo ja kupiłem to konto w 21 roku

#