Co nowego na forum?

Utknąłem w Polsce Flame 2018-02-16 11:45

Złoty Młot dodał post w Ile zarabiacie?

3 minuty temu wiek: 24 doświadczenie: ~2,5 roku stanowisko: C++ developer zarobki: 7500 brutto UoP...

krwq dodał komentarz w Problem z curl

6 minut temu @_0x666_: nie znałem, akurat w tym przypadku mało przydatne bo tylko "-lcurl" dodaje...

marcinzel dodał wątek Qt dostęp do urządzenia HID

7 minut temu Witam, W projekcie który robię chciałem wykorzystać czytnik kart NFC. Czytnik któreg...

krwq dodał komentarz w Problem z curl

7 minut temu @atmal, na linuxie to bez znaczenia czy dasz rozszerzenie, a mi się łatwiej filtruje...

Gayk dodał komentarz w EPAM Systems, Java Academy - opinie

9 minut temu Też podpinam się do prośby kolegi

katelx dodał post w Jakie masz poglądy? Lewicowe/Prawicowe/Centrum

22 minuty temu http://8values.m4sk.in/result[...];d=91.1&g=73.0&s=90.6 uosobienie lewactwa ;)

MATORAX dodał post w Diagram klas w UML - potrzebna pomoc w zrozumieniu powiązań.

28 minut temu yarel napisał(a): Nie wiem dlaczego upierasz się na to, żeby ApplicationManager miał...

Azarien dodał komentarz w Jakie masz poglądy? Lewicowe/Prawicowe/Centrum

31 minut temu Tacy postępowi są ci lewacy, ale gdy nauka przypadkiem nie jest po ich stronie to ty...

Azarien dodał post w Czym jeździcie?

35 minut temu Chłodny Mleczarz napisał(a): Czym jeździcie? Rok, model, marka, moc Może jeszcze num...

Pin Doll dodał wątek najnowsze visual studio. czy wszystko z nim ok?

48 minut temu Zakładam temat tu bo piszę w C#, ale sprawa jest pewnie ogólniejsza bo chodzi o visu...

atmal dodał komentarz w Problem z curl

49 minut temu Na Ubuntu .exe?

Brunatny Rycerz dodał post w PHP CURL - pobieranie zawartości innej strony

dziś, 10:44 A jest jakaś funkcja w PHP która renderuje treść? Czyli zwróci mi dokładnie taki kod...

Ponton dodał post w Sii - Warszawa - opinia?

dziś, 10:40 Niebieski Karp napisał(a): Pytanie nie było czy outsourcing ssie, ale opinia o Sii....

Nyczus dodał wątek Virtualbox - nie działa internet

dziś, 10:40 Witam otóż wczoraj zainstalowałem sobie virtuala i windows'a xp. Problem w tym, że n...

Slepiec dodał post w monitorowanie plików w folderze - zrobić to za pomocą repozytori...

dziś, 10:39 MVC czy MVP wsparty obserwatorami było by spoko, ale obecnie pewnie prościej będzie...

Slepiec dodał komentarz w monitorowanie plików w folderze - zrobić to za pomocą repozytori...

dziś, 10:37 MVC powstał szybciej niż ktoś wspomniał o Curdie :P

Smutny Programista dodał post w Linq w widoku

dziś, 10:37 Dodatkowo w widokach nie powinno być żadnej logiki. Zapytanie linq to już pewnego ro...

kq dodał post w Wysyłanie zmiennych string w tablicy char.

dziś, 10:35 send(mainSocket, suma_s.data(), suma_s.size(), 0);

mr_jaro dodał post w Co jest bardziej szkodliwe dla karty graficznej

dziś, 10:32 Trzeźwy Samiec napisał(a): Tylko kto kupuje karty dla górników? Jak wyjdą nowe karty...

czysteskarpety dodał post w Co jest bardziej szkodliwe dla karty graficznej

dziś, 10:28 sporo też zależy od wykonania karty, kondensatorów, lutów, kostek pamięci, cewek itp...

Popularne wpisy na mikroblogu

Hagefid
dziś, 09:12

Opublikowałem nowy artykuł z cyklu tworzenia własnego komputera w symulatorze Logisim.

https://przemyslaw.holownia.i[...]uklady-dodajace-i-odejmujace/

Opisuję w nim:

  • systemy liczbowe (szesnastkowy, dziesiętny, ósemkowy, dwójkowy),
  • sposoby dodawania binarnego,
  • zapisu liczby ujemnych w różnych systemach:
    • Znak-Modul (ZM),
    • Uzupełnień do 1 (U1),
    • Uzupełnień do 2 (U2)).

Pokazuję także jak zbudować:

  • półsumator jednobitowy,
  • pełny sumator jednobitowy,
  • 8-bitowy sumator,
  • 8-bitowy układ umożliwiający odejmowanie 8-bitowych liczb.
Hagefid

@furious programming: Dziekuję za sugestię i już dodaję spis treści z linkami :) Z pewnością będzie przydatny.

furious programming

Trochę rzeczy jest do poprawy. Nie podoba mi się nazywanie najstarszego bitu, bitem pierwszym z lewej – mało fachowe określenie. Reszta merytorycznie w porządku, jednak wiele do życzenia pozostawia formatowanie oraz język:

  • niektóre pary paragrafów nie są rozsunięte,
  • dość losowo stawiasz przecinki – gdzieniegdzie ich brakuje, a w innych miejscach jest ich za dużo,
  • dużo powtórzeń,
  • miejscami formatowanie rozjeżdża się lub jest złe (np. puste pola kodu).

Na pierwszy rzut oka to tyle. Jeśli o poprawność językową chodzi, to polecam narzędzie LanguageTool. ;)

katelx
2018-02-16 16:59

chyba kazdego programiste co jakis czas nachodzi ochota na napisanie czegos od zera, albo przynajmniej po swojemu. chodzi mi o problemy ktore sa juz dobrze poznane i rozwiazane, a patterny (czy nawet gotowce) sa dostepne po paru kliknieciach, a mimo to wolimy poswiecic tygodnie zycia na rozwiazywanie ich po swojemu z przeswiadczeniem ze bedzie to lepsze, albo ze przynajmniej bedziemy sie przy tym dobrze bawic i czegos sie nauczymy.

zdarza mi sie spedzac 10x wiecej czasu na zadaniu bo nie chce po prostu dokladac ifa, choc wiem ze team bylby z tym ok a refactoring moze okazac sie bledogenny, innym razem spedzam tydzien na tuningowaniu swojej implementacji selectorow choc wiem ze netty by w zupelnosci wystarczyl.
staram sie jednak nie przesadzac :) natomiast ostatnio zetknelam sie z prawdziwym przypadkiem koderskiej sraczki i zastanawia mnie szczerze jaka byla motywacja osoby (swoja droga doswiadczonego kodera i "bardziej senior" kolegi) ktora wy...produkowala takiego potwora.

zadanie wydawaloby sie proste, nalezy porownac performance algorytmow wewnatrz firmy vs performance rynku, tzn zebrac dane z tego co sie wydarzylo na kilkunastu gieldach + to co wyslalismy my, wrzucic to do bazy i dac znac analitykom zeby sobie z tego wyciagali wnioski.

logicznym byloby:
1) podpiac sie pod jakiekolwiek proxy miedzy algorytmami a gielda, wyciagnac z przesylanych komunikatow potrzebne dane i wrzucic to do bazy

ale po co gdy zamiast tego mozna (oczywiscie nie posilkujac sie zadnymi zewnetrznymi libkami jak amatorzy):
1) zawalic kod algorytmow logowaniem, bez jakiegos szczegolnego porzadku/regul/formatu
2) napisac w javie serwis parsujacy logi i wrzucajacy interesujace linijki do nowego skompresowanego pliku. serwis taki rzecz jasna musi dzialac na tym samym boxie co algosy, co daje kilkadziesiat nowych procesow zawracajacych glowe swoim statusem
3) napisac w javie serwis ftp ktory pozwala na sciagniecie sparsowanych logow, oczywiscie jak wyzej - deployment na kazdy box
4) napisac w javie superobiektowy (mala klasa na kazda metode ;)) generator db schema i dml na podstawie logow i ladujacy to do nowo powstalej bazy mysql
5) napisac w scali serwis webowy do analizy performance oferujacy 0.01% funkcjonalnosci obecnie uzywanego przez analitykow systemu, nie udostepniac go poza dev bo brakuje zintegrowanej z korpo autentykacji/autoryzacji
6) napisac w javie serwis webowy do sciagania dumpu tabel z mysql za dany dzien i dac do niego dostep jednemu z analitykow.

wspomniany w punkcie 6 analityk codziennie rano sciaga dane za poprzedni dzien, laduje to do swojej bazy przy uzyciu jakiegos komercyjnego narzedzia etl ktore dostosowuje dane do wymaganego formatu.
tzn juz nie sciaga bo cos sie psuje miedzy punktem 3 a 4 i nikt nie wie co. oryginalny autor zmienil team a jego "dzielo" nie figuruje w budzecie, naprawdopodobniej ktos bedzie mial sie okazje popisac swoim rozwiazaniem za pare miesiecy jak bedzie trzeba zrobic raport z performance ;)

z innej beczki, w ramach wykorzystania zeszlorocznego budzetu i tego ze kiedys zajmowalam sie implementacja algo dla mutual market access (dla zainteresowanych https://www.hkex.com.hk/Mutual-Market/Stock-Connect?sc_lang=en) zostalam dolaczona jako 'ekspert techniczny' do wizyty u jednego z naszych chinskich klientow.
w ciagu jednego dnia bylam na szczycie drugiego i czwartego co do wysokosci budynkow na swiecie (https://en.wikipedia.org/wiki/Shanghai_Tower i https://en.wikipedia.org/wiki/Ping_An_Finance_Centre), musze sie zglosic do ksiegi guinessa ;)
w sieci jest sporo filmikow z szanghajskiego budynku, za to nowy wiezowiec w shenzhen nie jest jeszcze chyba oficjalnie otwarty dla zwiedzajacych, podejrzewam ze gdy sie to stanie to sporo ludzi oszaleje na punkcie szklanych podlog przy krawedzi, ciekawe kiedy ktos postanowi sprawdzic wytrzymalosc ;))
mam straszny lek wysokosci ale odwazylam sie na podejscie z mysla ze (nawet w chinach) wiezowce nie sa budowane przez software engineerow wiec nie ma sie czego bac (ale tym "100kg" z niebieskiej plakietki juz nie zaufalam)

Plissken

Szkoda że cała się nie pokazała... albo chociaż stópki ;)

katelx

@jarekr000000: jak jestes niezaleznym ekspertem "ratujacym" projekt to jasne, gorzej gdy "tech lead" projektu stwierdza "dodaj tam ifa i bedzie" ;) @zerogravity zawsze chcialam byc blogerka modowa ale nigdy nic z tego nie wyszlo... to moze chociaz mikroblogerka ;)

wartek01
wczoraj, 00:29

Trochę o tym, jak działają niektórzy PMowie.

Jako konsultant IT jednym z moich obowiązków jest sprawdzanie, co zespół developerski chce zrobić (i jak) i ocenienie, czy w ogóle to przejdzie przez procedury korporacyjne tak, żeby w połowie drogi nie zorientowano się, że koncepcja nie ma szansy zadziałać..

Całość rozbija się o skorzystanie z gotowego modułu, który jednak nie jest przystosowany do obowiązujących wytycznych ds. bezpieczeństwa w firmie. Tzn. można z tego korzystać, jeśli aplikacja będzie działać wewnętrznie, ale nawet nie chcę myśleć co by się stało gdyby została wystawiona jako aplikacja "dla świata".

PM oczywiście docieka, czemu muszą władować środki w coś, co już działa. W tym momencie popełniłem fatalny błąd ponieważ stwierdziłem, że z technicznego punktu widzenia zadziałać to może i zadziała ale żaden compliancy-check lub audyt tego nie przepuści. Oczywiście słowo-klucz "zadziała" przebiła się do świadomości, natomiast cała reszta zdania straciła jakby na znaczeniu.

Osoby dramatu:

  • PM - niepolskojęzyczny, angielski też nie jest jego pierwszym językiem.
  • Technical Leader - Polak, od kilku lat w organizacji

PM: So we can use this module?
TL: No, we can't,
PM: Why not? We've just heard we can.
Ja: I said no such thing.
PM: You just said we can use it.
TL: What did you hear?
PM: That we can use it.
TL: When?
PM: Just a moment ago.
Ja: I also said it's not security-compliant.
PM: But it may work? From technical point of view?
Ja: From technical point of view it may work but...
PM: So we can use it.
TL: Ku++a (+ facepalm)
PM: Don't think I am stupid. I know what "ku++a" means.

wartek01

Chodzi o to że oni chcieli najpierw rozbudować a później wystawić ten moduł - który do teraz działał w intranecie - na zewnątrz. Bez żadnych zmian w security itp. PM usłyszał, że to tylko kwestia otwarcia firewalla, natomiast ja od razu rzuciłem że będą musieli przerobić logowanie, co TL oszacował w wycenie powołując się na mnie. PM zwołał spotkanie, resztę już znacie...

karsa

gruba struktura organizacyjna ;]

jarekr000000
2018-02-14 20:22

Ale dziś magię rozwaliłem. Przypadkiem robiąc testy manualne na starym projekcie springowym odkryłem, że jakoś, tak jakby, nie działaja transakcje. (@Transactional).
Wiadomo - to Spring, jest setki powodów, dla których może ta annotacja nie zadziałać - więc dzień był ciekawy. sprawdzamy po kolei proxy, interface, component scany...
Na koniec piękny kwiatek wyszedł (po całym zesputym dniu) - otóż aplikacja używa annnotacji:
javax.transaction.Transactional, zamiast org.springframework.transaction.annotation.Transactional.
Sprawdzanie tego zostawiłem na późno, bo przecież w dokumentacji Springa stoi jasno
The standard javax.transaction.Transactional annotation is also supported as a drop-in replacement to Spring’s own annotation. Please refer to JTA 1.2 documentation for more details.
źródło
Co więcej w testach ... działa. A testy akurat w tym projekcie są nie na mockach tylko podnoszą faktycznie spring context.

No i wiadomo, jak już wszystko inne zawiodło, to podmieniłem na Springową i... działa. WTF?
i wtedy trafiam na taki piękny kwiatek - jak masz javax.transaction.Transactional, ale w classpath nie ma javax.ejb.TransactionAttribute. co się zdarza przy użyciu hibernate na tomcatu... to ten @Transactional po cichu jest zignorowany. Boskie.
Na walentynki

EDIT - uzupełnienie : To nie do końca tak. Po prawdzie to nawet javax.transaction.Transactional nie było w classpath w runtime. Zemściło się:

  • PROVIDED (masz klasy w kompilacji, ale nie w runtime, w zasadzie wymagane przy budowaniu na tomcata i application serwery (np. javax.servlet.* musisz mieć, ale raczej nie chcesz zdeployować...)
  • mieliśmy w runtime klasę javax.transaction.Transaction (i ja i kolega przeoczyliśmy drobną różnicę w nazwie),
  • teraz najlepsze: JLS 13.5.7: "... removing annotations has no effect on the correct linkage of the binary representations of programs in the Java programming language." - czyli to Java ignoruje jak jak nie ma annotacji w runtime
    i wtedy biedny Spring nie ma nawet szans.... (tak getAnnotations() na metodach i klasach zwraca .... nic, mimo, że w bytecode są)
  • a sam Spring zawiera taki kod:
    if (jta12Present) {
            this.annotationParsers.add(new JtaTransactionAnnotationParser());
        }
    }

gdzie:

    jta12Present == ClassUtils.isPresent(
    "javax.transaction.Transactional", AnnotationTransactionAttributeSource.class.getClassLoader());

Podsumowanie: tu w zasadzie sam Spring jest niewinny - bo i tak nic nie może zrobić, najbardziej zaskakujące jest zachowanie Classloader, który po prostu zignoruje annotacje niedostępne w runtime w classpath, przez co kod będzie się zachowywał jakby ich nie było. Fajne że to pochodzi z aplikacji, któara od ponad roku jest na produkcji i nikt tego nie zauważył, co więcej udało się już znaleźć drugą aplikację zbudowaną na tym samym stosie, która ma ten sam problem.
Ogólnie brawa dla annotacji i poleganiu na runtime w rozwiązywaniu swoich problemów. Btw. annotacje security na szczęście działają... na szczęście, w końcu na co więcej można liczyć jak się z annotacji korzysta.

jarekczek

Z małpą chodziło mi o to, że kopiujesz sobie dependency z jednego projektu do drugiego myśląc - jak nie zadziała, to mi komputer krzyknie. Sorry, nie krzyknął.

jarekr000000

@jarekczek: biblioteka miała być PROVIDED bo zawierała klasy, których na pewno do wara nie wrzucamy (np. pakiet servlet). W zasadzie błąd wynikał właśnie z przeoczenia, że do wara, natomiast wpadała biblioteka, która miała potrzebny pakiet ale nieco inną nazwę. W testach były używane dodatkowe na potrzeby testów jary, które znowu jak na złość miały potrzebną annotację. W jbossie i innych serwera taka klasa też znajduje się runtime ( i wtedy tym bardziej musi jar polecieć jako provided). Co więcej zespół cały czas pracuje z podobnym stosem bibliotek na JBOSS więc tym bardziej nie wyszło. Można powiedzieć, że nieszczęśliwy zbieg okoliczności. Ja uważam, że jak ktoś polega na runtime to sam sobie zaśłużył na takie kwiatki. Z dobrych rzeczy to mimo, że aplikacja z takimi "transakcjami" działała już długo na produkcji...to jej krytyczne częśći były napisane (inna firma) bez Springa tylko na ręcznych transakcjach. Więc tylko trochę pomniejszych metadanych jest niespójnych.