Bo mi tu coś latało i byłem ciekaw co ;-)
Podobne postybeta
Ładny lis :-)
Kolejne książki :-)
Jestem lepszy od UE ;-)
Obserwacje z prakacji
Potrzebny mi radar....
W ramach ładnych rzeczy - dziś była ładna pogoda w Juracie :-)
I w piekarni był on.....
public double[] intersection(double[] startA, double[] endA, double[] startB, double[] endB) {
fixDirection(startA, endA, 0);
fixDirection(startB, endB, 0);
if (startA[0]-endA[0]==0 && startB[0]-endB[0]==0) {
fixDirection(startA, endA, 1);
fixDirection(startB, endB, 1);
}
var axisStart = new double[]{(startA[0]+startB[0])/2,(startA[1]+startB[1])/2};
var axisEnd = new double[]{(endA[0]+endB[0])/2,(endA[1]+endB[1])/2};
var axisMiddle = new double[]{(axisStart[0]+axisEnd[0])/2,(axisStart[1]+axisEnd[1])/2};
translate(startA, axisMiddle, -1);
translate(endA, axisMiddle, -1);
translate(startB, axisMiddle, -1);
translate(endB, axisMiddle, -1);
translate(axisStart, axisMiddle, -1);
translate(axisEnd, axisMiddle, -1);
var base = toPolar(axisEnd);
var polarStartA=toPolar(startA);
var polarEndA=toPolar(endA);
var polarStartB=toPolar(startB);
var polarEndB=toPolar(endB);
rotate(polarStartA, base, -1);
rotate(polarEndA, base, -1);
rotate(polarStartB, base, -1);
rotate(polarEndB, base, -1);
var a = fromPolar(polarStartA);
var b = fromPolar(polarEndA);
var c = fromPolar(polarStartB);
var d = fromPolar(polarEndB);
var solution = solution(a,b,c,d);
solution=toPolar(solution);
rotate(solution,base,1);
solution=fromPolar(solution);
translate(solution,axisMiddle,1);
return solution;
}
private double[] solution(double[] a, double[] b, double[] c, double[] d) {
var _ab1 = coeffs(a,b);
var _ab2 = coeffs(c,d);
var y = (_ab1[0]*_ab2[1]-_ab2[0]*_ab1[1])/(_ab1[0]-_ab2[0]);
var x = (y-_ab1[1])/_ab1[0];
return new double[]{x,y};
}
private double[] coeffs(double[] a, double[] b) {
var dx = b[0]-a[0];
var dy = b[1]-a[1];
// dx is almost guarantee not to be 0 ;-)
var _a = dy/dx;
var _b = a[1]-_a*a[0];
return new double[]{_a,_b};
}
private double[] fromPolar(double[] polar) {
return new double[]{Math.cos(polar[1])*polar[0], Math.sin(polar[1])*polar[0]};
}
private void rotate(double[] polarEndB, double[] base, int dir) {
polarEndB[1]+=base[1]*dir;
}
private double[] toPolar(double[] rect) {
var dx = rect[0];
var dy = rect[1];
var r = Math.sqrt(dx * dx + dy * dy);
var alpha = Math.atan2(dy,dx);
return new double[]{r, alpha};
}
private void translate(double[] startA, double[] axisMiddle, int dir) {
for (var i=0; i<2; i++) {
startA[i]+= axisMiddle[i]* dir;
}
}
private void fixDirection(double[] startA, double[] endA, int dir) {
if (startA[dir]>endA[dir]) {
var tmp = new double[2];
tmp[0]=startA[0];
tmp[1]=startA[1];
startA[0]=endA[0];
startA[1]=endA[1];
endA[0]=tmp[0];
endA[1]=tmp[1];
}
}
Obserwuję ostatnio, że część ludzi naprawdę nienawidzi LLMów/AI.
Ja siebie zaliczam raczej do entuzjastów, ale takiego niepewnego czy to jest coś co pomoże, odbierze mi/nam pracę czy zawiedzie.
Ale tak się zastanawiałem i w przypadku tych, którzy nienawidzą mam wrażenie, że tu chodzi o "tożsamość", ktoś pisze kod i czuje dumę z tego, że ten kod jest dobry, elegancki, efektywny, ktoś inny pisze tekst i ten tekst jest dobrej jakości, czytelny.
Ktoś patrzy na siebie i identyfikuje się z tym co tworzy i nagle pojawia się coś co całkiem dobrze udaje, ale miewa tak gigantyczne dziury w stylu i jakości, że to aż tych ludzi obraża.
Tzn. ja sobie tak to wyobrażam.
Ja mam inaczej, tak naprawdę lubię pisać kod czy tekst, mam wrażenie że pisanie tekstu jest prostsze. Ale na jakimś tam poziomie to pisanie kodu czy tekstu są dla mnie wtórne. Kod to tylko narzędzie do rozwiązania problemu, do zbudowania czegoś, tekst to tylko jakaś tam forma moich myśli.
Nie identyfikuję się z nimi. Tak, bywam z nich dumny, często się wstydzę ;-) ale to nie jest źródło mojej tożsamości.
Większą dumę odczuwam ze zbudowania czegoś, z jakichś pomysłów architektonicznych, z jakichś idei.
Kod czy tekst są dla mnie realizacją tych rzeczy, ale mimo wszystko są tylko formą pośrednią.
Przez to wszystko ja widzę w LLMach/AI narzędzie. Które dużo umie, ale jest bardzo nierówne, ale nie czuję jakiegoś obrzydzenia czy sprzeciwu.
Tak, mnie też męczy patrzenie na obrazki generowane przez AI, bo maja "swój styl" ale taki syntetyczny, w tekście który piszą LLMy nie ma osobowości, a kod też jest taki sobie - tu najbardziej mi przeszkadza to, że pisze go obcy i nie zawsze umiem podążać jego "tokiem myślenia".
Nadal, w wielu miejscach to jest to co mi wystarcza.
I tak część mnie się zastanawia jaki kawałek pracy mi zabiorą LLMy, chociaż aż tak się nie boję o programistów, bo do momentu AGI i PMów którzy wiedzą co chcą zbudować, jesteśmy kryci....
Taka obserwacja z pracy z vibe codingiem...
Pracuję w czymś, co de facto jest startupem wewnątrz firmy. Raz widać to bardziej, raz mniej. Ostatnio bardziej. Cała koncepcja nagle się zmieniła i coś, co zbudowałem w ramach zabawy z vibe codingiem jako prototyp (najpierw tworząc historyjki i wstępne szkice), powoli staje się głównym silnikiem docelowego rozwiązania.
Teraz próbuję przenieść część kodu z tego prototypu do lambd. W przyszłości chcę mieć pełną funkcjonalność prototypu, czyli modyfikowanie plików językiem naturalnym, ale na razie potrzebuję prostego, deterministycznego API zmieniającego te pliki według parametrów. Bo to zostało obiecane klientowi.
I tu pojawia się problem z vibe codingiem: ten kod pisał obcy.
Co innego mieć kod w prototypie, co innego wrzucać go do aplikacji obsługującej klientów. Trzeba ten kod przejrzeć, a jest tego od groma. Trzeba dopisać lepsze testy. Claude oczywiście napisał własne testy, ale przed robieniem demka w ramach executive summary chciałem pokazać animację z jedną drogą, zmienić ją toolem i pokazać wynik... Droga złośliwie się nie zmieniała. Choć testy przechodziły, to testowały to, co Claude'owi wydawało się właściwe, a nie to, co faktycznie trzeba było zrobić ;-)
I taka praca męczy, bo więcej czasu spędzam na próbach zrozumienia, co Claude miał na myśli, niż na kodowaniu.
Mam zresztą szerszą obserwację z pola walki i z otoczenia. Claude i podobne narzędzia są świetne do dobrze zdefiniowanej roboty na istniejącym kodzie. Mieliśmy na przykład problem z mapą: były na niej wszystkie klasy dróg, ale system generujący z nich 3D domyślnie operuje na 2-3 najwyższych klasach, a na pozostałych tylko wtedy, gdy się go do tego zmusi (magiczny przełącznik Urban Roads). W efekcie klient widział na mapie drogi, których w 3D nie było. Z Claude'em byłem w stanie to szybko ogarnąć: poczytał o API map, porównał z zapytaniem do serwera i teraz na mapie widać dokładnie te drogi, które trafiają do 3D. Prosto opisane zadanie i zrobione super.
To samo sprawdza się, gdy robi się coś zupełnie nowego od zera. W kilkanaście minut ma się prototyp, który samemu pisałoby się 2-4 tygodnie, i to od razu z ładnym UI.
Problemy zaczynają się, gdy chcesz to ulepszyć, dodać złożone warunki i specyficzną logikę biznesową. Słuchając "Security Now!" i innych podcastów z sieci TWiT, widzę, że to powszechne. Leo Laporte próbuje z Claude'em przepisać swój stary system do faktur i mam wrażenie, że od dwóch miesięcy "prawie skończył". Ma wszystko w ładnym UI, tylko system wciąż nie do końca działa tak, jak powinien ;-)
Moja podróż dziś była dziwna.
O 9:32 miałem jechać Pendolino do Gdyni ;-)
O tym:
Wsiadłem, zająłem moje miejsce 82 i najpierw było spóźnione 8 minut, 12, 16, 20, 25... 59... i komunikat, że się zepsuło i pojedziemy innym pociągiem ;-)
Po jakichś 90 minutach przyjechał taki:
Taki nie do końca do Pendolino podobny ;-)
Z przedziałami.... jechał sobie będąc spóźnionym, tak trochę przed Warszawą pan konduktor chodził i widząc gdzie jadę stwierdził, to na Warszawie Wschodniej będzie czekać nowy pociąg i tam trzeba wsiąść ;-)
Więc na Wschodniej czekał na nas ten:
Który dowiózł mnie do Gdyni ;-)
Skąd jeszcze inny pociąg wiezie mnie do Juraty ;-)
Z ciekawych rzeczy: w jednym z pociągów spotkałem Juliusza Machulskiego ;-), obejrzałem 4 odcinki Reachera, 1 odcinek Stuarta i 2 albo 3 odcinki The Big Bang Theory.
Teraz miałem zacząć robić zadanka, ale pisanie bloga jest prostsze ;-)