Wpis z mikrobloga

Cześć! No i udało się - jest pierwsza beta mojej nowej biblioteki do budowania rozproszonych aplikacji w C++! Można pobrać z github'a: https://github.com/cloudover/libdinemic albo stronki projektu dinemic.io. Bazując na tym "frameworku" można stworzyć aplikacje działające na wielu hostach w sieci, bez jakiegokolwiek centralnego punktu, włączając w to autoryzacje, która jest oparta o kryptografię.

Co działa?
- Pełen ORM na obiekty w C++ - można zmapować pola (lub użyć get/set), działa również wsparcie dla list
- Działa autodiscovery innych nodów w sieci - uruchomiona aplikacja może oczekiwać zmian w innym obiekcie, sterowanym przez innego noda sieci. Wszystko bez jakiegokolwiek dotykania sieci przez developera
- Działa kryptografia :) chyba najważniejsza część tej biblioteczki - wiadomo, że dany obiekt jest zmieniany przez jego właściciela. A jeśli nie, to też się o tym dowiemy

Zostało jeszcze kilka spraw związanych m.in. z konkurencyjnym dostępem do kolejek, ale to już dość szybka kosmetyka. Gdybyście chcieli dołączyć, to poszukuję osób, które mogłyby pomóc z rozwinięciem drivera obsługującego zapis do memcached lub redis (obecnie wszystko rezyduje w pamięci) oraz dopisaniem wrappera dla Pythona. Dość długo męczyłem temat, ale poległem na callbackach z pythona do C++

#programowanie #technologia #cpp #cplusplus #cloud
  • 13
@didijo: Naprawdę nie lubisz użytkowników twojego API:

void iterate_items(void(*iterator)(const string key, void *data));

Całe to DModel, DField jest troche takie o kant dupy potłuc, ale rozumiem że nie to było calem biblioteki.
No cóż koło jakiejkolwiek wydajności takich systemów to nie stało, może działa, może podpisy też działają ale bez jakieś dokumentacji to nie chce mi się wnikać jak.
@didijo:
string DHeaders::operator [](const string &field) const {
for (auto header : boost::adaptors::reverse(headers)) {
if (header.first == field) {
return header.second;
}
}

string ret;
return ret;
}
xd
@lionbest: DModel - tak, to jest celem i na razie zostanie, o tym za chwile napisze. DField wyszło bardzo niewygodne i będę nad tym pracować na pewno. Tak samo jak przeszukiwanie danych, wyszukiwanie obiektów w bazie itd. Usuwam właśnie wszystkie TODO (implementuje :) i wyrzucam using namespace std;. Przy okazji poleciała właśnie funkcja, którą przytoczyłeś i jakoś kiedyś to trzeba będzie zrobić. I raczej wcześniej niż później.

@Saly: dzięki
@didijo: na start polecam wyrzucenie wszystkich destruktorów. Operatory new i delete zamień na uniqueptr/sharedptr. Szczególnie brzydkie w twoim kodzie są wszystkie wystąpienia char* ... = new char[xxx]; , które powinny być std::stringami: takie rozwiązanie jest czytelniejsze i bardziej wydajne.
@Saly: używam std::stringów tam gdzie się da, ale niektóre biblioteki niestety są z czystego c (zmq, libsodium). Chyba, że istnieje sposób na zaalokowanie std stringa i przekazanie wskaźnika bezpośrednio do jego danych, ale to się muszę jeszcze doszkolić
@Saly: zeromq, ale to jest do przerobienia na c++ jak dobrze pamiętam. Da się jakoś łatwo zaalokować stringa na potrzeby odczytu (np. do przekazania do read)?
@didijo: możesz stworzyć std::string(rozmiar, '#'), wtedy dostanisz stringa o rozmiarze rozmiar wypełnionionego znakami '#', albo użyć metody resize na stworzonym już stringu.