Temat ogólny 26371 73

O temacie

Autor Leinnan

Zaczęty 28.03.2016 roku

Wyświetleń 26371

Odpowiedzi 73

inż. Avallach

inż. Avallach

Administrator
posty7662
Propsy5238
NagrodyV
ProfesjaProgramista
  • Administrator
Nauka C# to świetny wybór choćby dlatego że Microsoft kupił i "prawie udarmowił" Xamarina, czyli platformę do robienia aplikacji mobilnych w C# które działają nie tylko na Windowsach, ale i na Androidach i iOSach.

Powtórz pytanie, bo w twoim ostatnim poście nie widzę niczego na co bym nie odpowiedział.

Wonski

Wonski

Gry (themodders@telegram)
radio engineer
posty256
Propsy91
ProfesjaProgramista
  • Gry (themodders@telegram)
  • radio engineer

Wonski
Gry (themodders@telegram)

Temat ogólny
#41 2016-09-12, 20:26(Ostatnia zmiana: 2016-09-12, 20:33)
Cytuj
Powtórz pytanie, bo w twoim ostatnim poście nie widzę niczego na co bym nie odpowiedział.
??

Coś dla chcących poznać c#, ale nie podstawy typu pętle for, while, hello world. Coś dla znających inne języki programowania. Coś co mogą polecić osoby znające tę technologię.
 

inż. Avallach

inż. Avallach

Administrator
posty7662
Propsy5238
NagrodyV
ProfesjaProgramista
  • Administrator
Nie czytałem w życiu książki o C#... ostatnią o programowaniu czytałem w 2000 roku (Visual Basic).
Takie rzeczy najlepiej czytać w internecie. MSDN to naprawdę najlepsze miejsce na świecie do nauki C# i .NETa.
To że coś jest wydrukowane nie znaczy że jest lepsze.

inż. Avallach

inż. Avallach

Administrator
posty7662
Propsy5238
NagrodyV
ProfesjaProgramista
  • Administrator
https://hackernoon.com/how-it-feels-to-learn-javascript-in-2016-d3a717dd577f
Takie prawdziwe xD

Swoją drogą polecam zainteresowanie się tematem. Sytuacja tworzenia w tym języku jest jak widać okropna, ale pomimo tego (a może dzięki temu) na luzie znajduje się oferty z przedziału 10-20k. Trzeba tylko mieć doświadczenie z tymi wszystkimi popularnymi bibliotekami. Ale w Javie przecież jest to samo.

Leinnan

Leinnan

Administrator
torsonic polarity syndrome
posty2671
Propsy3600
ProfesjaProgramista
  • Administrator
  • torsonic polarity syndrome
 
Mit der Dummheit kämpfen die Götter selbst vergebens

steam | slavic castles |  last.fm | moddb.com | Stary, najlepszy lider Sclavinii

inż. Avallach

inż. Avallach

Administrator
posty7662
Propsy5238
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

Temat ogólny
#45 2016-10-04, 19:11(Ostatnia zmiana: 2016-10-04, 19:16)
Właściwie ten artykuł jest właśnie o rodzaju "piekła zależności". Zrobienie czegokolwiek wymaga sięgnięcia po jakieś biblioteki. Z drugiej strony twój link zwraca uwagę na to że cała masa tych zależności instaluje się "po cichu" i nawet nie musimy o tym wiedzieć.

Czytałem to już kiedyś - i autor artykułu który podlinkowłem też. Wspomina w pewnym momencie właśnie że "Our libraries are huuuge, and sometimes we include pictures of Guy Fieri in them". A to jest żartobliwe nawiązanie do zdania z tego co to wysłałeś: "Each installation of Babel includes a picture of Guy Fieri, and there is nothing you can do about it".

Leinnan

Leinnan

Administrator
torsonic polarity syndrome
posty2671
Propsy3600
ProfesjaProgramista
  • Administrator
  • torsonic polarity syndrome
Zestaw darmowych ebooków od OReily. http://www.oreilly.com/programming/free/
 
Mit der Dummheit kämpfen die Götter selbst vergebens

steam | slavic castles |  last.fm | moddb.com | Stary, najlepszy lider Sclavinii

Wonski

Wonski

Gry (themodders@telegram)
radio engineer
posty256
Propsy91
ProfesjaProgramista
  • Gry (themodders@telegram)
  • radio engineer

Wonski
Gry (themodders@telegram)

Temat ogólny
#47 2016-10-19, 19:25(Ostatnia zmiana: 2016-10-19, 19:33)
http://www.cryptopp.com/
biblioteka z algorytmami kryptograficznymi. Dosyć obszerna.

Mam jeszcze kilka pytań czysto praktycznych..

Czy w pracy często i chętnie sięga się po biblioteki boost? Tzn mam na myśli czy boost jest traktowane jak rozszerzenie STL'a, czy raczej praca jest oparta wyłącznie o implementacje STL'a i inne "firmowe" biblioteki?
To samo dotyczy się testów jednostkowych..
Czy mam wolność wyboru czego chcę użyć, np google test/mock, boost test, nunit, etc...? Czy może jestem znowu skazany na jeden wewnątrz firmowy standard?
 

inż. Avallach

inż. Avallach

Administrator
posty7662
Propsy5238
NagrodyV
ProfesjaProgramista
  • Administrator
Tak, po Boosta sięga się co jakiś czas. To zawsze rozwiązanie lepsze niż pisanie samemu, a w przeciwieństwie do innych bibliotek Boost często ma z góry pełne zaufanie (u mnie w pracy nie trzeba się dowiadywać o to czy można użyć czegoś z niego - o inne zewnętrzne libki trzeba pytać). Biblioteka standardowa C++ ma wieczne braki. Przez ostatnie lata nadrobiła, ale Boost często jest używany jako sposób na użycie czegoś co do standardu trafiłoby dopiero za dłuższy czas. Przykładowo w moim dziale Nokii używano jego smart pointerów zanim pojawiły się te standardowe.

Co do testów jednostkowych, zdecydowanie i bezdyskusyjnie jesteś skazany na standard nie tyle firmowy, co projektowy. Projekt musi mieć jeden framework testowy, inaczej pojawiają się niepotrzebne problemy - bo trzeba np specjalnie podpinać dodatkowe rozwiązania pod serwer CI.
Ale jeśli zaczynasz mniejszy projekt wewnątrz firmy który nie będzie częścią większego, to firma może nie mieć nic przeciwko temu żebyś dokonał wyboru sam.

Leinnan

Leinnan

Administrator
torsonic polarity syndrome
posty2671
Propsy3600
ProfesjaProgramista
  • Administrator
  • torsonic polarity syndrome
A propos posta Avallacha z cytatu w spoilerze: https://blog.intercom.com/browsers-not-apps-are-the-future-of-mobile/
Spoiler
Miałem wizję. Zrozumiałem dlaczego JavaScript to język przyszłości. Jeśli ktoś jest mniej oświecony to mogę wyjaśnić dlaczego.

Przeglądarki były tym co przypadkiem stworzyło język dokładnie taki, jakiego potrzebuje dzisiejsza technologia, chociaż kiedy powstawał nie było jeszcze przewidziane że to jaki będzie okaże się w przyszłości takie ważne. Czyli w pełni asynchroniczny. Przeglądarki potrzebowały tego żeby skrypty w kodzie strony nie zawieszały procesu renderowania. To tak trywialne...

Teraz, lata później, boleśnie odczuliśmy to że nie możemy pozwalać już sobie na produkowanie co jakiś czas procesorów o dwukrotnie zwiększonym względem poprzedniego taktowaniu... Teraz potrafimy już tak tylko duplikować rdzenie. A to zmusza nas do pisania kodu zrównoleglalnego... Zgadnijcie jaki język okazał się zarówno idealnie spełniać to wymaganie, a zarazem jest prosty do nauczenia się, bardzo rozszerzalny i ewoluujący szybciej niż jakikolwiek inny, bo jego kompilatory wszystkie działają w trybie autoaktualizacji?

Hint: tymi autoaktualizowanymi kompilatorami są przeglądarki internetowe.

Kiedy powstawał node.js, brzmiało to trochę jak żart. Ktoś miał by chcieć pisać prawdziwe programy w JavaScripcie, języku skrypcików ze stron internetowych? Teraz mam wrażenie że to był przełom :D

Słyszeliście kiedyś o Cordovie i Electronie?
Cordova to framework do pisania aplikacji mobilnych które działają na wszystkich systemach - bo są napisane w JavaScripcie, z GUI w HTML+CSS. A takie rzeczy da się uruchomić wszędzie gdzie jest nowoczesna przeglądarka, a nowoczesna przeglądarka jest teraz wszędzie.
Electron to framework do pisania aplikacji desktopowych które działają na wszystkich systemach - bo są napisane w JavaScripcie, z GUI w HTML+CSS... To tak naprawdę duet node.js+blink. Node.js to wolnostojący silnik JavaScriptu wyciągnięty z Chrome'a. Blink to silnik renderujący Chrome'a... Każda aplikacja na Electronie ma w sobie szkielecik Chrome'a :D

Czekam tylko aż powstanie jakiś framework obejmujący te dwa powyżej.
Microsoft próbuje stworzyć coś takiego od kilku lat, nazywając to "Universal apps". Co ciekawe one też potrafią chodzić na JavaScripcie i HTML+css. Microsoft sam zachęca do ich tworzenia w ten sposób. Szkoda tylko że stworzył do tego zamknięty standard działąjący tylko z ich platformą. Gdyby od razu poszedł w open source, mógłby mieć na ten projekt potężny wpływ, tak jak ma na .NETa.
 
Mit der Dummheit kämpfen die Götter selbst vergebens

steam | slavic castles |  last.fm | moddb.com | Stary, najlepszy lider Sclavinii

Wonski

Wonski

Gry (themodders@telegram)
radio engineer
posty256
Propsy91
ProfesjaProgramista
  • Gry (themodders@telegram)
  • radio engineer

Wonski
Gry (themodders@telegram)

Temat ogólny
Mam kilka problemów z pisanym przeze mnie oprogramowaniem:

Napisałem aplikację, która umożliwia zdalne zarządzanie wieloma komputerami. Apka działa poprawnie jeżeli jest uruchomiona z prawami administratora (choć i nad tym pracuję). Docelowo wszystko będzie działać w tle, ale na potrzeby testów muszę mieć jakiś wyraźny feedback by sprawdzić czy wszystko działa poprawnie.

Docelowo każdy klient (inny komputer) łączy się z serwerem (aktualnie bezpośrednio z moim komputerem, choć w późniejszej wersji oprogramowania łączenie będzie pośrednie) na którym postawiłem prymitywną bazę danych opartą na plikach *.ini, gdzie pliki *.ini są parsowane przez moją "bibliotekę" bo ta windowsowa nawala (rozwiązanie tymczasowe, samą bazę danych planuję postawić na serwerze mysql).

No i tu zaczyna się problem z przesyłem danych, identyfikowaniem klienta i ogólnie zarządzaniem połączeniami.
Zrobiłem pulę wątków, gdzie główny wątek serwera rozdziela obsługę połączeń pomiędzy wolnymi wątkami. Problem w tym, że pula wątków jest statyczna i serwer jednocześnie może obsłużyć dajmy na to 10 połączeń. A przewiduję możliwość jednoczesnej obsługi mniej więcej 100 połączeń. I tu jest problem bo jednoczesne utrzymywanie około 100 wątków i jednoczesne blokowanie dostępu do bazy danych przy pomocy muteksów jest mocno nie wydajne.. (a czuję sie niepewnie stosując operacje atomowe)

No i dalej... jak rozwiązać identyfikację klientów? Na początku myślałem by identyfikować klientów po numerze IP, ale to bez sensu bo IP jest dynamiczne. Więc wpadłem na pomysł by przy pierwszym połączeniu klienta ten wysyłał "prośbę" nadania unikalnego ID przez serwer. Gdzie potem każde nowe połączenie klienta z serwerem będzie identyfikowane przy pomocy tego ID. Wydaje mi się to dobre rozwiązanie...

Jedną z podstawowych funkcji serwera jest utrzymywanie listy aktualnie połączonych klientów.. Jak to zrobić? Osobiście myślałem nad tym by co jakiś określony czas (dajmy na to 5 sekund) apka wysyłała swoje ID do serwera by powiadomić serwer o aktywnym połączeniu. Czy to jest wydajne? No bo to jest znowu około 100 aktywnych wątków aktywujących się co 5 sekund by obsłużyć proste polecenie.

Problem odzyskiwania serwera.
Problem jest w sytuacji gdy np u mnie w domu zabraknie prądu (bądź nastąpi jakakolwiek awaria czy restart komputera) to operator przydziela mi nowe IP. Nie mam łącza statycznego bo jest drogie, a na bieżącym etapie tego projektu jest to po prostu nieopłacalne.
I jeżeli operator przydzieli mi nowe IP, to klient nie będzie wiedział z kim ma się łączyć i całą bazę nieodwracalnie szlag trafi.
Jak to zrobić?
Osobiście myślałem by w razie gdy klient nie mógłby się połączyć z serwerem to by nie tracić danych, zrobił dumpa z danymi na jakiś ogólnodostępny serwer (dane oczywiście szyfrowane) i w momencie naprawienia awarii serwer mógł jest jakoś odzyskać i przekierować ruch już normalnie.
Ale to jest na razie mocno koncepcyjne rozwiązanie i konstrukcyjnie nie wiedziałbym jak to rozwiązać.


Jest jeszcze kilka innych kwestii do rozwiązania, jak np. planuję zrobić by serwer był mobilny, tzn abym mógł sterować oprogramowaniem z różnych urządzeń i tu też jest problem z identyfikacją numeru serwera.
Możnaby to też rozwiązać w ten sposób, że musi być aktywny jeden serwer a administrator z dowolnego urządzenia steruje serwerem zdalnie (serwer musi mieć statyczne łącze). Albo rozwiązanie mniej mniej elastyczne, ponieważ mógłbym dać klientom sztywną listę serwerów z którymi mogłyby się łączyć, ale to i tak zawsze musiałby być aktywny przynajmniej jeden serwer...

Jako biblioteki sieciowej używam boost::asio (mam nadzieję, że pewnego dnia trafi ona do standardu).
Jeżeli macie jakieś sugestie jak to zoptymalizować czy macie nawet lepsze rozwiązania to śmiało pisać.
Pozdrawiam.
 

inż. Avallach

inż. Avallach

Administrator
posty7662
Propsy5238
NagrodyV
ProfesjaProgramista
  • Administrator
Nie rób prostych mutexów,  tyko  read write locki. I po co chcesz utrzymywać cały czas te połączenia?  Nie lepiej żeby klient łączył się z serwerem okresowo albo korzystał z jakiejś gotowej technologii Push?
Nie używaj adresów IP,  tylko nazw domenowych.  Są usługi pozwalające podpiąć domenę nawet pod dynamiczne IP.

Wonski

Wonski

Gry (themodders@telegram)
radio engineer
posty256
Propsy91
ProfesjaProgramista
  • Gry (themodders@telegram)
  • radio engineer

Wonski
Gry (themodders@telegram)

Temat ogólny
I po co chcesz utrzymywać cały czas te połączenia?  Nie lepiej żeby klient łączył się z serwerem okresowo albo korzystał z jakiejś gotowej technologii Push?

Po to aby sprawdzić ile komputerów jest aktualnie aktywnych i ilu komputerom mogę przesłać polecenie do wykonania. Jeżeli w bazie jest zarejestrowanych dajmy na to 60 komputerów to chcę wiedzieć ile i które konkretnie są aktualnie włączone. No i nie chodzi mi o stałe połączenie, tylko informowanie serwera, ze dany komputer jest włączony i gotowy do przetwarzania poleceń wysyłanych z serwera.
Bo możecie się śmiać, ale to ma naprawdę szerokie możliwości.. np na takiej platformie można wykonywać obliczenia które można zrównoleglić np rendering 3d (zaawansowane) albo koparki btc, możliwości jest mnóstwo...

O tej technologii Push jeszcze doczytam bo szczerze to pierwsze o tym słyszę.
A co powiesz o modelu pamięci transakcyjnej, która podobno ma wejść w nowym standardzie?
 

inż. Avallach

inż. Avallach

Administrator
posty7662
Propsy5238
NagrodyV
ProfesjaProgramista
  • Administrator
Nie musisz mówić o zastosowaniach, takie sieci są dobrze znane - profesjonalnie nazywa się je botnetami.
Nie musisz mieć ciągle połączenia żeby wiedzieć które klienty są aktywne. Dlaczego nie wysyłać heartbeatów np co minutę?

Wonski

Wonski

Gry (themodders@telegram)
radio engineer
posty256
Propsy91
ProfesjaProgramista
  • Gry (themodders@telegram)
  • radio engineer

Wonski
Gry (themodders@telegram)

Temat ogólny
W sumie to nie trzeba przesyłać sygnału nawet co minutę. Przecież chcę być informowany kiedy komputer jest aktywny a kiedy przestaje być aktywny. Więc w sumie wystarczy gdy będą wysłane dwa sygnały: jeden kiedy program został uruchomiony (podczas uruchomienia komputera i poprzez autostart programu) a drugi podczas zakończenia pracy programu (kiedy komputer zostaje wyłączony i tym samym program kończy pracę).

Ale serwer nie wie kiedy to się dzieje, więc może się zdarzyć, że klient nie wyśle sygnału sygnalizującego koniec pracy, więc faktycznie można by to kontrolować za pomocą timerów na serwerze.

No dobra a jak poradzić sobie z większym ruchem?
Przy 10 komputerach to nie problem utworzyć 10 osobnych wątków i obsługiwać połączenia. Problem z wydajnością pojawi się gdy trzeba będzie obsłużyć jednocześnie 60-80 wątków..
Można by to zrobić w ten sposób, że klienty nadawałyby swoim połączeniom priorytety (jeden rodzaj danych może być ważniejszy od drugiego). Takie przychodzące połączenie byłoby wrzucane przez serwer do kolejki priorytetowej. I tutaj działałaby pula wątków określona np przez hardware_concurency, która po prostu pobierałaby taski z tej kolejki.
 

inż. Avallach

inż. Avallach

Administrator
posty7662
Propsy5238
NagrodyV
ProfesjaProgramista
  • Administrator
Więc w sumie wystarczy gdy będą wysłane dwa sygnały: jeden kiedy program został uruchomiony (podczas uruchomienia komputera i poprzez autostart programu) a drugi podczas zakończenia pracy programu (kiedy komputer zostaje wyłączony i tym samym program kończy pracę).
Za mało. W prawdziwej sytuacji nie możesz polegać na tym że twój program zawsze będzie miał możliwość wysłania sygnału rozłączania. Powinieneś dodatkowo mieć tak zwany heartbeat (en.wikipedia.org/wiki/Heartbeat_(computing) ) który pozwoli wykryć nagłe rozłączenie się klienta.

Po co ci tyle wątków? Zrób określoną pulę i obsługuj to wszystko asynchronicznie. Tak jak napisałeś w drugiej części posta. Priorytety nie są potrzebne.

Swoją drogą fajnie że w końcu ktoś ma jakiś ambitniejszy problem, nawet jeśli istnieją gotowe otwartoźródłowe rozwiazania.
Ale jeśli chcesz rozwijać to na seriom to się przyjrzyj tym gotowym. Ty obecnie jesteś na etapie opracowywania własnego protokołu do komunikacji między C&C a botami. Tymczasem praktyka pokazuje że wygodniej jest skorzystać z już istniejącego, np IRC (obejrzyj np to: https://github.com/jpdias/botnet-lab).

Nie zniechęcaj się różnicą pomiędzy "aplikacja do zdalnego zarządzania komputerami" a "botnet". Tkwi jedynie w tym czy klienty są instalowane dobrowolnie i jawnie.

Kazzmir

Kazzmir

O.D.A.L.
posty1003
Propsy1681
ProfesjaProducent
  • O.D.A.L.
wyolbrzymione czy mniej więcej prawdziwe?

 
rekrutacja O.D.A.L, po 18:00 gg:10135138

Wonski

Wonski

Gry (themodders@telegram)
radio engineer
posty256
Propsy91
ProfesjaProgramista
  • Gry (themodders@telegram)
  • radio engineer

Wonski
Gry (themodders@telegram)

Temat ogólny
#57 2016-11-15, 18:59(Ostatnia zmiana: 2016-11-15, 19:14)
@Kazzmir
SOLID i DRY w pigułce :D

No i w sumie cel osiągnięty. Nowy produkt, spełniający podstawowe założenia projektowe. Stworzony z już istniejących modułów, dzięki czemu odpadają koszta opracowywania nowych rozwiązań :D
Tylko nie widzę tutaj zasady KISS, ale jak coś jest głupie i działa to nie jest głupie :)
 

inż. Avallach

inż. Avallach

Administrator
posty7662
Propsy5238
NagrodyV
ProfesjaProgramista
  • Administrator
To karykatura. Nie ma nic wspólnego z rzeczywistością, przynajmniej nie z taką jaką ja znam.
Rozwój oprogramowania to strasznie drogi interes. Co za tym idzie są bardzo wysokie wymagania co do pokrycia kodu zautomatyzowanymi testami, modularyzacji, rozszerzalności itd.
Zespół który używa komponentu napisanego w tak "szalony" sposób będzie na tym sam cierpiał - posługując się językiem metafory z gifa, problem pojawiłby się gdyby np obok trzeba było podłączyć drugą wtyczkę.

Z drugiej strony to tak naprawdę zależy od tego jak ma być używane programowane narzędzie.
Jeśli ma być "jednostrzałowe" (napisane żeby zrobiło jedną rzecz, a potem idzie w kibel) to taka prowizorka jest jak najbardziej stosowana. Wtedy wystarczy że działa. To dotyczy jednak na ogół tylko bardzo małych narzędzi o bardzo specyficznym zastosowaniu. Jeśli coś już więcej kosztuje (powiedzmy niż parę godzin / setki złotych) to osoba która za to płaci na ogół chce żeby nadawało się to w przyszłości do ponownego użycia / modyfikacji.

Zwykle bardzo ważna jest też ogólna pewność co do niezawodnego działania kodu. Jeśli coś jest taką chaotyczną prowizorką, to nie da się tej pewności mieć. A w przemyśle kod który nie wiadomo czy na pewno będzie działać, jest potencjalnie warty dużo mniej niż taki który nie działa ale dobrze wiadomo co trzeba w nim dorobić.

Wonski

Wonski

Gry (themodders@telegram)
radio engineer
posty256
Propsy91
ProfesjaProgramista
  • Gry (themodders@telegram)
  • radio engineer

Wonski
Gry (themodders@telegram)

Temat ogólny
Cześć,
chciałem skonfigurować jenkinsa pod względem automatycznego sprawdzania składni. Tzn czy kod w danym buildzie jest zgodny z przyjętymi przez zespół konwencjami kodu (podobne rozwiązanie jest w resharperze). Jeśli nie to sprawdza się autora ostatniego commita i wysyła mu się automatycznie notify na maila bądź na inne medium.
Problem w tym, że nie wiem jakiej wtyczki użyć. Zapewne ktoś z Was miał styczność z Jenkinsem
 


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry