furious programming
2019-06-19 02:14

Przed chwilą znów Lazarus rzucił wyjątkiem o wszystkomówiącej treści Access Violation.


Tym razem moja ulubiona funkcja tego IDE (czyli randomowe wykrzaczenie) uruchomiła się w designerze, podczas cofania wprowadzonych zmian. Na formularzu miałem poustawiane komponenty, w tym etykietę z tekstem wieloliniowym (kilka paragrafów, wiersze zawijane, dopasowanie rozmiaru do treści). Pospinałem komponenty za pomocą Anchor Editor (świetne narzędzie swoją drogą), tak aby podczas rozciągania okna ”same” się odpowiednio przesuwały (przydatne, jeśli niektóre komponenty zmieniają swój rozmiar). Wszystko było cacy.

Aż tu nagle przez przypadek przesunąłem tę wieloparagrafową etykietę, która zaczęła wariować – włączony AutoSize w połączeniu z ustawionymi kotwicami spowodował, że komponent zaczął zmieniać rozmiar, totalnie wyjeżdżając poza obszar okna. Puściłem więc LPM i zacząłem cofać zmiany z poziomu klawiatury, licząc na to, że rozmiar i położenie komponentu wrócą do poprzednich wartości. Ale nie – designer rzucił wyjątkiem.

I w sumie bardzo dobrze że tak zrobił, bo pół godziny bym przywracał układ komponentów. A że zanim etykieta się rozjechała, projekt miałem zapisany, więc wystarczyło kliknąć przycisk Abort w oknie z informacją o wyjątku i IDE zostało ubite, następnie otworzyć je ponownie, załadować projekt i gotowe – układ kontrolek przywrócony, więc wyjątek w końcu się do czegoś przydał.


Dlaczego o tym piszę? Bo komponent TLabel to jakaś parodia… Jakiś geniusz wpadł na pomysł, aby dać możliwość tworzenia etykiet jednoliniowych i wieloliniowych (z zawijaniem wierszy lub nie), ale do dostosowywania rozmiaru komponentu dać cholerną jedną właściwość – AutoSize.

Do jasnej cholery! Taki problem jest rozbić ją na dwie – AutoWidth i AutoHeight – tak aby można było wybrać w jaki sposób ma się etykieta zachowywać? Czy lepiej cudować z automatycznymi mechanizmami bazującymi na kotwicach, które w zależności od wymagań mogą być różnie ustawione? A może kompatybilność z Delphi jest ważniejsza? Hmm?!


Już wam napiszę jak to wygląda. Domyślnie AutoSize jest włączony, WordWrap nie. Włączenie WordWrap nic nie daje – wpisując kolejne słowa w Caption, kontrolka rozciąga się w poziomie, cały czas będąc jednoliniową. Aby zmusić ją do zawijania wierszy, należy dodatkowo wyłączyć AutoSize – wtedy wiersze zaczną się zawijać, ale rozmiar nie będzie dostosowywany do zawartości (logiczne). Wpisujemy więc do Caption tekst (np. kilka paragrafów) i akceptujemy. Jak teraz zmusić komponent do tego, aby dopasował swoją wysokość do wieloliniowej zawartości? Logiczne, że trzeba włączyć AutoSize, robimy to i dup – etykieta znów jest jednoliniowa, szlag trafił ustaloną szerokość…

Jak więc tę cholerę dopasować? Nie zgadniecie… Najpierw trzeba wyłączyć AutoSize, ustalić wymaganą szerokość i wpisać swój wieloliniowy tekst, tak aby mieć podgląd na zawartość. Następnie trzeba włączyć obie horyzontalne kotwice i dopiero wtedy włączyć AutoSize – wtedy komponent nie zmieni swojej szerokości, ale dopasuje swoją wysokość – o to od początku chodziło. Teraz możemy dopisywać tekst do Caption i jedynie wysokość będzie się zmieniała.

Dobrze jest? Ta, to teraz zrób w ten sposób etykietę, która podczas rozciągania okna nie będzie zmieniać swojej szerokości. Wyłącz prawą kotwicę to etykieta znów będzie jednoliniowa i szlag trafi wszystko co do tej pory zrobiłeś… Tylko nie cofaj zmian – bo designer może walnąć wyjątkiem… Wyłącz AutoSize, wyłącz prawą kotwicę, ręcznie ustal rozmiar, włącz prawą kotwicę i z powrotem włącz AutoSize.

Masz jeszcze nerwy? To włącz Anchor Editor i spróbuj pospinać kontrolki, tak aby spełniały założenia… :/


Nie mam pojęcia jak, ale ”udało się” wyklikać wszystko. W jednym oknie – teraz morduje drugie… z dziesięciu… :|

#lazarus #wtf #lazabug

Paweł Dmitruk

Myślę, że kompatybilność z Delphi jest ważniejsza - takie odniosłem wrażenie przeglądając forum Lazarusa. Co do labela, to przy Label1.Autosize:=True; ustawiasz maksymalną szerokość kontrolki Label1.Constraints.MaxWidth:=200; i wtedy masz AutoHeight. Oczywiście musi być zaznaczony WordWrap.
Możesz też wpisując tekst do labela sam zawijać tekst dodając znaki końca linii ;-)

furious programming

Z tą kompatybilnością to i tak jest niezła hipokryzja, biorąc pod uwagę to jak bardzo przywiązują do niej wagę, jednocześnie broniąc się przed implementacją wybranych nowości tego języka (jak np. inline'owane deklaracje zmienych). Funkcjonalności implementują wybiórczo, więc nie ma tutaj mowy o jakiejś konkretnej kompatybilności.


Twoja propozycja co do Constraints – no niby tak, tyle że szerokość musiałbym znać już na początku i jej nigdy nie zmieniać. A w trakcie projektowania interfejsu testuję różne warianty, różne układy i rozmiary komponentów i za każdym razem gdy trzeba by poszerzyć etykiety, musiałbym im najpierw usuwać Constraints, aby to było możliwe. A jeśli bym zapomniał z powrotem ustawić tego ograniczenia, to nawet samo przesunięcie etykiety spowoduje zmianę jej rozmiaru, całkowicie ignorując WordWrap.

Co do ręcznego zawijania – nie mogę tak zrobić, bo na różnych systemach są różne fonty i różne ich ustawienia (rozmiary, skalowanie itd.). To powoduje, że u mnie tekst może mieć pięć linii, a na komputerze z innym systemem może być tych linii mniej lub więcej, a one same mogą być krótsze lub dłuższe. Poza tym w trakcie projektowania mogę testować różne kroje fontów i ich style, więc za każdym razem musiałbym poprawiać łamanie linii, co jest bez sensu. Już nie wspominając o wsparciu wielu języków interfejsu.

Dlatego komponent musi sam łamać linie i dopasowywać swoją wysokość, tak aby zawsze wyglądał prawidłowo, wyświetlał swoją pełną zawartość i nie komplikował mi pracy. Natomiast ustawienie kotwic za pomocą Anchor Editor pozwala zrobić stałe odstępy pomiędzy komponentami przy zmiennej ich wysokości, bez dotykania edytora kodu, co jest wygodne. Jedno mi pracę ułatwia, a drugie komplikuje – tak być nie powinno…

Burdzi0
2018-07-16 12:07

Windows 7 postawiony na wirtualce bo zostałem poproszony o ogarnięcie pewnej zabawy z certyfikatem.
Postawiłem sobie wirtualkę, muszę korzystać z Internet Explorera (powiedzmy, że taki wymóg zadania).
Wchodzę na stronę Microsoftu, żeby pobrać nowszą wersję, a ta mi mówi, że najpierw muszę... zaktualizować przeglądarkę, bo mam za starą wersję xD
Kiedy próbuję pobrać pewną wersję z poziomu Win 8.1 (na którym stoi wirtualka) dostaję odpowiedź, że mój system nie jest kompatybilny z jakąśtam wersją. Dopiero wpisanie, że chcę wersję na 7 rozwiązuje sprawę.
Człowieku, który to pisał, jeśli to czytasz, to życzę Ci plagi szarańczy na Twoim trawniku, codziennych korków w drodze do pracy i aktualizacji windowsa w najmniej odpowiednim momencie (za aktualizacje możesz podziękować znajomym z pracy)
#microsoft #wtf

Burdzi0

@mr_jaro: Tylko, że przekierowanie było blokowane! xd Inaczej nie byłoby najmniejszego problemu

cerrato

@mr_jaro Będę miał taką wersję przeglądarki, jaka była dostarczana na płycie z daną wersją Linuksa. Nie wiem, jaka to będzie wersja - tak samo, jak ktoś instalujący "czystego" windowsa nie musi wiedzieć, jaki IE tam siedzi. Po prostu - instaluje coś i widzi (albo i nie) problem z działaniem przeglądarki. Oczywiście - napiszę, jaka wersja była w obrazie instalacyjnym

Artur Protasewicz
2018-03-10 14:51

W minionym tygodniu pracowałem prawie wyłącznie w t-sql i dzisiaj od rana też.
Przyszła pora obiadu. Był domowy gyros.
Po obiedzie zrobiłem sobie kawę.
Przed pierwszym łykiem trochę się zamyśliłem i...

SELECT Kurczak, Pieczarki, Curry, SosCzosnkowy

#wtf

Pitrek1991

@artur52: C ? :D 85C MINIMUM :D lub 80D :P

Marcin.Miga

Oj, tam. Ja piszę tyle selectów, że bardzo często w adres przeglądarki z przyzwyczajenia walne :)

Shalom
2018-01-16 17:11

Z cyklu "co kraj to obyczaj"
Rekrutowałem się niedawno do pewnej szwajcarskiej firmy (przypadkiem, ot jakiś rekruter mnie dręczył). Jedyna techniczna część całego procesu rekrutacji to było zrobienie kilku bardzo prostych zadań a'la codility (serio prostych, jedno to był w ogóle klasyczny foo-bar...). Cała reszta to było lanie wody o dupie marynie. Firma generalnie zrobiła na mnie słabe wrażenie, raz bo moim zdaniem w ogóle nie weryfikowali technicznych skilli (czyli szansa na idiotów w pracy wysoka), a dwa bo powiedzieli że mają dress code i że cisną ostro overtime i generalnie "siedzisz w biurze dopóki jest robota". I to wszystko za raczej przeciętne szwajcarskie wynagrodzenie.

Dostałem dziś feedback że niestety nie są zainteresowani, bo w trakcie jednego ze Skype interview... nie miałem na sobie garnituru i krawata :D I to nawet nie tak że siedziałem nago albo w różowym dresie - generalnie chodzę w koszulach na co dzień i w tym przypadku też miałem na sobie jakąś koszulę. No ale bez krawata i marynarki...

#intervew #wtf #dresscodeseriousbusiness

Julian_

@jarekr000000: serio, daruj sobie takie satanistyczne żarty

Shalom

@jarekr000000: w sensie po ciszy z mojej strony? Nic z tych rzeczy ;) Powód ciszy jest dużo bardziej trywialny -> https://www.gettyimages.ie/ev[...]he-seccon-picture-id919729018 ;)

Laran
2017-12-27 18:33

Bezpieczne hasło? Minimum 16 znaków, duże i małe litery, znaki specjalne, liczby, numer buta, rymowanka albo... https://github.com/danielmiessler/SecLists/pull/155

#humor #wtf

vpiotr

@karsa: zamiast wszelkiego rodzaju generatorów (które mogą być monitorowane) polecam np. urandom:
https://www.howtogeek.com/how[...]ssword-from-the-command-line/

karsa

Ale to nie generator to trolling ;)

karolinaa
2017-07-11 13:39

Donald Trump o o roli ojca w rodzinie: Ja dostarczę funduszy, ona zajmie się dziećmi. Nie będę przecież z nimi łaził po Central Parku.
Donald Trump w 2006: Gdyby Ivanka nie była moją córką, chętnie bym się z nią przespał.
Donald Trump o przypadkach gwałtów w armii amerykańskiej: Co ci geniusze sobie myśleli, wpuszczając tam kobiety?
Donald Trump gdy w wieku 58 lat żenił się z młodszą o 24 lata Melanią Knauss: Jeśli musisz używać viagry, to znaczy, że to nie ta kobieta.
Donald Trump w 1997: Wszystkie kobiety wychodzą za mąż dla pieniędzy.

I to on jest Prezydentem najpotężniejszego kraju na tej planecie. To jego wybrało miliony amerykanów. #wtf

filemonczyk

kiedys myslalem ze ludzie wyksztalceni sa raczej odporni na propagande, mialem krag znajomych na studiach gdzie raczej smialismy sie z tego taniego gowna zapodawanego w mediach glownego nurtu, czy to polskich czy zagranicznych. Jednak to jak ludzie sa niezdolni do samodzielnego składania faktow w calosc jest przerazajace, a wlasciwie przygnebiajace.

somekind

To Trump został już prezydentem Chin?

Shalom
2017-04-25 09:27

Ciekawostka na temat SQLite. Co się stanie jeśli do kolumny Integer wstawimy coś większego od maxinta? Błąd? Wyjątek? Doda się maxint? Doda się null? Nic z tych rzeczy!
Nastąpi konwersja na typ real o_O
Dodatkowo select x+1 dla x będącego maxint zwróci nam ujemny wynik ze wzgledu na overflow.

http://jakegoulding.com/blog/2011/02/06/sqlite-64-bit-integers/

#sqlite #wtf #sql #overflow

Marcin.Miga

A co zrobi MySQL w domyślnej konfiguracji w takiej samej sytuacji? Walnie "WARNING" i wstawi maxint...

Adam Boduch
2017-04-11 11:41

Zastanawiałem się czy uczyć się Angulara 1 czy Angulara 2. Tymczasem wyszedł już Angular 4, Zatem moje pytanie: uczyć się Angulara 4, czy czekać na Angulara 5? ;)

#wtf #angular

P.S. Podobno czwórka jest kompatybilna z dwójką ;)

grzesiek51114

@Adam Boduch: skontaktuj się z devami i poproś o wszystkie materiały do Angulara 6. Tego się ucz, a jak już wejdzie szóstka to przez dwa tygodnie będziesz mógł powiedzieć, że oszukałeś system. Później sytuacja wróci do normy, bo wejdzie siódemka...

Artur Protasewicz
2016-10-26 10:25

#csharp #wtf

Jak chcesz rozruszać mózg, to mózg ci pomoże.

Zachciało mi się zmieniać cudzysłowy na apostrofy...

Stack<int> stk = new Stack<int>();
string expr = "(x + y + (z % 5))";
string x = "";
//...
//działa
foreach (int i in stk)
{
  x += "{" + i + '|' + expr[i] + '}';
}
//...
//nie działa
foreach (int i in stk)
{
  x += '{' + i + '|' + expr[i] + '}';
}
Artur Protasewicz

@fasadin: Prawdę mówiąc LINQ mnie korci od dawna, że tak jako zupełny lamer powiem, że na pierwszy rzut oka ma coś z SQL postawionego do góry nogami, a to już nie jest mi obce. Byłem po lekturze zapisu tego, jak wyrażenie lambda w kolejnych etapach wygląda w LINQ (przepraszam ale link mi gdzieś wcieło - to było z MSDN) - zachęcające w sumie. I zachciało mi się upiększać kod. StringBuilder... itp. mam mnóstwo zaległości. 8 lat pracy w firmie niekomputerowej zrobiło swoje, choć to był bardzo wartościowy okres. Jest jedno ale - mam stabilizację i c# robię praktycznie tylko dla przyjemności. Nie wiem czy chciałbym znowu robić tylko soft zawodowo.

fasadin

@Artur Protasewicz: linq nie musisz robic ze skladnia sql mozesz po prostu uzywac extension method. Wywolujesz ja jedna po sobie