Sveiki, Habr.
В
Tiems, kurie domisi tuo, kas nutiko, tęsinys yra po ranka.
Dar kartą priminsiu, kad statistika ir reitingai nėra oficialūs, neturiu jokios viešai neatskleistos informacijos. Taip pat negarantuojama, kad kur nors nesuklydau ar ko nors nepraleidau. Bet vis tiek manau, kad pasirodė įdomu. Pirmiausia pradėsime nuo kodo, tie, kuriems tai neįdomu, gali praleisti pirmąsias dalis.
Duomenų rinkimas
Pirmojoje analizatoriaus versijoje buvo atsižvelgta tik į peržiūrų, komentarų ir straipsnių įvertinimų skaičių. Tai jau gerai, bet neleidžia pateikti sudėtingesnių užklausų. Atėjo laikas išanalizuoti temines svetainės skiltis, tai leis atlikti gana įdomius tyrimus, pavyzdžiui, pamatyti, kaip per kelerius metus pasikeitė „C++“ skilties populiarumas.
Straipsnių analizatorius buvo patobulintas, dabar jis grąžina centrus, kuriems priklauso straipsnis, taip pat autoriaus slapyvardį ir jo įvertinimą (čia taip pat galima padaryti daug įdomių dalykų, bet tai bus vėliau). Duomenys išsaugomi csv faile, kuris atrodo maždaug taip:
2018-12-18T12:43Z,https://habr.com/ru/post/433550/,"Мессенджер Slack — причины выбора, косяки при внедрении и особенности сервиса, облегчающие жизнь",votes:7,votesplus:8,votesmin:1,bookmarks:32,
views:8300,comments:10,user:ReDisque,karma:5,subscribers:2,hubs:productpm+soft
...
Gausime pagrindinių svetainės teminių centrų sąrašą.
def get_as_str(link: str) -> Str:
try:
r = requests.get(link)
return Str(r.text)
except Exception as e:
return Str("")
def get_hubs():
hubs = []
for p in range(1, 12):
page_html = get_as_str("https://habr.com/ru/hubs/page%d/" % p)
# page_html = get_as_str("https://habr.com/ru/hubs/geektimes/page%d/" % p) # Geektimes
# page_html = get_as_str("https://habr.com/ru/hubs/develop/page%d/" % p) # Develop
# page_html = get_as_str("https://habr.com/ru/hubs/admin/page%d" % p) # Admin
for hub in page_html.split("media-obj media-obj_hub"):
info = Str(hub).find_between('"https://habr.com/ru/hub', 'list-snippet__tags')
if "*</span>" in info:
hub_name = info.find_between('/', '/"')
if len(hub_name) > 0 and len(hub_name) < 32:
hubs.append(hub_name)
print(hubs)
Funkcija find_between ir Str klasė pasirenka eilutę tarp dviejų žymų, aš jas naudojau
Funkcijos get_hubs išvestis yra gana įspūdingas sąrašas, kurį išsaugome kaip žodyną. Konkrečiai pateikiu visą sąrašą, kad galėtumėte įvertinti jo apimtį.
hubs_profile = {'infosecurity', 'programming', 'webdev', 'python', 'sys_admin', 'it-infrastructure', 'devops', 'javascript', 'open_source', 'network_technologies', 'gamedev', 'cpp', 'machine_learning', 'pm', 'hr_management', 'linux', 'analysis_design', 'ui', 'net', 'hi', 'maths', 'mobile_dev', 'productpm', 'win_dev', 'it_testing', 'dev_management', 'algorithms', 'go', 'php', 'csharp', 'nix', 'data_visualization', 'web_testing', 's_admin', 'crazydev', 'data_mining', 'bigdata', 'c', 'java', 'usability', 'instant_messaging', 'gtd', 'system_programming', 'ios_dev', 'oop', 'nginx', 'kubernetes', 'sql', '3d_graphics', 'css', 'geo', 'image_processing', 'controllers', 'game_design', 'html5', 'community_management', 'electronics', 'android_dev', 'crypto', 'netdev', 'cisconetworks', 'db_admins', 'funcprog', 'wireless', 'dwh', 'linux_dev', 'assembler', 'reactjs', 'sales', 'microservices', 'search_technologies', 'compilers', 'virtualization', 'client_side_optimization', 'distributed_systems', 'api', 'media_management', 'complete_code', 'typescript', 'postgresql', 'rust', 'agile', 'refactoring', 'parallel_programming', 'mssql', 'game_promotion', 'robo_dev', 'reverse-engineering', 'web_analytics', 'unity', 'symfony', 'build_automation', 'swift', 'raspberrypi', 'web_design', 'kotlin', 'debug', 'pay_system', 'apps_design', 'git', 'shells', 'laravel', 'mobile_testing', 'openstreetmap', 'lua', 'vs', 'yii', 'sport_programming', 'service_desk', 'itstandarts', 'nodejs', 'data_warehouse', 'ctf', 'erp', 'video', 'mobileanalytics', 'ipv6', 'virus', 'crm', 'backup', 'mesh_networking', 'cad_cam', 'patents', 'cloud_computing', 'growthhacking', 'iot_dev', 'server_side_optimization', 'latex', 'natural_language_processing', 'scala', 'unreal_engine', 'mongodb', 'delphi', 'industrial_control_system', 'r', 'fpga', 'oracle', 'arduino', 'magento', 'ruby', 'nosql', 'flutter', 'xml', 'apache', 'sveltejs', 'devmail', 'ecommerce_development', 'opendata', 'Hadoop', 'yandex_api', 'game_monetization', 'ror', 'graph_design', 'scada', 'mobile_monetization', 'sqlite', 'accessibility', 'saas', 'helpdesk', 'matlab', 'julia', 'aws', 'data_recovery', 'erlang', 'angular', 'osx_dev', 'dns', 'dart', 'vector_graphics', 'asp', 'domains', 'cvs', 'asterisk', 'iis', 'it_monetization', 'localization', 'objectivec', 'IPFS', 'jquery', 'lisp', 'arvrdev', 'powershell', 'd', 'conversion', 'animation', 'webgl', 'wordpress', 'elm', 'qt_software', 'google_api', 'groovy_grails', 'Sailfish_dev', 'Atlassian', 'desktop_environment', 'game_testing', 'mysql', 'ecm', 'cms', 'Xamarin', 'haskell', 'prototyping', 'sw', 'django', 'gradle', 'billing', 'tdd', 'openshift', 'canvas', 'map_api', 'vuejs', 'data_compression', 'tizen_dev', 'iptv', 'mono', 'labview', 'perl', 'AJAX', 'ms_access', 'gpgpu', 'infolust', 'microformats', 'facebook_api', 'vba', 'twitter_api', 'twisted', 'phalcon', 'joomla', 'action_script', 'flex', 'gtk', 'meteorjs', 'iconoskaz', 'cobol', 'cocoa', 'fortran', 'uml', 'codeigniter', 'prolog', 'mercurial', 'drupal', 'wp_dev', 'smallbasic', 'webassembly', 'cubrid', 'fido', 'bada_dev', 'cgi', 'extjs', 'zend_framework', 'typography', 'UEFI', 'geo_systems', 'vim', 'creative_commons', 'modx', 'derbyjs', 'xcode', 'greasemonkey', 'i2p', 'flash_platform', 'coffeescript', 'fsharp', 'clojure', 'puppet', 'forth', 'processing_lang', 'firebird', 'javame_dev', 'cakephp', 'google_cloud_vision_api', 'kohanaphp', 'elixirphoenix', 'eclipse', 'xslt', 'smalltalk', 'googlecloud', 'gae', 'mootools', 'emacs', 'flask', 'gwt', 'web_monetization', 'circuit-design', 'office365dev', 'haxe', 'doctrine', 'typo3', 'regex', 'solidity', 'brainfuck', 'sphinx', 'san', 'vk_api', 'ecommerce'}
Palyginimui, geektimes skyriai atrodo kukliau:
hubs_gt = {'popular_science', 'history', 'soft', 'lifehacks', 'health', 'finance', 'artificial_intelligence', 'itcompanies', 'DIY', 'energy', 'transport', 'gadgets', 'social_networks', 'space', 'futurenow', 'it_bigraphy', 'antikvariat', 'games', 'hardware', 'learning_languages', 'urban', 'brain', 'internet_of_things', 'easyelectronics', 'cellular', 'physics', 'cryptocurrency', 'interviews', 'biotech', 'network_hardware', 'autogadgets', 'lasers', 'sound', 'home_automation', 'smartphones', 'statistics', 'robot', 'cpu', 'video_tech', 'Ecology', 'presentation', 'desktops', 'wearable_electronics', 'quantum', 'notebooks', 'cyberpunk', 'Peripheral', 'demoscene', 'copyright', 'astronomy', 'arvr', 'medgadgets', '3d-printers', 'Chemistry', 'storages', 'sci-fi', 'logic_games', 'office', 'tablets', 'displays', 'video_conferencing', 'videocards', 'photo', 'multicopters', 'supercomputers', 'telemedicine', 'cybersport', 'nano', 'crowdsourcing', 'infographics'}
Likę stebulės buvo išsaugotos taip pat. Dabar lengva parašyti funkciją, kuri grąžina rezultatą, nesvarbu, ar straipsnis priklauso geektimes, ar profilio centrui.
def is_geektimes(hubs: List) -> bool:
return len(set(hubs) & hubs_gt) > 0
def is_geektimes_only(hubs: List) -> bool:
return is_geektimes(hubs) is True and is_profile(hubs) is False
def is_profile(hubs: List) -> bool:
return len(set(hubs) & hubs_profile) > 0
Panašios funkcijos buvo padarytos ir kitiems skyriams („plėtra“, „administravimas“ ir kt.).
apdorojimas
Pats laikas pradėti analizuoti. Įkeliame duomenų rinkinį ir apdorojame koncentratoriaus duomenis.
def to_list(s: str) -> List[str]:
# "user:popular_science+astronomy" => [popular_science, astronomy]
return s.split(':')[1].split('+')
def to_date(dt: datetime) -> datetime.date:
return dt.date()
df = pd.read_csv("habr_2019.csv", sep=',', encoding='utf-8', error_bad_lines=True, quotechar='"', comment='#')
dates = pd.to_datetime(df['datetime'], format='%Y-%m-%dT%H:%MZ')
dates += datetime.timedelta(hours=3)
df['date'] = dates.map(to_date, na_action=None)
hubs = df["hubs"].map(to_list, na_action=None)
df['hubs'] = hubs
df['is_profile'] = hubs.map(is_profile, na_action=None)
df['is_geektimes'] = hubs.map(is_geektimes, na_action=None)
df['is_geektimes_only'] = hubs.map(is_geektimes_only, na_action=None)
df['is_admin'] = hubs.map(is_admin, na_action=None)
df['is_develop'] = hubs.map(is_develop, na_action=None)
Dabar galime sugrupuoti duomenis pagal dieną ir rodyti įvairių centrų publikacijų skaičių.
g = df.groupby(['date'])
days_count = g.size().reset_index(name='counts')
year_days = days_count['date'].values
grouped = g.sum().reset_index()
profile_per_day_avg = grouped['is_profile'].rolling(window=20, min_periods=1).mean()
geektimes_per_day_avg = grouped['is_geektimes'].rolling(window=20, min_periods=1).mean()
geektimesonly_per_day_avg = grouped['is_geektimes_only'].rolling(window=20, min_periods=1).mean()
admin_per_day_avg = grouped['is_admin'].rolling(window=20, min_periods=1).mean()
develop_per_day_avg = grouped['is_develop'].rolling(window=20, min_periods=1).mean()
Rodome paskelbtų straipsnių skaičių naudojant Matplotlib:
Diagramoje suskirstiau straipsnius „geektimes“ ir „geektimes only“, nes Straipsnis gali priklausyti abiem skyriams vienu metu (pvz., „pasidaryk pats“ + „mikrovaldikliai“ + „C++“). Naudojau pavadinimą „profilis“, kad paryškinčiau profilio straipsnius svetainėje, nors galbūt angliškas terminas profile nėra visiškai teisingas.
Ankstesnėje dalyje teiravomės apie „geektime“ efektą, susijusį su straipsnių apmokėjimo taisyklių pakeitimu nuo šios vasaros. Atskirai parodykime „geektimes“ straipsnius:
df_gt = df[(df['is_geektimes_only'] == True)]
group_gt = df_gt.groupby(['date'])
days_count_gt = group_gt.size().reset_index(name='counts')
grouped = group_gt.sum().reset_index()
year_days_gt = days_count_gt['date'].values
view_gt_per_day_avg = grouped['views'].rolling(window=20, min_periods=1).mean()
Rezultatas įdomus. Apytikslis „geektimes“ straipsnių peržiūrų ir bendro skaičiaus santykis yra maždaug 1:5. Tačiau nors bendras peržiūrų skaičius pastebimai svyravo, „pramoginių“ straipsnių peržiūra išliko maždaug tokia pati.
Taip pat galite pastebėti, kad bendras straipsnių peržiūrų skaičius skiltyje „geektimes“ vis tiek sumažėjo pakeitus taisykles, bet „iš akies“, ne daugiau kaip 5% visų reikšmių.
Įdomu pažvelgti į vidutinį vieno straipsnio peržiūrų skaičių:
„Pramoginių“ straipsnių atveju jis yra maždaug 40% didesnis nei vidutinis. Tai tikriausiai nestebina. Balandžio pradžios gedimas man neaiškus, gal taip ir atsitiko, o gal kažkokia analizavimo klaida, o gal vienas iš geektimes autorių išėjo atostogų ;).
Beje, grafike matyti dar du pastebimi straipsnių peržiūrų pikai – Naujieji metai ir gegužės šventės.
Stebulės
Pereikime prie žadėtos koncentratorių analizės. Išvardinkime 20 populiariausių centrų pagal peržiūrų skaičių:
hubs_info = []
for hub_name in hubs_all:
mask = df['hubs'].apply(lambda x: hub_name in x)
df_hub = df[mask]
count, views = df_hub.shape[0], df_hub['views'].sum()
hubs_info.append((hub_name, count, views))
# Draw hubs
hubs_top = sorted(hubs_info, key=lambda v: v[2], reverse=True)[:20]
top_views = list(map(lambda x: x[2], hubs_top))
top_names = list(map(lambda x: x[0], hubs_top))
plt.rcParams["figure.figsize"] = (8, 6)
plt.bar(range(0, len(top_views)), top_views)
plt.xticks(range(0, len(top_names)), top_names, rotation=90)
plt.ticklabel_format(style='plain', axis='y')
plt.tight_layout()
plt.show()
Rezultatas:
Stebėtina, kad populiariausias centras pagal nuomones buvo „Informacijos saugumas“;
Antitop užima Gtk ir kakavą.
Išduosiu paslaptį, matosi ir viršutiniai stebulės
Įvertinimas
Ir pabaigai – žadėtas įvertinimas. Naudodami centrų analizės duomenis galime rodyti populiariausius šių 2019 m. centrų straipsnius.
Informacijos saugumas
Kaip aš metus nedirbau Sberbanke 304000 599 peržiūrų, 457.0 komentarai, įvertinimas +14.0/-XNUMXIšmestos išmaniosios lemputės yra vertingas asmeninės informacijos šaltinis 232000 147 peržiūrų, 75.0 komentarai, įvertinimas +11.0/-XNUMXSukčiai ir skaitmeniniai parašai – viskas labai blogai 176000 778 peržiūrų, 356.0 komentarai, įvertinimas +0.0/-XNUMXKaip „Megafon“ išdegė mobiliojo ryšio abonementuose 166000 676 peržiūrų, 624.0 komentarai, įvertinimas +2.0/-XNUMXĮsilaužimas į VK, dviejų veiksnių autentifikavimas neišsaugos 148000 332 peržiūrų, 124.0 komentarai, įvertinimas +17.0/-XNUMXKaip naršyklė padeda bendražygiui majorui 132000 321 peržiūrų, 246.0 komentaras, įvertinimas +19.0/-XNUMXDidžiausias sąvartynas istorijoje: 2,7 milijardo sąskaitų, iš kurių 773 milijonai yra unikalios 123000 154 peržiūrų, 86.0 komentarai, įvertinimas +5.0/-XNUMXMieloji, mes žudome internetą 121000 933 peržiūrų, 392.0 komentarai, įvertinimas +83.0/-XNUMX„Mobilusis turinys“ yra nemokamas, be SMS ar registracijos. Išsami informacija apie sukčiavimą iš Megafon 114000 478 peržiūrų, 488.0 komentarai, įvertinimas +8.0/-XNUMXPort skaitytuvas jūsų Rostelecom asmeninėje paskyroje 111000 194 peržiūrų, 300.0 komentarai, įvertinimas +8.0/-XNUMX
Programavimas
Apie vieną vaikiną 167000 249 peržiūrų, 239.0 komentarai, įvertinimas +33.0/-XNUMXKuo greičiau pamiršite OOP, tuo geriau jums ir jūsų programoms 129000 1271 peržiūrų, 131.0 komentaras, įvertinimas +63.0/-XNUMXKodėl vyresnieji kūrėjai negali gauti darbo 119000 901 peržiūrų, 151.0 komentaras, įvertinimas +14.0/-XNUMXAr čia ne vieta seniems žmonėms? Programavimas po trisdešimt penkių 116000 649 peržiūrų, 222.0 komentarai, įvertinimas +16.0/-XNUMXNaujos programavimo kalbos tyliai naikina mūsų ryšį su realybe 106000 764 peržiūrų, 164.0 komentarai, įvertinimas +52.0/-XNUMXKo išmokau sunkiai (daugiau nei 30 metų programinės įrangos kūrimo srityje) 101000 128 peržiūrų, 178.0 komentarai, įvertinimas +9.0/-XNUMXRečiausios ir brangiausios programavimo kalbos 82900 119 peržiūrų, 38.0 komentarai, įvertinimas +10.0/-XNUMX„JavaScript“ ir „Node.js“ paskaitų kursas KPI 80300 14 peržiūrų, 34.0 komentarai, įvertinimas +2.0/-XNUMXIT terminai naudojant bulvių auginimo proceso pavyzdį 78000 86 peržiūrų, 84.0 komentarai, įvertinimas +14.0/-XNUMX256 eilutės be C++: parašyti spindulių sekiklį nuo nulio per kelias valandas 77600 124 peržiūrų, 241.0 komentarai, įvertinimas +0.0/-XNUMX
Populiarusis mokslas
Ką dizaineris rūkė: neįprasti šaunamieji ginklai 236000 123 peržiūrų, 119.0 komentarai, įvertinimas +9.0/-XNUMXMokslininkai rado seniausią gyvą stuburinį gyvūną Žemėje 234000 212 peržiūrų, 82.0 komentarai, įvertinimas +14.0/-XNUMXSerialas „Černobylis“: žiūrėkite ir galvokite 173000 803 peržiūrų, 164.0 komentarai, įvertinimas +25.0/-XNUMX12 metų paauglys savo namų laboratorijoje atliko branduolių sintezės reakciją. 145000 280 peržiūrų, 126.0 komentarai, įvertinimas +29.0/-XNUMXPasaka apie lydinio rožę ir kritusią Krenka 134000 244 peržiūrų, 217.0 komentarai, įvertinimas +1.0/-XNUMXPadarykite jį didesnį! Šiuolaikinis raiškos patobulinimas 134000 235 peržiūrų, 377.0 komentarai, įvertinimas +1.0/-XNUMX„Boeing 737 Max“ programinę įrangą parašė užsakovai, uždirbantys 9 USD per valandą 126000 560 peržiūrų, 153.0 komentarai, įvertinimas +6.0/-XNUMXNesijaudinkite, neskubėkite, nepertraukite: tragedijos istorija 121000 384 peržiūrų, 242.0 komentarai, įvertinimas +4.0/-XNUMXMatematikai atrado puikų skaičių daugybos būdą 108000 222 peržiūrų, 173.0 komentarai, įvertinimas +10.0/-XNUMXNaujos programavimo kalbos tyliai naikina mūsų ryšį su realybe 106000 764 peržiūrų, 164.0 komentarai, įvertinimas +52.0/-XNUMX
karjera
Kaip aš metus nedirbau Sberbanke 304000 599 peržiūrų, 457.0 komentarai, įvertinimas +14.0/-XNUMXAš sugadinau kūrėjų gyvenimus savo kodų apžvalgomis ir atsiprašau 187000 21 peržiūrų, 37.0 komentaras, įvertinimas +3.0/-XNUMXVystymosi karalius 179000 668 peržiūrų, 315.0 komentarai, įvertinimas +60.0/-XNUMXApie vieną vaikiną 167000 249 peržiūrų, 239.0 komentarai, įvertinimas +33.0/-XNUMXIšeikite į pensiją 22 m 158000 927 peržiūrų, 259.0 komentarai, įvertinimas +100.0/-XNUMXKaip pakeisti lemputę savo darbo vietoje neatleidžiant? 139000 762 peržiūrų, 200.0 komentarai, įvertinimas +20.0/-XNUMXNaujovės rusų kalba 128000 612 peržiūrų, 480.0 komentarai, įvertinimas +33.0/-XNUMXKodėl vyresnieji kūrėjai negali gauti darbo 119000 901 peržiūrų, 151.0 komentaras, įvertinimas +14.0/-XNUMX„Sudeginti“ darbuotojai: ar yra išeitis? 117000 398 peržiūrų, 210.0 komentarai, įvertinimas +14.0/-XNUMXAr čia ne vieta seniems žmonėms? Programavimas po trisdešimt penkių 116000 649 peržiūrų, 222.0 komentarai, įvertinimas +16.0/-XNUMX
Teisės aktai IT srityje
Sukčiai ir skaitmeniniai parašai – viskas labai blogai 176000 778 peržiūrų, 356.0 komentarai, įvertinimas +0.0/-XNUMXKaip „Megafon“ išdegė mobiliojo ryšio abonementuose 166000 676 peržiūrų, 624.0 komentarai, įvertinimas +2.0/-XNUMXNaujovės rusų kalba 128000 612 peržiūrų, 480.0 komentarai, įvertinimas +33.0/-XNUMX„Mobilusis turinys“ yra nemokamas, be SMS ar registracijos. Išsami informacija apie sukčiavimą iš Megafon 114000 478 peržiūrų, 488.0 komentarai, įvertinimas +8.0/-XNUMXKaip Kazachstano valdžia bando nuslėpti savo nesugebėjimą įgyvendinti sertifikatą 111000 77 peržiūrų, 122.0 komentarai, įvertinimas +14.0/-XNUMXKaip Protonmail blokuojamas Rusijoje 102000 398 peržiūrų, 418.0 komentarai, įvertinimas +7.0/-XNUMXĮstatymą dėl Runeto izoliavimo Valstybės Dūma priėmė trimis svarstymais 88200 878 peržiūrų, 73.0 komentarai, įvertinimas +18.0/-XNUMXKaip programuotojas pasirinko banką ir skaitė sutartis 87200 611 peržiūrų, 166.0 komentarai, įvertinimas +9.0/-XNUMXTelekomunikacijų ir masinių komunikacijų ministerija patvirtino įstatymo projektą dėl RuNet izoliavimo 83600 364 peržiūrų, 79.0 komentarai, įvertinimas +9.0/-XNUMXIšsamus atsakymas į komentarą, taip pat šiek tiek apie paslaugų teikėjų gyvenimą Rusijos Federacijoje 74700 389 peržiūrų, 290.0 komentarai, įvertinimas +1.0/-XNUMX
Interneto kūrimas
Ar čia ne vieta seniems žmonėms? Programavimas po trisdešimt penkių 116000 649 peržiūrų, 222.0 komentarai, įvertinimas +16.0/-XNUMXKaip sukurti svetaines 2019 m 110000 278 peržiūrų, 233.0 komentarai, įvertinimas +11.0/-XNUMXMokymasis Docker 1 dalis: pagrindai 91300 24 peržiūrų, 52.0 komentarai, įvertinimas +10.0/-XNUMX„JavaScript“ ir „Node.js“ paskaitų kursas KPI 80300 14 peržiūrų, 34.0 komentarai, įvertinimas +2.0/-XNUMXStažuotojas Vasya ir jo istorijos apie API idempotenciją 68900 160 peržiūrų, 216.0 komentarai, įvertinimas +3.0/-XNUMXSujungimų supratimas sulaužytas. Tiesą sakant, tai tikrai nėra apskritimų sankirta 65900 223 peržiūrų, 138.0 komentarai, įvertinimas +41.0/-XNUMXKodėl neturėtumėte gaišti laiko kurdami nišines temines svetaines 62700 243 peržiūrų, 179.0 komentarai, įvertinimas +13.0/-XNUMXŠiuolaikinės žiniatinklio programos kūrimas nuo nulio 62200 122 peržiūrų, 56.0 komentarai, įvertinimas +8.0/-XNUMXTamsi diena Vue.js 60800 133 peržiūrų, 77.0 komentarai, įvertinimas +6.0/-XNUMXKodėl šiuolaikinis interneto kūrimas toks sudėtingas? 1 dalis 57700 319 peržiūrų, 101.0 komentarai, įvertinimas +6.0/-XNUMX
GTK
Ir galiausiai, kad niekas neįsižeistų, pateiksiu mažiausiai lankomo mazgo „gtk“ įvertinimą. Per metus jis buvo paskelbtas vienas straipsnis, kuris taip pat „automatiškai“ užima pirmąją reitingo eilutę.
Naudojant GtkApplication. librsvg atvaizdavimo funkcijos 1700 9 peržiūrų, 9.0 komentarai, įvertinimas +1.0/-XNUMX
išvada
Išvados nebus. Malonaus skaitymo visiems.
Šaltinis: www.habr.com