Co nowego na forum?

przypowiesci :) Off-Topic 2019-07-14 20:36

Silv dodał komentarz w Visual Studio 2019 - język ?

6 minut temu Oczywiście, może to być. Każdy wybiera taką konfigurację, jaką uważa. :)

WeiXiao dodał komentarz w Visual Studio 2019 - język ?

9 minut temu Według mnie siedzenie na wirtualizowanym windowsie, w np. kolejnym windowsie to utru...

Silv dodał komentarz w Visual Studio 2019 - język ?

10 minut temu O wirtualizowaniu aplikacji nie mogę się wypowiadać, jak napisałem. Piszę o instalac...

WeiXiao dodał komentarz w Visual Studio 2019 - język ?

11 minut temu Ty piszesz o aplikacji czy o wirtualizowaniu maszyny dewerloperskiej?

Krajeski dodał post w Redux/React: czy store jest asynchroniczny?

12 minut temu Dzięki, spodziewałem się takiej odpowiedzi - przy Reakcie o asynchroniczności state...

Silv dodał komentarz w Visual Studio 2019 - język ?

12 minut temu PS. Mówię o środowisku lokalnym; nie wiem, czy np. praca przez SSH ma znaczący wpływ...

Silv dodał komentarz w Visual Studio 2019 - język ?

14 minut temu Załóżmy idealny scenariusz trzymania na wirtualce całego kodu third-party, o którym...

poniatowski dodał post w Motyw IDE biały vs czarny

15 minut temu Witam, Ostatnio zastanawiałem się nad motyw PHPStorm. Do tej pory uzywałem bialego....

JustynaGruba98 dodał komentarz w Wybór Uczelni/Kierunku pod kątem IT

16 minut temu Obliczeniowa jest spoko, studiuje na WIMiIP inzynierie materialowa i to jest bardzo...

WeiXiao dodał komentarz w Visual Studio 2019 - język ?

18 minut temu ale przecież nadal może Ci paść główny OS na którym stoi VM.

Silv dodał komentarz w Visual Studio 2019 - język ?

20 minut temu Nie wiem, ale wiem, że wirtualizacja mityguje czasem problemy związane z OS, na przy...

Silv dodał komentarz w Kawalerka vs Pokój

22 minuty temu @tdudzik: W tym sensie masz rację. Mnie chodziło troszkę też o inne spojrzenie na sp...

WeiXiao dodał komentarz w Visual Studio 2019 - język ?

23 minuty temu @Silv: co masz na myśli?

tdudzik dodał komentarz w Kawalerka vs Pokój

26 minut temu @Silv: koszt wynajmu zazwyczaj jest raczej zbliżony do raty kredytu, albo nawet wyżs...

Silv dodał komentarz w Visual Studio 2019 - język ?

28 minut temu A propos tej chwili strachu – może można by ją zmniejszyć na jakiejś wirtualce?

poniatowski dodał komentarz w Postgresql po co sa CONSTRAINT?

33 minuty temu Wydaje mi się, że tam jest wiecej zależności CONCURRENTLY.

Maciej Cąderek dodał post w Redux/React: czy store jest asynchroniczny?

34 minuty temu Chyba nie potrafię tego zrozumieć bez kodu, ale odpowiadając na pytanie z tytułu: ni...

AnyKtokolwiek dodał post w Visual Studio 2019 - język ?

37 minut temu AnyKtokolwiek napisał(a): Zimny Krawiec napisał(a): Możesz zainstalować sobie 10 róż...

kzkzg dodał post w Visual Studio 2019 - język ?

41 minut temu Narzędzia -> pierwsza opcja od góry.

AnyKtokolwiek dodał post w Visual Studio 2019 - język ?

47 minut temu Zimny Krawiec napisał(a): Możesz zainstalować sobie 10 różnych języków . Potem tylko...

Popularne wpisy na mikroblogu

several
wczoraj, 10:18

Oprócz szydery na VisualStudio korci mnie, żeby zrobić serię pod hasztagiem #norweskiprogramista.

@Krolik chyba miał podobną serię na temat niemieckich seniorów, ale moi koledzy chyba ich przebijają, no bo kto wpadłby na pomysł żeby napisać funkcję, która ma dwadzieścia jeden argumentów? W tym dziewięć przełączników (booleanów). Chłopaki mają dużą wiedzę domenową, to trzeba im oddać, ale jeśli chodzi o kod to ja nawet na studiach tak nie pisałem.

ps. O istnieniu tej funkcji dowiedziałem się przez błąd linkowania, okazało się że kolega dodał dwudziesty drugi argument i po prostu nie miałem najświeższych źródeł z repo.
ps.2 Aż mi się przypomniały moje własne słowa na tym forum sprzed lat Praktyka to najczęściej szok, niedowierzanie i poryty kod.

jarekr000000

No właśnie nie ma nic złego, tylko żeby kasa sie zgadzała.

amd

No to jest oczywiste. Wiadomo że zawsze do tego trzeba podchodzić jak do wagi sztabkowej. Jeśli ktoś oferuje mi milion złotych rocznie to mogę przymknąć oko na technologie. Ale takich ofert w PL nigdy nie widziałem. W sumie nie widziałem za bardzo ofert na wolnym rynku które by znacznie przekroczyły 100k USD(Co jest odpowiednikiem ~30k brutto). Zakładam że pewnie się jakieś znajdą tylko trzeba mieć odpowiedni background + odpowiednie znajomości.
Natomiast jeśli w fajnych technologiach mogę robić za 30k to nie będę w słabych robił za ~33k (10% więcej)

TomRiddle
wczoraj, 19:20

Właśnie pracuję z początkującym programistą, którego jakiś debil nauczył głupiej nazwy. Otóż, wmówił mu że nazwy wejścia/wyjścia powinny być podobne, np internal/external;

Dzisiaj patrzę w kod, a tam....

input/exput

!!!!!!!!!!! what? Powiedział że jego poprzedni nauczyciel tak pisał. Matko boska.

Visual Code

@TomRiddle: luźna informacja 🤷‍♂️😜

PerlMonk

Throughtput, goodput, good throughput. good goodput...

czysteskarpety
wczoraj, 14:50

Infografika, która pokazuje ile się dzieje w sieci w ciągu zaledwie jednej minuty :)

(źródło: https://www.trecebits.com/201[...]3/minuto-internet-infografia/ )

leggo

Mózg na ścianie, jak w ciągu minuty oglądane jest paręset tysięcy godzin filmów na netflixie?
bo głupio pomnozyć przez 60 i wyszłaby liczba użytkowników? czyniąc wynik bardziej zjadliwym xD
Brakuje danym kontekstu

Silv

@leggo: moim zdaniem też dziwne jest dodawanie minut poszczególnych użytkowników, ale być może ma to znaczenie np. dla przepustowości (czyjejś) sieci.

furious programming
wczoraj, 17:22

Wczoraj pisałem o walce z poprawną obsługą dynamicznie mierzonych itemów w komponentcie TCheckListBox oraz z naprawieniem kodu odpowiedzialnego za obsługę lewego kliknięcia myszą w obrębie itema, w celu zmiany stanu checkboxa. Dzisiejsze testy ostatecznie potwierdziły poprawność działania moich łatek, a przy okazji sprawdziłem też czy mój kod odpowiedzialny za renderowanie itemów działa prawidłowo – działa elegancko.

Pomyślałem więc, że zamiast dodawać kolejne zrzuty do tamtego wpisu, który i tak już jest dość krowiasty, wzamian napiszę nowy. Ale nie tylko po to, aby pokazać co mi z tego wyszło – jest jeszcze jedna rzecz, która psuła interfejs mojego programu. Ale tym razem nie z winy błędów w LCL, a w związku ze specyfiką działania komponentów z rodziny ListBox.

Tak więc końcowy efekt przedstawia się następująco, na trzech głównych systemach Windows:

0.png

Kilka pierwszych itemów jest zablokowanych, co oznacza, że checkbox w nich nie może zmieniać zaznaczenia – nie da się tego zrobić ani za pomocą myszy, ani klawiatury. Samo blokowanie robi się za pomocą właściwości ItemEnabled. Założenie jest takie, że x wbudowanych pozycji nie może być usuniętych, a mechanizm usuwania itemów bazuje właśnie na stanie checkboxów.


Itemy w komponencie zachowują się poprawnie, zawartość itemów renderowana jest prawidłowo, zaznaczanie i odznaczanie checkboxów za pomocą myszy działa perfekcyjnie (co do piksela). Ale jest jeden haczyk – podczas rozciągania komponentu, system nie wysyła do niego komunikatów nakazujących przekalkulowanie wysokości itemów, gdy użyty jest styl lbOwnerDrawVariable. To powoduje, że rozciągnięty komponent posiada itemy o wysokość ustalonej podczas dodawania pozycji i albo tekst wyjeżdża pod obszar dla tekstu (gdy kontrolka została ”skurczona” w poziomie), albo pozostają brzydkie, puste pola (gdy została rozciągnięta w poziomie):

1.png

Aby rozwiązać ten problem, należy zmusić komponent do rekalkulacji wysokości itemów w trakcie rozciągania komponentu. I tutaj z pomocą przychodzi metoda ChangeBounds, która jest wywoływana za każdym razem, gdy rozmiar lub położenie kontrolki zmieni się choćby o piksel. Przykładowo, płynne rozciągnięcie komponentu np. o 20px w poziomie oznacza wywołanie tej metody dwadzieścia razy. Pozwala to wykonywać dany kod na bieżąco podczas modyfikacji obszaru komponentu – i tego właśnie potrzebujemy.

Wczoraj zmuszony zostałem do subclassowania TCheckListBox, aby połatać buble w jego kodzie, więc skorzystamy z tej klasy do nadpisania metody ChangeBounds i zdefiniowania kodu forsującego rekalkulację wysokości pozycji. Wiele kodu pisać nie trzeba:

type
  TCheckListBox = class(CheckLst.TCheckListBox)
  protected
    procedure ChangeBounds(ALeft, ATop, AWidth, AHeight: Integer; AKeepBase: Boolean); override;
  end;

{..}

procedure TCheckListBox.ChangeBounds(ALeft, ATop, AWidth, AHeight: Integer; AKeepBase: Boolean);
var
  ControlItemIndex: Integer;
  ControlItemHeight: Integer;
begin
  inherited ChangeBounds(ALeft, ATop, AWidth, AHeight, AKeepBase);

  if Style = lbOwnerDrawVariable then
    for ControlItemIndex := 0 to Items.Count - 1 do
    begin
      MeasureItem(ControlItemIndex, ControlItemHeight);
      Windows.SendMessage(Handle, LB_SETITEMHEIGHT, ControlItemIndex, ControlItemHeight);
    end;
end;

Najpierw wołamy bazową metodę za pomocą inherited, która wykona aktualizację położenia i rozmiaru komponentu. Następnie sprawdzamy czy komponent posiada ustawiony styl lbOwnerDrawVariable i jeśli tak, w pętli wykonujemy obliczenia. Klasa TCheckListBox posiada publiczną metodę MeasureItem, która pośrednio wywołuje zdarzenie OnMeasureItem, czyli wykonuje nasz kod przeprowadzający obliczenia. Po pobraniu nowej wysokości wysyłany jest komunikat do komponentu, w którym dostarczamy indeks pozycji oraz nową jego wysokość.

To wszystko – od tej pory komponent automatycznie dba o to, aby pozycje posiadały poprawnie dopasowaną wysokość do swojej zawartości:

2.png


Pozostaje jeszcze zabezpieczyć jedną rzecz. Zawartość wszystkich itemów komponentu może być modyfikowana. W przypadku tych zablokowanych, zmienić można niektóre dane (w tym tytuł i treść itema), ale pozycje te nie mogą być usunięte.

Aby komponent dopasował rozmiar pozycji po aktualizacji danych, wystarczy wywołać metodę ChangeBounds, podając w parametrach bieżącą pozycję i rozmiar komponentu. W ten sposób wymusi się rekalkulację wysokości itemów, bez zmiany obszaru zajmowanego przez komponent. Można też napisać sobie dedykowaną metodę do tego celu, tak aby utrzymać czytelność kodu.

Oczywiście należy też pamiętać, że modyfikacja treści wyświetlanej przez pozycje też musi wymuszać ponowne obliczenie obszaru itemów i dodatkowo jeszcze przemalowanie komponentu. W przeciwnym razie znów będziemy mieli do czynienia z pustymi przestrzeniami lub tekstem nie mieszczącym się w obrębie obszaru itema, a brak odmalowania kontrolki będzie powodował zglitchowanie interfejsu.

#free-pascal #lazarus

furious programming

@several: podejrzewam, że gdyby to nie był Pascal, to zainteresowanie byłoby większe. ;)


@karpov: nad niedużym narzędziem do zarządzania niewielką ilością danych – raptem kilkadziesiąt ”rekordów”. Funkcjonalność nie jest imponująca, kilka okien z kontrolkami rozsianymi po kilku zakładkach, trochę wyświetlania obrazów i dynamicznego renderowania tekstu/sprajtów. Komponenty, o których napisałem kilka wpisów, służą do czytelnego przedstawiania danych, którymi operuje użytkownik. Przewiduję około 10.000 linijek kodu, nie więcej niż 30 modułów.

Być może napiszę o nim coś więcej za jakiś miesiąc, bo całkiem możliwe że trafi na GitHub. Ale na razie to tajemnica. :P

furious programming

Jeszcze napieszę co najmniej jeden wpis na temat komponentów użytych w tym projekcie (na temat renderowania).