Blog

Blog je mesto gde možeš da čitaš o navikama IT-evaca, najavama IT dešavanja, aktuelnostima na tržištu, savetima i cakama kako da uspeš na ovom dinamičnom polju.

20.05.2024. ·
4 min

Šta najveći DDoS napad u istoriji može da nauči developere?

U oktobru prošle godine, Google Cloud je objavio da je uspešno suzbio najveći DDoS napad u istoriji - i da je ovaj DDoS napad pogađao poslovne subjekte od avgusta. Šta je to što ga je učinilo najgorim DDoS napadom do sada? Bio je to njegov obim. Tokom svog vrhunca, napad je brojao preko 398 miliona zahteva u sekundi (rps). Poređenja radi, najgori zabeleženi DDoS napad do tog trenutka, otkriven 2022. godine, dostigao je 46 miliona rps. U ovom slučaju, kriminalci su bili u mogućnosti da pokrenu DDoS nakon što su otkrili zero-day ranjivost na HTTP/2 protokolu. U najgorem slučaju, ovaj tip eksploatacije može da preplavi saobraćaj i ometa usluge. Iako neće ugroziti podatke, može izbaciti ranjivu veb stranicu ili aplikaciju iz upotrebe. Ako ga sagledamo sada, pola godine kasnije - šta najveći DDoS napad do sada može da nauči softverske developere o sprečavanju DDoS-a? Redovno popravljajte ranjivosti Zero-day ranjivost učinila je ovaj napad tako efikasnim. Sada je poznat kao HTTP/2 Rapid Reset, ili CVE-2023-44487, i može preopteretiti servere koji se oslanjaju na HTTP/2 protokole. Rano popravljanje nedostataka jedan je od najboljih oblika odbrane od DDoS i drugih napada. Tokom ovog procesa, posebna pažnja mora se posvetiti visokorizičnim ranjivostima. Neažurirane ranjivosti se nalaze među vodećim uzrocima sajber napada, ali mnoge ekipe godinama zanemaraju izbacivanje patch-a. Sa poznatim greškama, kompanije mogu automatizovati ovaj proces kako bi ih unapred popravili u sistemu. Ali kako možete odmah popraviti zero-day ranjivosti? To su pretnje koje još uvek nisu poznate, i alati ne mogu da ih detektuju jer ne znaju da takve ranjivosti postoje. Takođe, može potrajati neko vreme dok patch ne bude dostupan za najnovije zero-day ranjivosti. Dok čekate patch za HTTP/2 Rapid Reset, Microsoft predlaže: Zaštitite svoj sajt WAF-om (web application firewall) Implementirajte odbranu za DDoS napade 7 sloja Postavite pravila ograničenja brzine da blokirate neželjeni saobraćaj Blokirajte maliciozne IP adrese Onemogućite HTTP/2 protokol Pristupajte sajber bezbednosti proaktivno Google je u poziciji da otkrije i suzbije napade pre nego što izmaknu kontroli jer stalno nadgleda svoju bezbednost. Kompanija konstantno razvija bolje mehanizme odbrane i koristi proaktivne mere kako bi kontinuirano poboljšavala svoju bezbednost. Ako vaš tim za razvoj redovno primenjuje patch-eve, pridržava se najboljih praksi za suzbijanje DDoS-a i održava ažuriran plan odgovora na incidente, onda ste u dobrom položaju kada je reč o reaktivnim merama. Međutim, to možda nije dovoljno da zaštitite svoje okruženje od visokorizičnih nedostataka. Da biste sprečili DDoS da omete vaš sistem na ovom nivou, potrebno vam je više. Započnite ovde da implementirate proaktivniji pristup bezbednosti: Nadgledajte mrežni saobraćaj kako biste brzo uočili svaku promenu u saobraćaju Koristite rešenja za analizu ponašanja kako biste otkrili abnormalne obrasce saobraćaja Postavite pravila filtriranja saobraćaja kako biste zaustavili zlonameran saobraćaj Kao rezultat toga, proaktivna sajber bezbednost vam pomaže da rano otkrijete ranjivosti - pre nego što eskaliraju u štetne i skupe napade. Postavite složene odbrambene mere u okviru vaše infrastrukture U svom pregledu najvećeg napada, Emil Kiner iz Cloud Armora primećuje da je zahvaljujući merama balansiranja opterećenja i infrastrukturi za suzbijanje DDoS-a, Google uspeo da održi sve operativnim, i izbegne bilo kakve prestanke rada. Suprotno tome, kada je OpenAI doživeo DDoS napad u novembru 2023. godine, korisnici su se žalili na ponovljene prekide tokom celog dana. Sveobuhvatna infrastruktura za suzbijanje i slojevi sigurnosti mogu napraviti veliku razliku prilikom napada u vašu korist. Samo WAF (web application firewall) nije dovoljan za rano suzbijanje DDoS-a. Na primer, evo nekoliko mera na koje se Google tim oslanja: Posebno prilagođene sigurnosne politike Adaptivne zaštite za analizu uzoraka saobraćaja Globalno balansiranje opterećenja za distribuciju saobraćaja Pored odgovarajuće infrastrukture, važno je imati višedimenzionalni program sajber bezbednosti koji kombinuje različite proaktivne i reaktivne mere. Sarađujte sa kolegama u vašoj industriji Ono što nas ovaj slučaj uči jeste to koliko je važno sarađivati sa drugim akterima u vašoj industriji. Kako bi suzbio napad, Google je delio informacije i obaveštajne podatke o napadima sa zainteresovanim stranama u industriji. To uključuje održavaoce softvera i pružaoce usluga oblaka. Google, Cloudflare i AWS zajedno su radili na istraživanju i zaustavljanju napada pre nego što je izazvao dugotrajne prekide rada za ranjive korisnike. Koordinirali su svoje napore i delili obaveštajne podatke, strategiju i ekspertizu kako bi rano zaustavili napad. Ovo je važno za suzbijanje napada velikih razmera poput ovog. Mogli su da se izbore sa pretnjom na vreme koristeći najefikasnije mere za to. Kako druge kompanije mogu iskoristiti različite saradnje? Izgradite zajednicu kako biste podstakli podržavajuće okruženje u svojoj industriji. Razmenjujte znanje i prakse sa drugim kompanijama. Sarađujte sa partnerskim kompanijama iz industrije kako biste u realnom vremenu suzbili napade. Prilagodite i unapređujte odbranu kako biste sprečili DDoS napade Kada velika kompanija doživi DDoS napad, može biti teško razumeti zašto WAF i druge odbrane nisu odmah zaustavile napad. Kao što vidite ovde, teško je pripremiti kompaniju protiv sofisticiranijih napada, pogotovo ako iskoriste zero-day ranjivost - govorimo o slabosti koju vaš sigurnosni sistem nije mogao da predvidi. Suština najgoreg DDoS napada? Baš kao što se DDoS napadi svake godine sve više unapređuju, vaša odbrana takođe mora da evoluira. Osim primene standardne sajber “higijene” kao što su redovni apdejti, pristupite bezbednosti sa proaktivnim merama. Kreirajte višedimenzionalnu infrastrukturu za sigurnost i, ako možete, sarađujte sa drugima.

16.05.2024. ·
11 min

Syncing Data from DocumentDB to OpenSearch using Change Streams

Change streams are a feature of Amazon DocumentDB that provides a time-ordered sequence of data change events that occur within a DocumentDB cluster. Change streams can be enabled for an individual collection and can be configured to provide the complete document rather than only the change that occurred. Change streams can be integrated natively with a Lambda function, which gives us wide array of possibilities. In this tutorial, we will demonstrate step by step how to synchronize real-time data changes from a DocumentDB cluster to an OpenSearch domain using change streams and a Lambda function. At the end of the tutorial, we will have an infrastructure as shown in the image above. We will create a VPC, DocumentDB cluster, OpenSearch domain, API gateway, and four Lambda functions. Three functions will be exposed via the API gateway: one for writing data, one for reading data, and one for configuring the DocumentDB collection. The fourth function, which is the most important one, will be connected to the change stream and perform data synchronization. Both the functions and the infrastructure will be written in TypeScript and deployed using CDK. The repository containing the entire code can be found here. Let’s get started! VPC setup We create a VPC using CDK’s construct. This one-liner creates a VPC with a private and a public subnet and sets up network routing. Next, we create three security groups: one for Lambda functions, one for the DocumentDB cluster, and one for the OpenSearch domain. As the Lambda functions will perform CRUD operations on data stored in DocumentDB and OpenSearch, we add ingress rules to the DocumentDB and OpenSearch security groups, authorizing access from the Lambda security group. Additionally, we include a self-referencing ingress rule in the DocumentDB security group, which will be explained later on. DocumentDB setup We create a DocumentDB cluster using CDK’s DatabaseCluster construct. The engineVersion is set to 4.0.0 since this is the only version of DocumentDB that supports change streams. The DatabaseCluster creates a master user secret for us and stores it in Secrets Manager under a name defined in masterUser.secretName. We set the vpc and securityGroup properties to the previously created VPC and DocumentDB security group. To launch the cluster in a private subnet, we set vpcSubnets.subnetType to SubnetType.PRIVATE_WITH_EGRESS. The DatabaseCluster will automatically select private subnets that have only outbound internet access. We also set the removalPolicy to RemovalPolicy.DESTROY to ensure the cluster is deleted when the stack is deleted, avoiding any unexpected costs. OpenSearch setup To set up the OpenSearch domain, we utilize CDK’s Domain construct. The properties vpc, securityGroups, and removalPolicy are set in the same manner as for the DocumentDB cluster. For the vpcSubnets property, we cannot use automatic subnet selection as we did in the DocumentDB setup. Instead, it is necessary to explicitly define exactly one private subnet since we only have one OpenSearch node. For the simplicity of this tutorial, we rely on IAM to authorize access to the OpenSearch domain. The Domain construct does not create a resource-based IAM policy on the domain, known as the domain access policy. This allows us to authorize access using identity-based policies, such as an IAM role for the Lambda function, without conflicting with the domain access policy. If you wish to explore OpenSearch security in more detail, check out the official documentation available here. Lambda functions setup Before we create the Lambda functions, we need to create an API Gateway that will be used to invoke the functions. Similar to other resources, we create the API Gateway using the RestApi construct. We also attach two resources, demo-data and config, to the API Gateway. Later on, we will attach a POST method to the demo-data resource for writing data to DocumentDB, as well as a GET method for reading data from OpenSearch. Additionally, we will attach a POST method to the config resource, which will be used to configure change streams on the DocumentDB collection. Writing data to DocumentDB cluster To be able to write to the DocumentDB cluster, the writer Lambda function requires access to the cluster’s master secret. So, we create an IAM role for our writer function that contains all the necessary permissions. In the inlinePolicies property, we add a new policy that grants access to the cluster’s secret through the secretsmanager:GetSecretValue action. We also include the managed policy AWSLambdaVPCAccessExecutionRole, which provides all the permissions required for running a Lambda function in a VPC and writing logs to CloudWatch. To create the Lambda function, we utilize the NodejsFunction construct. This construct simplifies the process of creating Lambda functions by automatically transpiling and bundling TypeScript or JavaScript code. Under the hood, it utilizes esbuild. We assign the previously created VPC and security group to the Lambda function using the vpc and securityGroups properties. We configure two environment variables: DOCUMENT_DB_SECRET and DOCUMENT_DB_ENDPOINT. These variables store the ARN of the cluster’s master secret and the endpoint of the cluster, respectively. The Lambda function will utilize these values to establish a connection with the DocumentDB cluster. By default, the DocumentDB cluster uses TLS (Transport Layer Security). To establish a connection with the cluster, we need to verify its certificate using the AWS-provided Certificate Authority (CA) certificate. The file global-bundle.pem contains the AWS CA certificate. To make it available to the Lambda function during runtime, we use the afterBundling command hook, which copies global-bundle.pem to the Lambda deployment package. Finally, we attach the Lambda function to the API Gateway as a POST method of the demo-data resource. To connect to the DocumentDB cluster, we utilize the mongodb package. Within the createMongoClient() function, we first retrieve the master secret from Secrets Manager. Then we use this secret, along with the previously bundled CA certificate, to establish a connection with the cluster. In the handler function, we simply instantiate a MongoClient instance and write the requests’ body to the demo-collection. Enabling change streams To utilize change streams, we need to enable them either for the entire DocumentDB database or for the specified collection. Since our DocumentDB cluster is deployed in a private subnet of the VPC, direct access to it is not possible. To overcome this limitation, we create a Lambda function responsible for configuring change streams on the demo collection. This Lambda function is deployed within the VPC and exposed through API Gateway, enabling invocation from outside the VPC. In a real-world scenario, these configuration tasks would typically be performed either through a script during deployment, such as a CodeBuild job, or manually on the cluster if direct access is available (e.g., via a bastion host or VPN connection). For the purpose of this demo, setting up a Lambda function proves to be the simplest solution. The setup for the configuration Lambda function follows the same steps as the writer function, so we can skip directly to the handler code. In the code, we create the demo-collection collection and execute an admin command to enable change streams on it. Event Source Mapping setup An Event Source Mapping (ESM) is a Lambda resource that reads from an event source and triggers a Lambda function. In this case, we use an ESM to read change streams from the DocumentDB cluster and invoke the sync Lambda function. The ESM will handle the connection to the DocumentDB cluster, read the change stream events, group them into batches, and invoke the sync function. In the sync function, we will simply write the entire document to the OpenSearch domain. To perform its tasks successfully, ESM requires the appropriate permissions both at the networking level and the IAM level. The ESM will “inherit” the security group of the DocumentDB cluster and utilize it when establishing a connection to the cluster. This is precisely why we included a self-referencing inbound rule in the security group of the DocumentDB cluster during the VPC setup. This rule allows the ESM to access the cluster successfully. An ESM relies on the permissions granted by the function’s execution role to read and manage items within the event source. Therefore, in the IAM role of the sync function, we include three statements (ESMNetworkingAccess, ESMDocumentDbAccess, ESMDocumentDbSecretAccess) that grant the necessary permissions required by the ESM. The ESMNetworkingAccess statement provides networking permissions, the ESMDocumentDbAccess statement grants DocumentDB management permissions, and the ESMDocumentDbSecretAccess statement allows the ESM to read the master secret of the cluster. We also include an OpenSearchAccess statement, which is utilized by the sync Lambda function itself. The actions es:ESHttpPost, es:ESHttpPut, and es:ESHttpGet within this statement grant the ability to read and write data to the domain or index defined in the resources field. The sync function is defined in the same way as the writer and config functions, using the NodejsFunction construct. So, we can continue to the ESM definition. In the ESM definition, we specify the sync function in the functionName property, the DocumentDB cluster in the eventSourceArn property, and the cluster’s master secret in the sourceAccessConfigurations property. Within the documentDbEventSourceConfig, we define the database and collection from which we want to read change streams. By specifying the value UpdateLookup in the fullDocument property, we indicate that we want to receive the entire document in the change stream event, rather than just the delta of the change. We initially set the enabled property to false for the ESM. We will enable ESM later on, once we have set up change streams on the demo collection by invoking the config endpoint. If we were to enable ESM immediately, since it is created before invoking the config method, it would detect that change streams are not enabled, and we would need to restart it. To establish a connection with the OpenSearch domain, we use the Client class from the @opensearch-project/opensearch package. The Client class relies on the AwsSigv4Signer to obtain the credentials of the sync Lambda function and sign requests using the AWS SigV4 algorithm. This signing process is necessary because the OpenSearch domain uses IAM for authentication and authorization. In the sync function code, we simply instantiate an OpenSearch client, iterate through the change stream events, and write them to the demo-index index. Reading data from OpenSearch domain To retrieve data from the OpenSearch domain, we create a reader Lambda function and attach it to the API Gateway. The reader function requires the same OpenSearch permissions as the sync function to access the domain. We create an IAM role specifically for the reader function and, similar to the other functions, we include the managed policy AWSLambdaVPCAccessExecutionRole. We create the reader function using the NodejsFunction construct. In the function’s environment, we set the OPEN_SEARCH_DOMAIN_ENDPOINT variable and we attach the function to the GET method of the demo-data resource. In the function’s code, we instantiate the OpenSearch client, query the demo index, and retrieve the data. We include the retrieved data in the body of the function’s response, returning it to the caller. Deploying and testing the synchronization Before deploying the solution, it is necessary to enable the service-linked role for the OpenSearch service. When performing operations through the AWS Console, this service-linked role is automatically created when required. Therefore, if you have previously set up the OpenSearch domain using the AWS Console, you should already have the service-linked role created. However, if it is not available, you can create it using the AWS CLI command shown below. The entire CDK code is organized into four stacks: change-streams-demo-vpc-stack: Contains VPC definition and security groups. change-streams-demo-documentdb-stack: Defines the DocumentDB cluster. change-streams-demo-opensearch-stack: Sets up the OpenSearch domain. change-streams-demo-lambda-stack: Creates the API Gateway and Lambda functions. To deploy the entire solution, you can run the npm command shown below. By default, the command will use the account, region, and credentials from your default AWS profile. After the deployment is completed, you will need to retrieve the URL of the API Gateway. Once you have the URL, the next step is to invoke the config endpoint. This will create the demo collection and enable change streams. After invoking the config endpoint, you need to enable the ESM. You can do this by executing the command below. The ID of the ESM can be found as the value of the esm-id output of the change-streams-demo-lambda-stack stack. Alternatively, you can enable the ESM by opening the sync Lambda function in the AWS console, selecting and enabling ESM from the list of triggers of the function. Now you can start adding data to the DocumentDB cluster by invoking the POST method of the demo-data endpoint. Once the data is added, it will be synchronized to the OpenSearch domain. To retrieve the synchronized data, you can invoke the GET method of the demo-data endpoint. The response from invoking the GET method of the demo-data endpoint should contain the same data that was added through the POST method. You can monitor the execution and logs of the Lambda function using the CloudWatch service. After testing the synchronization, you can delete the resources by invoking the command below. Stateful resources, such as the DocumentDB cluster and OpenSearch domain, are configured with the RemovalPolicy.DESTROY and will be deleted along with the stacks. All created resources are tagged with the Application tag, which has the value change-streams-demo. Once the destroy command completes execution, you can double-check if all resources have been deleted by using the Tag Editor of the AWS Resource Groups service. The Tag Editor allows you to search for resources based on their tags. Any remaining resources can be deleted manually. Conclusion In this post, I have demonstrated how to achieve real-time data synchronization from a DocumentDB cluster to an OpenSearch domain using change streams and a Lambda function. The majority of the heavy lifting is handled by AWS on our behalf. For instance, the Event Source Mapping performs all the complex tasks, such as polling for changes and grouping them into batches, while we simply integrate our Lambda function into the flow. The architecture example presented here can be used to enhance the search performance of an existing DocumentDB cluster by replicating its data into a search-optimized OpenSearch domain. This is just one example of the numerous possibilities that change streams offer. Since they are easily integrated with Lambda functions, we have the flexibility to use them in any way we desire. For instance, we could react to events within the DocumentDB cluster and trigger a Step Function or send notifications to users and more. I hope you found this post useful and interesting. If you have any questions regarding the implementation or encounter any deployment issues, feel free to leave a comment below. I’ll make sure to respond as promptly as possible.

15.05.2024. ·
6 min

Razumeti razlike: Kako produkt menadžeri i developeri zajedno grade uspešne projekte

Na prvi pogled, uloge produkt menadžera i software developera mogu delovati kao odvojene celine unutar IT sektora, međutim, njihova uspešna saradnja je neizostavna za razvoj bilo kog uspešnog projekta. Produkt menadžeri se usredsređuju na korisničke potrebe, tržišne trendove i strateško planiranje, dok software developeri rade na tehničkoj implementaciji tih vizija kroz kod. Iako se čini da su njihovi ciljevi usklađeni, put od ideje do realizacije često je popločan izazovima i "varnicama", koje proističu iz različitih perspektiva na isti projekat. Neophodnost jasne i otvorene komunikacije između ove dve uloge postaje očigledna kada se uzme u obzir koliko su zapravo povezani njihovi domeni. Saradnja između produkt menadžera i developera nije samo poželjna, već ključna, kako bi se izbegli nesporazumi koji mogu usporiti ili čak ugroziti napredak projekta. Tihomir Ješić, produkt menadžer u Infostudu, i Danijel Berkeš, software developer na sajtu HelloWorld.rs, otkrivaju nam kakva je zaista izgleda njihova i saradnja i šta su najveći izazovi. Tihomir Ješić - produkt menadžer u Infostudu “Produkt menadžer je odgovoran da prepozna korisničke potrebe i pronađe rešenje zajedno sa development timom, a u skladu sa svim tim da odredi i strategiju razvoja proizvoda. Programer je taj koji će implementirati zahteve proizvoda. Njegovo tehničko znanje i iskustvo ključno je za procenu kompleksnosti zahteva i pronalaženje optimalnih tehničkih rešenja. Zbog svega toga neophodno je da produkt menadžer ima konstantnu komunikaciju sa programerom kako bi razumeo tehničke izazove i moguće limite. Komunikacija i međusobno razumevanje je ključ uspeha svakog projekta”, navodi za HelloWorld.rs Tihomir Ješić.   Danijel Berkeš - software developer na sajtu HelloWorld.rs Danijel Berkeš dodaje da programer treba da proceni tehničku izvodljivost i predloži alternativna rešenja ako originalni zahtevi nisu ostvarljivi bili bi previše vremenski zahtevni ili skupi za implementaciju. ”Ovaj proces je krucijalan za uspeh projekta”, smatra Berkeš i naglašava: “Iz moje perspektive, produkt menadžer je taj koji razume tržište, konkurenciju, potrebe korisnika i tehnološke trendove, i na osnovu toga kreira viziju i putanju proizvoda koji će se razvijati.” “Često doživljavam da je produkt menadžer praktično most između različitih timova i stakeholdera unutar i izvan organizacije, uključujući marketing, prodaju, korisničku podršku i, naravno, razvojni tim. Programeri očekuju od produkt menadžera da efikasno komunicira potrebe i očekivanja svih strana, kako bi razvojni tim mogao da se fokusira na tehnička rešenja. U ovom kontekstu doživljavam produkt menadžera i kao filter za različite biznis zahteve.” “Jedna od ključnih uloga produkt menadžera, iz perspektive programera, je postavljanje prioriteta. Razvojni timovi često se suočavaju sa više zadataka nego što mogu da obrade, pa je uloga produkt menadžera da jasno definiše šta je najvažnije i šta treba prvo realizovati, omogućavajući timu da ostane fokusiran i efikasan”, kaže Berkeš. Programeri cene kada su produkt menadžeri otvoreni za tehnički feedback i spremni da prilagode zahteve proizvoda na osnovu tehničkih izazova i ograničenja. Prema Ješićevom mišljenju produkt menadžer treba da razume da se programeri fokusiraju na arhitekturu sistema, tehničku implementaciju, performanse, bezbednost softvera i na održavanje koda, kako vremenom ne bi došlo do velikog tehničkog duga. “Ako produkt menadžer ne razume taj tehnički aspekt, teže će mu biti da prenese predstavnicima biznisa zašto je izabrano rešenje najoptimalnije”, kaže Ješić. Deo posla u kojem najviše uživa sa programerima je trenutak kada razmatraju potencijalne solucije i osmišljavaju neki proizvod. “Mislim da u  procesu razmena ideja, iskustava i rešavanju problema dolazi do posebnog izražaja ta sinergija između programera i produkt menadžera”, dodaje on. Izazovi u saradnji i rešavanje problema Danijel Berkeš smatra da je najčešći izazov procena vremena kada su u pitanju kompleksniji projekti koji potencijalno uključuju i druge timove. Iz perspektive programera, kaže on, najbolji mogući način procene trajanja velikih projekata je izveštavanje o progresu kroz iteracije. “Sa druge strane postoje pritisci od drugih stakeholdera prema produktu za jasnijim definisanjem roka”, navodi Berkeš i dodaje: “Tu celu priču mogu da uspore programeri koji ne umeju na najbolji mogući način da iskomuniciraju sve informacije ka produktu, jer suviše ulaze u tehničke detalje. Biti dobar programer podrazume da se na jednostavan (ne preterano tehnički) i jasan način objasni progres projekta, izazovi, poteškoće. Ako programeru to manjka, produkt će biti uskraćen za ključne informacije o projektu i tada nastaju “komunikacioni šumovi”. Sa druge strane, i Ješić priznaje da produkt menadžeri znaju da budu uzrok čestih glavobolja kod programera. “Kada produkt menadžer upita developera za vremensku procenu i kad im saopšti da postoje promene u zahtevima u toku same implementacije”. “Programeri su često usredsređeni na tehničke detalje, dok je produkt menadžer fokusiran na korisničke potrebe, tržišne trendove i strategiju proizvoda. Ova razlika u perspektivi može da dovede do nesporazuma u vezi sa prioritetima i ciljevima projekta”, dodaje on. Transparentnost i jasnoća kao most između tehničkih i strateških ciljeva Nedostatak transparentne komunikacije i povratnih informacija, bez dileme, dovodi do nerazumevanja. Na primer, ako programeri nisu jasno upoznati sa ciljevima proizvoda i očekivanjima korisnika, razvijati funkcionalnosti koje nisu u skladu sa tim. Ili, ako produkt menadžeru nisu saopšteni svi potencijalni tehnički rizici, lako može da se desi da primeni neadekvatnu strategiju razvoja proizvoda. “Mi ovo rešavamo tako što motivišemo programere da učestvuju u defnisanju biznis zahteva i da ne budu samo puki izvršioci zadataka, organizujemo timska planiranja, dnevne sastanke i konstantno negujemo kulturu  ‘vuci kolegu za rukav’, drugim rečima da u što  većoj meri sarađuju i pričaju o projektu”, objašnjava Berkeš. “Još jedna dobra stvar u Infostudu je da  programer i produkt menadžeri često dele istu kancelariju. Mislim da je ta bliskost  i razlog da se bolje razumemo. Ali suština je u razgovoru. Redovna i otvorena komunikacija dovodi do toga da bolje razumemo jedni druge”, dodaje. Učenje kroz saradnju – ključ uspešnih projekata Danijel Berkeš ističe da programer može od produkt menadžera da nauči kako da razmišlja iz perspektive tržišta, korisnika i biznis ciljeva, i da na osnovu togu ponudi i kvalitetnija tehnička rešenja koja su dugoročno usklađenija sa ciljevima kompanije. I za Tihomira Ješića iz ove saradnje ima puno toga da se nauči. “Najvažnija lekcija koju programer i produkt menadžeri mogu naučiti jedan od drugoga je da je uspeh tima zasnovan na međusobnom učenju, razumevanju i podršci. Kroz ovu vrstu saradnje, timovi postižu daleko bolje rezultate i stvaraju proizvode koji zaista vrede, pa na kraju čitavog lanca imamo jako zadovoljne korisnike“, zaključuje on.  

HelloWorld
0
14.05.2024. ·
<1 min

Uvod u AI I Besplatan kurs

Coursera je globalna platforma za online učenje i razvoj karijere koja svima pruža pristup online kursevima i diplomama vodećih univerziteta i kompanija. U ovom brzom i besplatnom kursu ćeš steći sveobuhvatno razumevanje veštačke inteligencije, koja se koristi svakodnevno u industriji i naučićeš kako da definišeš AI modele i sve načine na koje može da se upotrebi i bude ti korisna. Kurs je namenjen početnicima i sačinjen je od video materijala i praktičnih kvizova. Možeš pristupiti kursu putem linka.

HelloWorld
0
13.05.2024. ·
2 min

Meta proširuje svoju AI ponudu generisanja slika i na oglase

Meta Platforms (META.O), matična kompanija Facebooka i Instagrama, saopštila je da proširuje svoj set alata za generativne AI oglase kako bi ponudila alate koji su u stanju da automatski kreiraju varijacije slika i postave tekst preko njih. Alat će biti lansiran u testnom obliku bez žigova koje društvena mreža Meta inače primenjuje na sve slike generisane od strane svog Meta AI asistenta koje korisnici vide, i koju je istakla kao ključnu sigurnosnu karakteristiku, izjavili su izvršni direktori na konferenciji za štampu. Džon Hegeman, šef monetizacije u Meti, rekao je da kompanija još uvek razmatra način na koji će funkcionisati obeležavanje ovih oglasa i da će podeliti adekvatne smernice do trenutka globalnog lansiranja alata, najverovatnije pri kraju ove godine. Ova najava dolazi u trenutku kada Meta ulaže milijarde dolara u izgradnju i podršku svojim generativnim AI modelima, pokušavajući da ubedi oglašivače da automatizacijom rada kreativnih aspekata kampanja mogu da dobiju više za svoj novac. Još jedan gigant na polju digitalnog oglašavanja, Google, najavio je slično proširenje mogućnosti AI alata u februaru. Kompanija je izjavila da će oglasi kreirani od strane njenih alata biti obeleženi korišćenjem SynthID tehnologije koju je razvila njena AI istraživačka laboratorija DeepMind. Uz Metin alat za generisanje slika, oglašivači će moći da učitaju slike svojih proizvoda i generišu druge verzije tih slika, na primer, prilagođavanjem orijentacije proizvoda ili prikazivanjem ljudi koji ih koriste u različitim postavkama. Takođe se proširuju i ponude za generisanje teksta za naslove i ključne prodajne tačke, dok se dodaje mogućnost preklapanja teksta direktno preko generisanih slika. Kompanija će u narednim mesecima dodati i opciju za oglašivače da unesu tekstualne upute koje se mogu koristiti za prilagođavanje varijacija slika, rekla je. Kao i sa ranijim alatima za generativni AI, oglašivačima koji vode kampanje u regulisanim industrijama, poput politike, biće zabranjeno korišćenje ovih proizvoda. Oglašivači su velikom brzinom prihvatili AI alate za oglase koji automatizuju postavljanje njihovih kampanja pred različite grupe korisnika, ali su generalno bili oprezniji u vezi sa novijim alatima za generativni AI. Pojedini brendovi izrazili su bojazan u vezi sa tim kako će tehnološke kompanije koristiti bilo koje slike koje učitaju radi poboljšanja modela, jer se može desiti da njihovi logotipi ili druga intelektualna svojina završe u generisanim slikama drugih.

10.05.2024. ·
1 min

Korisnici Stack Overflow-a sabotiraju sopstvene postove zbog dogovora sa OpenAI

Nedavno objavljeno partnerstvo između popularne platforme za programere Stack Overflow i kompanije OpenAI, koje predviđa integraciju tehničkog sadržaja Stack Overflow-a sa ChatGPT-jem, izazvalo je buru nezadovoljstva među korisnicima ove platforme. Neki korisnici su, izražavajući svoje nezadovoljstvo, pokušali da obrišu ili izmene svoje odgovore i time protestuju protiv korišćenja njihovih doprinosa u treniranju AI modela. Pod uslovima najavljenog partnerstva, OpenAI će koristiti produkt OverflowAPI kompanije Stack Overflow kako bi poboljšao svoje AI modele koristeći sadržaj koji je kreirala zajednica Stack Overflow-a. Takođe, planirano je da ChatGPT direktno uključuje proverene tehničke podatke sa Stack Overflow-a. OpenAI obećava da će pružiti priznanje zajednici Stack Overflow-a unutar ChatGPT-ja, mada još uvek nije jasno kako će to biti realizovano. Stack Overflow, s druge strane, će koristiti tehnologiju OpenAI u razvoju svog AI modela OverflowAI, koji je najavljen u julu 2023. godine. Međutim, iako kompanije ističu prednosti saradnje, mnogi korisnici Stack Overflow-a izražavaju svoje nezadovoljstvo, posebno zato što je do nedavno Stack Overflow generalno imao negativan stav prema generativnim AI tehnologijama, čak zabranjujući odgovore napisane uz pomoć ChatGPT-ja. Takođe, prošlogodišnji porast popularnosti ChatGPT-ja navodno je smanjio saobraćaj na Stack Overflow-u, iako je kompanija kasnije osporila te tvrdnje. Korisnici koji pokušavaju da izbrišu ili izmene svoje postove na Stack Overflow-u kao oblik protesta suočavaju se sa suspenzijama i brisanjem svojih izmena od strane moderatora platforme. Prema uslovima korišćenja Stack Overflow-a, jednom kada korisnik objavi sadržaj, on postaje deo kolektivnog napora i može biti uklonjen samo u izuzetnim okolnostima. Iako Stack Overflow zadržava prava na korisničke postove, sadržaj se deli pod Creative Commons 4.0 licencom koja zahteva pripisivanje autora. Ostaje da se vidi kako će integracije sa ChatGPT-jem, koje još uvek nisu implementirane, poštovati ovu licencu na zadovoljstvo nezadovoljnih korisnika. Za sada, sukob se nastavlja.

HelloWorld
0
Da ti ništa ne promakne

Ako želiš da ti stvarno ništa ne promakne, prijavi se jer šaljemo newsletter svake dve nedelje.