Problem: dostawca EntityFramework dla MySQL dla .NET Core 2.0 nie działa mi na bazie danych, którą mam na Azure, poprzez ClearDB (bo za darmo!). Po prostu nic nie zwraca, nic nie ściąga, tylko sobie proces wisi w nieskończoność.
Szukałem w internecie, nic ciekawego.
Zrobiłem zrzut komunikacji wiresharkiem i tu zaczyna się dziwnie - bo on sobie łączy się z serwerem, a potem się rozłącza. I tutaj wisi.
Zgłosiłem błąd.
Minął jakiś czas.
Ktoś odpowiedział, że to pierwsze połączenie to sprawdzenie wersji. A potem powinien się rozłączyć i połączyć po raz drugi, i wiecie - na przykład pobrać dane.
Wyrzuciłem zatem NuGeta, dodałem referencje ręcznie (chwała .NET Core 2.0, cóż za postęp, już się da!) i debugujemy.
To nie jest wina Pomelo.EntityFrameworkCore, problem leży głębiej - w MySqlConnector.
Ściągamy źródła, debugujemy.
Dwie godziny później okazuje się, że on wysyła komendę QUIT, serwer go rozłącza, a on sobie głupi na coś czeka nadal.
Zgłosiłem błąd.
Przetestowałem kombinacje inne, przede wszystkim dodanie timeouta do połączenia. Naprawia mi sytuację.
Autor biblioteki stwierdza, że tutaj jest oczekiwanie na odpowiedź "OK" od serwera. Ale po diabła czekać na komunikat OK skoro i tak zamykamy sesję? Zakończmy ją sami zatem.
I oto panie i panowie powstaje mój najdziwniejszy Pull Request w historii - usuwa jedną linijkę. I tyle.
Tak, to ewidentny problem z ClearDB. Z tego co zrozumiałem to powinien odpowiedzieć "OK" i wysłać pakiet TCP-FIN, aby zakończyć połączenie. Z kolei MySQL 5.7 i nowszy po prostu odpowiada TCP-FIN. A ClearDB (niby to 5.5.6, ale diabli wiedzą) wysyła ACK i... nic.
Więc usunięcie oczekiwania na potwierdzenie albo zamknięcie połączenia ze strony zdalnego serwera, tylko zamknięcie z naszej strony to workaround, ale wystarczająco dobry, jak się wydaje - i tak po wysłaniu QUIT nie robimy nic więcej (i nawet nie da się zrobić nic więcej), więc dlaczego samemu się nie odłączyć, zamiast czekać na serwer?
(i żeby nie było: biblioteka zawsze czekała na dane zwrotne, ale pakiet TCP-FIN powoduje zerwanie połączenia, co i tak rzucało wyjątkiem)
Z cyklu "Głupie pomysły na języki programowania":
WÄHLEN s.id_student, name, surname AUS exams e, students s, WOHER s.id_student=e.id_student UND passed='N' MIT ZÄHLEN(*)=(WÄHLEN HÖCHST(ZÄHLEN(*)) AUS exams WOHER passed='N' GRUPPIERE NACH id_student) GRUPPIERE NACH s.id_student, name, surname SORTIEREN NACH surname;
Oto DE/SQL.
No cóż, gdyby historia drugiej wojny potoczyła się inaczej, pewnie tak by się dzisiaj pisało, i stosowało nieznane w naszej rzeczywistości języki programowania Wagner, Zuse++ itd. ;)
Trwa (trzecia godzina się zaczęła) prezentacji z okazji premiery Visual Studio 2017. W międzyczasie ściągam sobie instalator offline dzięki vs_community.exe --layout .\offline
. Jak na razie 15 GB. Rany.
@Azarien: chyba że chodzi o maszynowe tłumaczenie MSDN, wtedy może się to okazać syzyfową pracą.
Nie, to jest tłumaczenie ludzkie, ale niestety wygląda na to że tłumacz dostaje po prostu tabelkę z tekstami i tłumaczy każdy bez kontekstu, a potem brakuje kogoś, kto by ogarnął całość. Tragedii nie ma jeśli chodzi o ogólną jakość tłumaczenia, ale poprawki są potrzebne.
https://github.com/torvalds/linux/pull/335. Pewnie było, ale nadal dobre.
http://helloworldquiz.com/ -> Odróżnicie ABAP od Cobola? Lua od JavaScriptu? Elixir od Erlanga? :-)
Dla potrzeb LLM (RAG) dość dobrze używało mi się Qdrant – https://qdrant.tech
dotnetowe sekrety działają z automatu przez zmienne środowiskowe, więc możesz je spo...
dotnetowe sekrety działają z automatu przez zmienne środowiskowe, więc możesz je spo...
Wi-Fi jest trudne i skomplikowane – polecam poczytać https://www.wiisfi.com/ :)
Wi-Fi jest trudne i skomplikowane – polecam poczytać https://www.wiisfi.com/
Możesz pisać aplikacje C++ dla Androida przez bibliotekę Qt: https://doc.qt.io/qt-6/...
Możesz pisać aplikacje C++ dla Androida przez bibliotekę Qt: https://doc.qt.io/qt-6/...
W aktualnych wersjach .NET, jeżeli chcesz skorzystać z przestrzeni nazw Windows.*, t...
Jeżeli chcesz korzystać z ML w C# to z tego co kojarzę dobrym rozwiązaniem jest ONNX...
Jeżeli chcesz korzystać z ML w C# to z tego co kojarzę dobrym rozwiązaniem jest ONNX...
JVM zapewnia podobny mechanizm, jako parametr -XX:OnError można podać mu prośbę o zrobienie czegoś, jest też inna flaga którą można wykonać memory dumpa na crashu czy przy outofmemory error - polecam ;D