Vimbox ప్లాట్ఫారమ్లో ఉపాధ్యాయుడు మరియు విద్యార్థి మధ్య కమ్యూనికేషన్ యొక్క ప్రధాన మార్గం వీడియో కమ్యూనికేషన్. మేము చాలా కాలం క్రితం Skypeని వదులుకున్నాము, అనేక థర్డ్-పార్టీ పరిష్కారాలను ప్రయత్నించాము మరియు చివరికి WebRTC - Janus-gateway కలయికలో స్థిరపడ్డాము. కొంత సమయం వరకు మేము ప్రతిదానితో సంతోషంగా ఉన్నాము, కానీ ఇప్పటికీ కొన్ని ప్రతికూల అంశాలు వెలువడుతూనే ఉన్నాయి. ఫలితంగా, ప్రత్యేక వీడియో దిశ సృష్టించబడింది.
స్కైంగ్లో వీడియో కమ్యూనికేషన్ యొక్క పరిణామం, కనుగొనబడిన సమస్యలు, మేము చివరికి ఉపయోగించిన పరిష్కారాలు మరియు క్రచెస్ గురించి మాట్లాడమని నేను కొత్త దిశ అధిపతి కిరిల్ రోగోవోయ్ని అడిగాను. వెబ్ అప్లికేషన్ ద్వారా సొంతంగా వీడియోను కూడా సృష్టించే కంపెనీలకు ఈ కథనం ఉపయోగకరంగా ఉంటుందని మేము ఆశిస్తున్నాము.
ఒక బిట్ చరిత్ర
2017 వేసవిలో, స్కైంగ్ డెవలప్మెంట్ హెడ్ సెర్గీ సఫోనోవ్, బ్యాకెండ్ కాన్ఫ్లో మేము "స్కైప్ను ఎలా విడిచిపెట్టాము మరియు WebRTCని ఎలా అమలు చేసాము" అనే కథనంతో మాట్లాడారు. ఆసక్తి ఉన్నవారు ప్రసంగం యొక్క రికార్డింగ్ను చూడవచ్చు
స్కైంగ్ స్కూల్ కోసం, వీడియో కమ్యూనికేషన్ ఎల్లప్పుడూ ఉపాధ్యాయ-విద్యార్థుల కమ్యూనికేషన్ యొక్క ప్రాధాన్యత మార్గం. మొదట, స్కైప్ ఉపయోగించబడింది, అయితే ఇది అనేక కారణాల వల్ల వర్గీకరణపరంగా సంతృప్తికరంగా లేదు, ప్రధానంగా లాగ్లు లేకపోవడం మరియు వెబ్ అప్లికేషన్లో నేరుగా ఇంటిగ్రేషన్ అసంభవం. అందుకే అన్ని రకాల ప్రయోగాలు చేశాం.
వాస్తవానికి, వీడియో కమ్యూనికేషన్ కోసం మా అవసరాలు సుమారుగా క్రిందివి:
- స్థిరత్వం;
- పాఠానికి తక్కువ ధర;
- రికార్డింగ్ పాఠాలు;
— ఎవరు ఎంత మాట్లాడుతున్నారో ట్రాక్ చేయడం (పాఠాల సమయంలో ఉపాధ్యాయుల కంటే విద్యార్థులు ఎక్కువగా మాట్లాడటం మాకు ముఖ్యం);
- లీనియర్ స్కేలింగ్;
- UDP మరియు TCP రెండింటినీ ఉపయోగించగల సామర్థ్యం.
2013లో టోక్బాక్స్ని అమలు చేయడానికి మొదట ప్రయత్నించారు. ప్రతిదీ బాగానే ఉంది, కానీ అది చాలా ఖరీదైనది - పాఠానికి 113 రూబిళ్లు - మరియు లాభం తిన్నాయి.
ఆ తర్వాత 2015లో వోక్సింప్లాంట్ను విలీనం చేశారు. ఎవరు ఎంత మాట్లాడారో ట్రాక్ చేయడానికి మాకు అవసరమైన ఫంక్షన్ ఇక్కడ ఉంది మరియు అదే సమయంలో పరిష్కారం చాలా చౌకగా ఉంటుంది: ఆడియో మాత్రమే రికార్డ్ చేయబడితే, పాఠానికి 20 రూబిళ్లు ఖర్చు అవుతుంది. అయినప్పటికీ, ఇది UDP ద్వారా మాత్రమే పని చేస్తుంది మరియు TCPకి మారలేదు. అయినప్పటికీ, దాదాపు 40% మంది విద్యార్థులు దీనిని ఉపయోగించడం ముగించారు.
ఒక సంవత్సరం తర్వాత, మేము వారి స్వంత నిర్దిష్ట అవసరాలతో కార్పొరేట్ క్లయింట్లను కలిగి ఉండటం ప్రారంభించాము. ఉదాహరణకు, ప్రతిదీ బ్రౌజర్ ద్వారా పని చేయాలి; కంపెనీ http మరియు https మాత్రమే తెరుస్తుంది; అంటే స్కైప్ లేదా UDP లేదు. కార్పొరేట్ క్లయింట్లు = డబ్బు, కాబట్టి వారు టోక్బాక్స్కి తిరిగి వచ్చారు, కానీ ధర సమస్య తీరలేదు.
పరిష్కారం - WebRTC మరియు జానస్
ఉపయోగించాలని నిర్ణయించారు
సాధారణ p2p కనెక్షన్ మాకు సరిపోదు, ఎందుకంటే ఫిర్యాదుల విషయంలో తదుపరి విశ్లేషణ కోసం మేము పాఠాలను రికార్డ్ చేయాలనుకుంటున్నాము. అందువల్ల మేము WebRTC స్ట్రీమ్లను రిలే ద్వారా పంపుతాము
2017 వేసవిలో, మేము రెండు Janus సర్వర్లను అమలు చేసాము, దానితో పాటుగా రికార్డ్ చేయబడిన రా ఆడియో మరియు వీడియో ఫైల్లను ప్రాసెస్ చేయడానికి అదనపు సర్వర్ని కలిగి ఉన్నాము, తద్వారా ప్రధానమైన వాటి ప్రాసెసర్లను ఆక్రమించకూడదు. కనెక్ట్ చేస్తున్నప్పుడు, జానస్ సర్వర్లు బేసి-సరి (కనెక్షన్ నంబర్) ఆధారంగా ఎంపిక చేయబడ్డాయి. ఆ సమయంలో, ఇది సరిపోతుంది, మా భావాల ప్రకారం, ఇది సుమారు నాలుగు రెట్లు భద్రతా మార్జిన్ను ఇచ్చింది, అమలు శాతం సుమారు 80. అదే సమయంలో, ధర పాఠానికి ~ 2 రూబిళ్లు, ప్లస్ అభివృద్ధి మరియు మద్దతుకు తగ్గించబడింది.
వీడియో కమ్యూనికేషన్ అంశానికి తిరిగి వస్తున్నాను
సకాలంలో సమస్యలను గుర్తించి సరిచేయడానికి మేము విద్యార్థులు మరియు ఉపాధ్యాయుల నుండి అభిప్రాయాన్ని నిరంతరం పర్యవేక్షిస్తాము. 2018 వేసవి నాటికి, ఫిర్యాదులలో కాల్ నాణ్యత మొదటి స్థానంలో ఉంది. ఒక వైపు, మేము ఇతర లోపాలను విజయవంతంగా అధిగమించామని దీని అర్థం. మరోవైపు, అత్యవసరంగా ఏదైనా చేయడం అవసరం: పాఠం అంతరాయం కలిగితే, మేము దాని విలువను కోల్పోయే ప్రమాదం ఉంది, కొన్నిసార్లు తదుపరి ప్యాకేజీని కొనుగోలు చేసే ఖర్చుతో పాటు, మరియు పరిచయ పాఠం అంతరాయం కలిగితే, మేము సంభావ్య క్లయింట్ను కోల్పోయే ప్రమాదం ఉంది. పూర్తిగా.
ఆ సమయంలో, మా వీడియో కమ్యూనికేషన్ ఇప్పటికీ MVP మోడ్లో ఉంది. సరళంగా చెప్పాలంటే, వారు దానిని ప్రారంభించారు, అది పనిచేసింది, వారు దానిని ఒకసారి స్కేల్ చేసారు, వారు దీన్ని ఎలా చేయాలో అర్థం చేసుకున్నారు - బాగా, గొప్పది. ఇది పని చేస్తే, దాన్ని పరిష్కరించవద్దు. కమ్యూనికేషన్ నాణ్యత సమస్యను ఎవరూ ఉద్దేశపూర్వకంగా ప్రస్తావించలేదు. ఆగస్టు నాటికి, ఇది కొనసాగడం సాధ్యం కాదని స్పష్టమైంది మరియు WebRTC మరియు జానస్లలో ఏమి తప్పు ఉందో గుర్తించడానికి మేము ప్రత్యేక దిశను ప్రారంభించాము.
ఇన్పుట్ వద్ద, ఈ దిశను స్వీకరించారు: MVP పరిష్కారం, కొలమానాలు లేవు, లక్ష్యాలు లేవు, మెరుగుదల కోసం ప్రక్రియలు లేవు, అయితే 7% ఉపాధ్యాయులు కమ్యూనికేషన్ నాణ్యత గురించి ఫిర్యాదు చేస్తారు (విద్యార్థులపై కూడా డేటా లేదు).
కొత్త దిశలో సాగుతోంది
కమాండ్ ఇలా కనిపిస్తుంది:
- విభాగాధిపతి, ప్రధాన డెవలపర్ కూడా.
- QA మార్పులను పరీక్షించడంలో సహాయపడుతుంది, అస్థిర కమ్యూనికేషన్ పరిస్థితులను సృష్టించడానికి కొత్త మార్గాల కోసం వెతుకుతుంది మరియు ముందు లైన్ నుండి సమస్యలను నివేదించింది.
- విశ్లేషకుడు సాంకేతిక డేటాలో వివిధ సహసంబంధాల కోసం నిరంతరం చూస్తాడు, వినియోగదారు అభిప్రాయ విశ్లేషణను మెరుగుపరుస్తాడు మరియు ప్రయోగాల ఫలితాలను తనిఖీ చేస్తాడు.
- ప్రోడక్ట్ మేనేజర్ మొత్తం దిశలో మరియు ప్రయోగాల కోసం వనరుల కేటాయింపుతో సహాయం చేస్తుంది.
- రెండవ డెవలపర్ తరచుగా ప్రోగ్రామింగ్ మరియు సంబంధిత పనులలో సహాయం చేస్తాడు.
ప్రారంభించడానికి, మేము కమ్యూనికేషన్ నాణ్యత అంచనాలలో (రోజులు, వారాలు, నెలల సగటు) మార్పులను ట్రాక్ చేసే సాపేక్షంగా విశ్వసనీయమైన మెట్రిక్ను సెటప్ చేసాము. ఆ సమయంలో, ఇవి ఉపాధ్యాయుల నుండి గ్రేడ్లు; తరువాత విద్యార్థుల నుండి గ్రేడ్లు వాటికి జోడించబడ్డాయి. అప్పుడు వారు తప్పుగా పని చేస్తున్న దాని గురించి పరికల్పనలను రూపొందించడం ప్రారంభించారు, దాన్ని సరిదిద్దారు మరియు డైనమిక్స్లో మార్పులను పరిశీలించారు. మేము తక్కువ-వేలాడే పండు కోసం వెళ్ళాము: ఉదాహరణకు, మేము vp8 కోడెక్ను vp9తో భర్తీ చేసాము, పనితీరు మెరుగుపడింది. మేము జానస్ సెట్టింగ్లతో ఆడటానికి మరియు ఇతర ప్రయోగాలను నిర్వహించడానికి ప్రయత్నించాము - చాలా సందర్భాలలో అవి దేనికీ దారితీయలేదు.
రెండవ దశలో, ఒక పరికల్పన ఉద్భవించింది: WebRTC అనేది పీర్-టు-పీర్ పరిష్కారం మరియు మేము మధ్యలో సర్వర్ని ఉపయోగిస్తాము. బహుశా సమస్య ఇక్కడే ఉందా? మేము త్రవ్వడం ప్రారంభించాము మరియు ఇప్పటివరకు చాలా ముఖ్యమైన అభివృద్ధిని కనుగొన్నాము.
ఆ సమయంలో, పూల్ నుండి ఒక సర్వర్ తెలివితక్కువ అల్గోరిథం ఉపయోగించి ఎంపిక చేయబడింది: ఛానెల్ మరియు శక్తిని బట్టి ప్రతి దాని స్వంత “బరువు” ఉంటుంది మరియు మేము వినియోగదారుని అతిపెద్ద “బరువు” ఉన్న దానికి పంపడానికి ప్రయత్నించాము. వినియోగదారు భౌగోళికంగా ఎక్కడ ఉన్నారనే దానిపై శ్రద్ధ చూపడం. ఫలితంగా, సెయింట్ పీటర్స్బర్గ్లోని ఒక ఉపాధ్యాయుడు సైబీరియా నుండి మాస్కో ద్వారా విద్యార్థితో కమ్యూనికేట్ చేయగలడు మరియు సెయింట్ పీటర్స్బర్గ్లోని మా జానస్ సర్వర్ ద్వారా కాదు.
అల్గోరిథం మళ్లీ చేయబడింది: ఇప్పుడు, ఒక వినియోగదారు మా ప్లాట్ఫారమ్ను తెరిచినప్పుడు, మేము అతని నుండి అజాక్స్ ఉపయోగించి అన్ని సర్వర్లకు పింగ్లను సేకరిస్తాము. కనెక్షన్ని ఏర్పాటు చేస్తున్నప్పుడు, మేము చిన్న మొత్తంతో ఒక జత పింగ్లను (ఉపాధ్యాయుడు-సర్వర్ మరియు విద్యార్థి-సర్వర్) ఎంచుకుంటాము. తక్కువ పింగ్ అంటే సర్వర్కు తక్కువ నెట్వర్క్ దూరం; తక్కువ దూరం అంటే ప్యాకెట్లను కోల్పోయే తక్కువ సంభావ్యత; వీడియో కమ్యూనికేషన్లో ప్యాకెట్ నష్టం అతిపెద్ద ప్రతికూల అంశం. ప్రతికూలత యొక్క వాటా మూడు నెలల్లో సగానికి పడిపోయింది (న్యాయంగా చెప్పాలంటే, ఈ సమయంలో ఇతర ప్రయోగాలు జరిగాయి, అయితే ఇది దాదాపుగా ఎక్కువ ప్రభావం చూపింది).
మేము ఇటీవల మరొక స్పష్టమైన, కానీ స్పష్టంగా ముఖ్యమైన విషయాన్ని కనుగొన్నాము: మందపాటి ఛానెల్లో ఒక శక్తివంతమైన జానస్ సర్వర్కు బదులుగా, సన్నని బ్యాండ్విడ్త్తో రెండు సరళమైన వాటిని కలిగి ఉండటం మంచిది. ఒకే సమయంలో ఇన్ని గదులను (కమ్యూనికేషన్ సెషన్లు) నింపాలనే ఆశతో మేము శక్తివంతమైన యంత్రాలను కొనుగోలు చేసిన తర్వాత ఇది స్పష్టమైంది. సర్వర్లు బ్యాండ్విడ్త్ పరిమితిని కలిగి ఉంటాయి, వీటిని మనం ఖచ్చితంగా గదుల సంఖ్యలోకి అనువదించగలము - ఉదాహరణకు, 300 Mbit/s వద్ద ఎన్ని తెరవవచ్చో మాకు తెలుసు. సర్వర్లో చాలా గదులు తెరవబడిన వెంటనే, లోడ్ తగ్గే వరకు మేము కొత్త కార్యకలాపాల కోసం దాన్ని ఎంచుకోవడం ఆపివేస్తాము. ఆలోచన ఏమిటంటే, శక్తివంతమైన యంత్రాన్ని కొనుగోలు చేసిన తర్వాత, మేము ఛానెల్ను గరిష్టంగా దానికి లోడ్ చేస్తాము, తద్వారా ఇది బ్యాండ్విడ్త్ ద్వారా కాకుండా ప్రాసెసర్ మరియు మెమరీ ద్వారా పరిమితం చేయబడుతుంది. కానీ నిర్దిష్ట సంఖ్యలో ఓపెన్ గదులు (420) తర్వాత, ప్రాసెసర్, మెమరీ మరియు డిస్క్పై లోడ్ ఇప్పటికీ పరిమితుల నుండి చాలా దూరంగా ఉన్నప్పటికీ, ప్రతికూలత సాంకేతిక మద్దతు వద్దకు రావడం ప్రారంభమవుతుంది. స్పష్టంగా, జానస్ లోపల ఏదో అధ్వాన్నంగా ఉంది, బహుశా అక్కడ కూడా కొన్ని పరిమితులు ఉండవచ్చు. మేము ప్రయోగాలు చేయడం ప్రారంభించాము, బ్యాండ్విడ్త్ పరిమితిని 300 నుండి 200 Mbit/sకి తగ్గించాము మరియు సమస్యలు తొలగిపోయాయి. ఇప్పుడు మేము తక్కువ పరిమితులు మరియు లక్షణాలతో ఒకేసారి మూడు కొత్త సర్వర్లను కొనుగోలు చేసాము, ఇది కమ్యూనికేషన్ నాణ్యతలో స్థిరమైన మెరుగుదలకు దారితీస్తుందని మేము భావిస్తున్నాము. వాస్తవానికి, అక్కడ ఏమి జరుగుతుందో గుర్తించడానికి మేము ప్రయత్నించలేదు; మా ఊతకర్రలు అన్నీ ఉన్నాయి. మన రక్షణలో, ఆ సమయంలో నొక్కే సమస్యను వీలైనంత త్వరగా పరిష్కరించాల్సిన అవసరం ఉందని మరియు దానిని అందంగా చేయకూడదని చెప్పండి; అంతేకాకుండా, Janus for us అనేది C లో వ్రాసిన బ్లాక్ బాక్స్, దానితో టింకర్ చేయడం చాలా ఖరీదైనది.
బాగా, ప్రక్రియలో మేము:
- సర్వర్లో మరియు క్లయింట్లో నవీకరించబడే అన్ని డిపెండెన్సీలను నవీకరించింది (ఇవి కూడా ప్రయోగాలు, మేము ఫలితాలను పర్యవేక్షించాము);
- నిర్దిష్ట కేసులకు సంబంధించిన అన్ని గుర్తించబడిన బగ్లు పరిష్కరించబడ్డాయి, ఉదాహరణకు, కనెక్షన్ పడిపోయినప్పుడు మరియు స్వయంచాలకంగా పునరుద్ధరించబడనప్పుడు;
- మేము వీడియో కమ్యూనికేషన్ల రంగంలో పని చేస్తున్న సంస్థలతో చాలా సమావేశాలను నిర్వహించాము మరియు మా సమస్యల గురించి బాగా తెలుసు: స్ట్రీమింగ్ గేమ్లు, వెబ్నార్లను నిర్వహించడం; మాకు ఉపయోగకరంగా అనిపించే ప్రతిదాన్ని మేము ప్రయత్నించాము;
- ఉపాధ్యాయుల హార్డ్వేర్ మరియు కమ్యూనికేషన్ నాణ్యతపై సాంకేతిక సమీక్షను నిర్వహించింది, వీరి నుండి ఎక్కువ ఫిర్యాదులు వచ్చాయి.
ప్రయోగాలు మరియు తదుపరి మార్పులు ఉపాధ్యాయుల మధ్య కమ్యూనికేషన్ పట్ల అసంతృప్తిని జనవరి 7,1లో 2018% నుండి జనవరి 2,5లో 2019%కి తగ్గించడం సాధ్యపడింది.
తదుపరి ఏమిటి
మా Vimbox ప్లాట్ఫారమ్ను స్థిరీకరించడం అనేది 2019 కోసం కంపెనీ యొక్క ప్రధాన ప్రాజెక్ట్లలో ఒకటి. మేము వేగాన్ని కొనసాగించగలమని మరియు ఇకపై అగ్ర ఫిర్యాదులలో వీడియో కమ్యూనికేషన్ను చూడలేమని మేము చాలా ఆశలు కలిగి ఉన్నాము. ఈ ఫిర్యాదులలో గణనీయమైన భాగం వినియోగదారుల కంప్యూటర్లు మరియు ఇంటర్నెట్లో లాగ్లకు సంబంధించినదని మేము అర్థం చేసుకున్నాము, అయితే మేము ఈ భాగాన్ని గుర్తించి, మిగిలిన వాటిని పరిష్కరించాలి. మిగతావన్నీ సాంకేతిక సమస్య, మేము దానిని ఎదుర్కోగలగాలి.
ప్రధాన ఇబ్బంది ఏమిటంటే, నాణ్యతను మెరుగుపరచడం వాస్తవానికి ఏ స్థాయికి సాధ్యమో మనకు తెలియదు. ఈ పైకప్పును కనుగొనడం ప్రధాన పని. అందువలన, రెండు ప్రయోగాలు ప్రణాళిక చేయబడ్డాయి:
- పోరాట పరిస్థితుల్లో సాధారణ p2pతో Janus ద్వారా వీడియోను సరిపోల్చండి. ఈ ప్రయోగం ఇప్పటికే నిర్వహించబడింది, మా పరిష్కారం మరియు p2p మధ్య సంఖ్యాపరంగా గణనీయమైన తేడా కనుగొనబడలేదు;
- వీడియో కమ్యూనికేషన్ సొల్యూషన్స్పై ప్రత్యేకంగా డబ్బు సంపాదించే కంపెనీల నుండి (ఖరీదైన) సేవలను సరఫరా చేద్దాం మరియు వాటి నుండి వచ్చే ప్రతికూలతను ఇప్పటికే ఉన్న దానితో పోల్చండి.
ఈ రెండు ప్రయోగాలు సాధించగల లక్ష్యాన్ని గుర్తించడానికి మరియు దానిపై దృష్టి పెట్టడానికి మాకు అనుమతిస్తాయి.
అదనంగా, మామూలుగా పరిష్కరించబడే అనేక పనులు ఉన్నాయి:
- మేము ఆత్మాశ్రయ సమీక్షలకు బదులుగా కమ్యూనికేషన్ నాణ్యత యొక్క సాంకేతిక కొలమానాన్ని సృష్టిస్తాము;
- సంభవించే వైఫల్యాలను మరింత ఖచ్చితంగా విశ్లేషించడానికి, అవి ఎప్పుడు మరియు ఎక్కడ సంభవించాయో అర్థం చేసుకోవడానికి మరియు ఆ సమయంలో ఎలాంటి సంబంధం లేని సంఘటనలు జరిగాయో అర్థం చేసుకోవడానికి మేము మరింత వివరణాత్మక సెషన్ లాగ్లను తయారు చేస్తాము;
- మేము పాఠానికి ముందు ఆటోమేటిక్ కనెక్షన్ నాణ్యత పరీక్షను సిద్ధం చేస్తాము మరియు క్లయింట్ తన హార్డ్వేర్ మరియు ఛానెల్ వల్ల కలిగే ప్రతికూలతను తగ్గించడానికి కనెక్షన్ను మాన్యువల్గా పరీక్షించే అవకాశాన్ని కూడా అందిస్తాము;
- మేము పేలవమైన పరిస్థితులలో, వేరియబుల్ ప్యాకెట్ నష్టం మొదలైన వాటితో మరిన్ని వీడియో కమ్యూనికేషన్ లోడ్ పరీక్షలను అభివృద్ధి చేస్తాము మరియు నిర్వహిస్తాము.
- తప్పు సహనాన్ని పెంచడానికి సమస్యల విషయంలో మేము సర్వర్ల ప్రవర్తనను మారుస్తాము;
- స్కైప్ చేసినట్లుగా, అతని కనెక్షన్లో ఏదైనా తప్పు ఉంటే మేము వినియోగదారుని హెచ్చరిస్తాము, తద్వారా సమస్య అతని వైపు ఉందని అతను అర్థం చేసుకుంటాడు.
ఏప్రిల్ నుండి, వీడియో కమ్యూనికేషన్ డైరెక్షన్ స్కైంగ్లో పూర్తి స్థాయి ప్రత్యేక ప్రాజెక్ట్గా మారింది, ఇది Vimboxలో ఒక భాగం మాత్రమే కాకుండా దాని స్వంత ఉత్పత్తితో వ్యవహరిస్తుంది. దీని అర్థం మేము వ్యక్తుల కోసం వెతకడం ప్రారంభించాము
మరియు, వాస్తవానికి, మేము వీడియో కమ్యూనికేషన్లతో పనిచేసే వ్యక్తులు మరియు కంపెనీలతో చురుకుగా కమ్యూనికేట్ చేయడం కొనసాగిస్తాము. మీరు మాతో అనుభవాన్ని మార్పిడి చేసుకోవాలనుకుంటే, మేము సంతోషిస్తాము! వ్యాఖ్యానించండి, సంప్రదించండి - మేము అందరికీ సమాధానం ఇస్తాము.
మూలం: www.habr.com