Π₯Π΅ΠΉ Π₯Π°Π±Ρ.
Π
ΠΠ° ΡΠ΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°Ρ ΠΎΡ ΡΠ»ΡΡΠΈΠ»ΠΎΡΠΎ ΡΠ΅, ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π΅ ΠΏΠΎΠ΄ ΡΠ°Π·ΡΠ΅Π·.
ΠΡΠ΅ Π²Π΅Π΄Π½ΡΠΆ Π½Π°ΠΏΠΎΠΌΠ½ΡΠΌ, ΡΠ΅ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ° ΠΈ ΡΠ΅ΠΉΡΠΈΠ½Π³ΠΈΡΠ΅ Π½Π΅ ΡΠ° ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΈ, Π½ΡΠΌΠ°ΠΌ Π²ΡΡΡΠ΅ΡΠ½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° Π½Π΅ Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΠ°Π½ΠΎ, ΡΠ΅ Π½ΡΠΊΡΠ΄Π΅ Π½Π΅ ΡΡΠΌ ΡΠ±ΡΡΠΊΠ°Π» ΠΈΠ»ΠΈ ΡΡΠΌ ΠΏΡΠΎΠΏΡΡΠ½Π°Π» Π½Π΅ΡΠΎ. ΠΠΎ Π²ΡΠ΅ ΠΏΠ°ΠΊ ΠΌΠΈΡΠ»Ρ, ΡΠ΅ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ. ΠΡΡΠ²ΠΎ ΡΠ΅ Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ Ρ ΠΊΠΎΠ΄Π°; ΡΠ΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°Ρ ΠΎΡ ΡΠΎΠ²Π°, ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΏΡΠΎΠΏΡΡΠ½Π°Ρ ΠΏΡΡΠ²ΠΈΡΠ΅ ΡΠ΅ΠΊΡΠΈΠΈ.
Π‘ΡΠ±ΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ
Π ΠΏΡΡΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ΠΏΠ°ΡΡΠ΅ΡΠ° Π±ΡΡ Π° Π²Π·Π΅ΡΠΈ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΡΠ°ΠΌΠΎ Π±ΡΠΎΡΡ Π³Π»Π΅Π΄Π°Π½ΠΈΡ, ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅ ΠΈ ΠΎΡΠ΅Π½ΠΊΠΈΡΠ΅ Π½Π° ΡΡΠ°ΡΠΈΠΈΡΠ΅. Π’ΠΎΠ²Π° Π²Π΅ΡΠ΅ Π΅ Π΄ΠΎΠ±ΡΠ΅, Π½ΠΎ Π½Π΅ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΏΠΎ-ΡΠ»ΠΎΠΆΠ½ΠΈ Π·Π°ΡΠ²ΠΊΠΈ. ΠΡΠ΅ΠΌΠ΅ Π΅ Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΡΠ΅ΠΌΠ°ΡΠΈΡΠ½ΠΈΡΠ΅ ΡΠ°Π·Π΄Π΅Π»ΠΈ Π½Π° ΡΠ°ΠΉΡΠ°; ΡΠΎΠ²Π° ΡΠ΅ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ Π΄ΠΎΡΡΠ° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΈ ΠΈΠ·ΡΠ»Π΅Π΄Π²Π°Π½ΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΈΠΆΡΠ΅ ΠΊΠ°ΠΊ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΡΠ° Π½Π° ΡΠ΅ΠΊΡΠΈΡΡΠ° βC++β ΡΠ΅ Π΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠ»Π° Π² ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π³ΠΎΠ΄ΠΈΠ½ΠΈ.
ΠΠ½Π°Π»ΠΈΠ·Π°ΡΠΎΡΡΡ Π½Π° ΡΡΠ°ΡΠΈΠΈ Π΅ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½, ΡΠ΅Π³Π° Π²ΡΡΡΠ° Ρ ΡΠ±ΠΎΠ²Π΅ΡΠ΅, ΠΊΡΠΌ ΠΊΠΎΠΈΡΠΎ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈ ΡΡΠ°ΡΠΈΡΡΠ°, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠ° Π½Π° Π°Π²ΡΠΎΡΠ° ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΡ ΡΠ΅ΠΉΡΠΈΠ½Π³ (ΡΡΠΊ ΡΡΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΏΡΠ°Π²ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΈ Π½Π΅ΡΠ°, Π½ΠΎ ΡΠΎΠ²Π° ΡΠ΅ Π΄ΠΎΠΉΠ΄Π΅ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ). ΠΠ°Π½Π½ΠΈΡΠ΅ ΡΠ΅ Π·Π°ΠΏΠΈΡΠ²Π°Ρ Π² csv ΡΠ°ΠΉΠ», ΠΊΠΎΠΉΡΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½:
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
...
Π©Π΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠΏΠΈΡΡΠΊ Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΡΠ΅ΠΌΠ°ΡΠΈΡΠ½ΠΈ ΡΠ΅Π½ΡΡΠΎΠ²Π΅ Π½Π° ΡΠ°ΠΉΡΠ°.
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)
Π€ΡΠ½ΠΊΡΠΈΡΡΠ° find_between ΠΈ ΠΊΠ»Π°ΡΡΡ Str ΠΈΠ·Π±ΠΈΡΠ°Ρ Π½ΠΈΠ· ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²Π° ΡΠ°Π³ΠΎΠ²Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ
Π³ΠΈ
Π Π΅Π·ΡΠ»ΡΠ°ΡΡΡ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΡΡΠ° get_hubs Π΅ Π΄ΠΎΡΡΠ° Π²ΠΏΠ΅ΡΠ°ΡΠ»ΡΠ²Π°Ρ ΡΠΏΠΈΡΡΠΊ, ΠΊΠΎΠΉΡΠΎ Π·Π°ΠΏΠ°Π·Π²Π°ΠΌΠ΅ ΠΊΠ°ΡΠΎ ΡΠ΅ΡΠ½ΠΈΠΊ. Π‘ΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠΌ ΡΠΏΠΈΡΡΠΊΠ° Π² Π½Π΅Π³ΠΎΠ²Π°ΡΠ° ΡΡΠ»ΠΎΡΡ, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠ΅ΡΠ΅Π½ΠΈΡΠ΅ ΠΎΠ±Π΅ΠΌΠ° ΠΌΡ.
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'}
ΠΠ° ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅, ΡΠ΅ΠΊΡΠΈΠΈΡΠ΅ Π½Π° geektimes ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ ΠΏΠΎ-ΡΠΊΡΠΎΠΌΠ½ΠΈ:
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'}
ΠΡΡΠ°Π½Π°Π»ΠΈΡΠ΅ Π³Π»Π°Π²ΠΈΠ½ΠΈ Π±ΡΡ Π° Π·Π°ΠΏΠ°Π·Π΅Π½ΠΈ ΠΏΠΎ ΡΡΡΠΈΡ Π½Π°ΡΠΈΠ½. Π‘Π΅Π³Π° Π΅ Π»Π΅ΡΠ½ΠΎ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΡΠΎ Π²ΡΡΡΠ° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ°, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ Π΄Π°Π»ΠΈ ΡΡΠ°ΡΠΈΡΡΠ° ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈ Π½Π° geektimes ΠΈΠ»ΠΈ ΡΠ΅Π½ΡΡΡ Π½Π° ΠΏΡΠΎΡΠΈΠ»ΠΈ.
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
ΠΠΎΠ΄ΠΎΠ±Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ° Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΈ ΠΈ Π·Π° Π΄ΡΡΠ³ΠΈ ΡΠ΅ΠΊΡΠΈΠΈ (βΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°β, βΠ°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΈΡβ ΠΈ Π΄Ρ.).
ΠΠ±ΡΠ°Π±ΠΎΡΠ²Π°Π½Π΅
ΠΡΠ΅ΠΌΠ΅ Π΅ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅. ΠΠ°ΡΠ΅ΠΆΠ΄Π°ΠΌΠ΅ Π½Π°Π±ΠΎΡΠ° ΠΎΡ Π΄Π°Π½Π½ΠΈ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°ΠΌΠ΅ Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΎΡ ΡΠ΅Π½ΡΡΡΠ°.
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)
Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π³ΡΡΠΏΠΈΡΠ°ΠΌΠ΅ Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΏΠΎ Π΄Π½ΠΈ ΠΈ Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ Π±ΡΠΎΡ Π½Π° ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠ΅Π½ΡΡΠΎΠ²Π΅.
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()
ΠΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Π²Π°ΠΌΠ΅ Π±ΡΠΎΡ Π½Π° ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½ΠΈΡΠ΅ ΡΡΠ°ΡΠΈΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Matplotlib:
Π Π°Π·Π΄Π΅Π»ΠΈΡ
ΡΡΠ°ΡΠΈΠΈΡΠ΅ βgeektimesβ ΠΈ βgeektimes onlyβ Π² Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠ°ΡΠ°, Π·Π°ΡΠΎΡΠΎ ΠΠ΄Π½Π° ΡΡΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈ ΠΊΡΠΌ Π΄Π²Π°ΡΠ° ΡΠ°Π·Π΄Π΅Π»Π° Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ βΠΠ°ΠΏΡΠ°Π²ΠΈ ΡΠΈ ΡΠ°ΠΌβ + βΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠΈβ + βC++β). ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ
ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΡΠΎ βΠΏΡΠΎΡΠΈΠ»β, Π·Π° Π΄Π° ΠΏΠΎΠ΄ΡΠ΅ΡΡΠ°Ρ ΠΏΡΠΎΡΠΈΠ»Π½ΠΈ ΡΡΠ°ΡΠΈΠΈ Π² ΡΠ°ΠΉΡΠ°, Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π±ΠΈ Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈΡΡ ΡΠ΅ΡΠΌΠΈΠ½ ΠΏΡΠΎΡΠΈΠ» Π·Π° ΡΠΎΠ²Π° Π½Π΅ Π΅ Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π΅Π½.
Π ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° ΡΠ°ΡΡ ΠΏΠΎΠΏΠΈΡΠ°Ρ ΠΌΠ΅ Π·Π° βΠ΅ΡΠ΅ΠΊΡΠ° Π½Π° geektimesβ, ΡΠ²ΡΡΠ·Π°Π½ Ρ ΠΏΡΠΎΠΌΡΠ½Π°ΡΠ° Π² ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° Π·Π° ΠΏΠ»Π°ΡΠ°Π½Π΅ Π·Π° ΡΡΠ°ΡΠΈΠΈ Π·Π° geektimes ΠΎΡ ΡΠΎΠ²Π° Π»ΡΡΠΎ. ΠΠ΅ΠΊΠ° Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΠΎΡΠ΄Π΅Π»Π½ΠΎ ΡΡΠ°ΡΠΈΠΈΡΠ΅ Π½Π° geektimes:
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()
Π Π΅Π·ΡΠ»ΡΠ°ΡΡΡ Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½. ΠΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π½ΠΎΡΠΎ ΡΡΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° Π³Π»Π΅Π΄Π°Π½ΠΈΡΡΠ° Π½Π° ΡΡΠ°ΡΠΈΠΈΡΠ΅ Π² geektimes ΡΠΏΡΡΠΌΠΎ ΠΎΠ±ΡΠΈΡ Π±ΡΠΎΠΉ Π΅ Π½ΡΠΊΡΠ΄Π΅ ΠΎΠΊΠΎΠ»ΠΎ 1:5. ΠΠΎ Π΄ΠΎΠΊΠ°ΡΠΎ ΠΎΠ±ΡΠΈΡΡ Π±ΡΠΎΠΉ Π³Π»Π΅Π΄Π°Π½ΠΈΡ ΡΠ΅ ΠΊΠΎΠ»Π΅Π±Π°Π΅ΡΠ΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΠΌΠΎ, Π³Π»Π΅Π΄Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ°ΡΠΈΠΈΡΠ΅ Π·Π° βΡΠ°Π·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅β ΠΎΡΡΠ°Π²Π° ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π½ΠΎ Π½Π° ΡΡΡΠΎΡΠΎ Π½ΠΈΠ²ΠΎ.
ΠΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠΎ ΡΠ°ΠΊΠ° Π΄Π° Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡΠ΅, ΡΠ΅ ΠΎΠ±ΡΠΈΡΡ Π±ΡΠΎΠΉ Π³Π»Π΅Π΄Π°Π½ΠΈΡ Π½Π° ΡΡΠ°ΡΠΈΠΈ Π² ΡΠ΅ΠΊΡΠΈΡΡΠ° βgeektimesβ Π²ΡΠ΅ ΠΎΡΠ΅ Π΅ ΡΠΏΠ°Π΄Π½Π°Π» ΡΠ»Π΅Π΄ ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ°, Π½ΠΎ βΠ½Π° ΠΎΠΊΠΎβ, Ρ Π½Π΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ 5% ΠΎΡ ΠΎΠ±ΡΠΈΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ.
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ Π²ΠΈΠ΄ΠΈ ΡΡΠ΅Π΄Π½ΠΈΡΡ Π±ΡΠΎΠΉ Π³Π»Π΅Π΄Π°Π½ΠΈΡ Π½Π° ΡΡΠ°ΡΠΈΡ:
ΠΠ° βΡΠ°Π·Π²Π»Π΅ΠΊΠ°ΡΠ΅Π»Π½ΠΈβ ΡΡΠ°ΡΠΈΠΈ Π΅ Ρ ΠΎΠΊΠΎΠ»ΠΎ 40% Π½Π°Π΄ ΡΡΠ΅Π΄Π½ΠΎΡΠΎ. Π’ΠΎΠ²Π° Π²Π΅ΡΠΎΡΡΠ½ΠΎ Π½Π΅ Π΅ ΠΈΠ·Π½Π΅Π½Π°Π΄Π²Π°ΡΠΎ. ΠΡΠΎΠ²Π°Π»ΡΡ Π² Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° Π°ΠΏΡΠΈΠ» Π½Π΅ ΠΌΠΈ Π΅ ΡΡΠ΅Π½, ΠΌΠΎΠΆΠ΅ Π±ΠΈ ΡΠΎΠ²Π° ΡΠ΅ Π΅ ΡΠ»ΡΡΠΈΠ»ΠΎ, ΠΈΠ»ΠΈ Π΅ Π½ΡΠΊΠ°ΠΊΠ²Π° Π³ΡΠ΅ΡΠΊΠ° ΠΏΡΠΈ ΡΠ°Π·Π±ΠΎΡΠ°, ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅ Π±ΠΈ Π½ΡΠΊΠΎΠΉ ΠΎΡ Π°Π²ΡΠΎΡΠΈΡΠ΅ Π½Π° geektimes Π΅ ΠΎΡΠΈΡΡΠ» Π½Π° ΠΏΠΎΡΠΈΠ²ΠΊΠ° ;).
ΠΠ΅ΠΆΠ΄Ρ Π΄ΡΡΠ³ΠΎΡΠΎ, Π³ΡΠ°ΡΠΈΠΊΠ°ΡΠ° ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΎΡΠ΅ Π΄Π²Π° Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΠΌΠΈ ΠΏΠΈΠΊΠ° Π² Π±ΡΠΎΡ Π½Π° Π³Π»Π΅Π΄Π°Π½ΠΈΡΡΠ° Π½Π° ΡΡΠ°ΡΠΈΠΈ - ΠΠΎΠ²Π° Π³ΠΎΠ΄ΠΈΠ½Π° ΠΈ ΠΌΠ°ΠΉΡΠΊΠΈ ΠΏΡΠ°Π·Π½ΠΈΡΠΈ.
Π₯ΡΠ±ΠΎΠ²Π΅
ΠΠ΅ΠΊΠ° Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΠΌ ΠΊΡΠΌ ΠΎΠ±Π΅ΡΠ°Π½ΠΈΡ Π°Π½Π°Π»ΠΈΠ· Π½Π° Ρ ΡΠ±ΠΎΠ²Π΅ΡΠ΅. ΠΠ΅ΠΊΠ° ΠΈΠ·Π±ΡΠΎΠΈΠΌ 20-ΡΠ΅ Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠΈ Ρ ΡΠ±Π° ΠΏΠΎ Π±ΡΠΎΠΉ Π³Π»Π΅Π΄Π°Π½ΠΈΡ:
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()
Π Π΅Π·ΡΠ»ΡΠ°ΡΠΈ:
ΠΠ·Π½Π΅Π½Π°Π΄Π²Π°ΡΠΎ, Π½Π°ΠΉ-ΠΏΠΎΠΏΡΠ»ΡΡΠ΅Π½ ΡΠ΅Π½ΡΡΡ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° Π³Π»Π΅Π΄Π°Π½ΠΈΡΡΠ° Π΅ βΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡβ, ΠΊΠ°ΡΠΎ Π² ΡΠΎΠΏ 5 Π½Π° Π»ΠΈΠ΄Π΅ΡΠΈΡΠ΅ Π²Π»ΠΈΠ·Π°Ρ ΠΎΡΠ΅ βΠΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅β ΠΈ βΠΠΎΠΏΡΠ»ΡΡΠ½Π° Π½Π°ΡΠΊΠ°β.
Antitop Π·Π°Π΅ΠΌΠ° Gtk ΠΈ Cocoa.
Π©Π΅ Π²ΠΈ ΠΊΠ°ΠΆΠ° Π΅Π΄Π½Π° ΡΠ°ΠΉΠ½Π°, Π³ΠΎΡΠ½ΠΈΡΠ΅ Π³Π»Π°Π²ΠΈΠ½ΠΈ ΡΡΡΠΎ ΡΠ΅ Π²ΠΈΠΆΠ΄Π°Ρ
ΠΡΠ΅Π½ΠΊΠ°
Π Π½Π°ΠΊΡΠ°Ρ, ΠΎΠ±Π΅ΡΠ°Π½Π°ΡΠ° ΠΎΡΠ΅Π½ΠΊΠ°. ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π΄Π°Π½Π½ΠΈ ΠΎΡ Π°Π½Π°Π»ΠΈΠ· Π½Π° Ρ ΡΠ±ΠΎΠ²Π΅, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ Π½Π°ΠΉ-ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΈΡΠ΅ ΡΡΠ°ΡΠΈΠΈ Π·Π° Π½Π°ΠΉ-ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΈΡΠ΅ Ρ ΡΠ±ΠΎΠ²Π΅ Π·Π° ΡΠ°Π·ΠΈ 2019 Π³.
ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ
ΠΠ°ΠΊ Π½Π΅ ΡΠ°Π±ΠΎΡΠΈΡ Π² Π‘Π±Π΅ΡΠ±Π°Π½ΠΊ Π΅Π΄Π½Π° Π³ΠΎΠ΄ΠΈΠ½Π° 304000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 599 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +457.0/-14.0ΠΠ·Ρ Π²ΡΡΠ»Π΅Π½ΠΈΡΠ΅ ΠΈΠ½ΡΠ΅Π»ΠΈΠ³Π΅Π½ΡΠ½ΠΈ ΠΊΡΡΡΠΊΠΈ ΡΠ° ΡΠ΅Π½Π΅Π½ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ Π½Π° Π»ΠΈΡΠ½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ 232000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 147 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +75.0/-11.0ΠΠ·ΠΌΠ°ΠΌΠ½ΠΈΡΠΈ ΠΈ ΡΠΈΡΡΠΎΠ²ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ - Π²ΡΠΈΡΠΊΠΎ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π»ΠΎΡΠΎ 176000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 778 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +356.0/-0.0ΠΠ°ΠΊ ΠΠ΅Π³Π°ΡΠΎΠ½ Π·Π°ΡΠΏΠ° Π½Π° ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈ Π°Π±ΠΎΠ½Π°ΠΌΠ΅Π½ΡΠΈ 166000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 676 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +624.0/-2.0Π₯Π°ΠΊΠ²Π°Π½Π΅ΡΠΎ Π½Π° VK, Π΄Π²ΡΡΠ°ΠΊΡΠΎΡΠ½ΠΎΡΠΎ ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΡΠ²Π°Π½Π΅ Π½ΡΠΌΠ° Π΄Π° ΡΠΏΠ΅ΡΡΠΈ 148000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 332 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +124.0/-17.0ΠΠ°ΠΊ Π±ΡΠ°ΡΠ·ΡΡΡΡ ΠΏΠΎΠΌΠ°Π³Π° Π½Π° Π΄ΡΡΠ³Π°ΡΡ ΠΌΠ°ΠΉΠΎΡ 132000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 321 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +246.0/-19.0ΠΠ°ΠΉ-Π³ΠΎΠ»ΡΠΌΠΎΡΠΎ ΠΈΠ·Ρ Π²ΡΡΠ»ΡΠ½Π΅ Π² ΠΈΡΡΠΎΡΠΈΡΡΠ°: 2,7 ΠΌΠΈΠ»ΠΈΠ°ΡΠ΄Π° Π°ΠΊΠ°ΡΠ½ΡΠ°, ΠΎΡ ΠΊΠΎΠΈΡΠΎ 773 ΠΌΠΈΠ»ΠΈΠΎΠ½Π° ΡΠ° ΡΠ½ΠΈΠΊΠ°Π»Π½ΠΈ. 123000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 154 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +86.0/-5.0Π‘ΠΊΡΠΏΠ°, ΡΠ±ΠΈΠ²Π°ΠΌΠ΅ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ 121000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 933 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +392.0/-83.0βΠΠΎΠ±ΠΈΠ»Π½ΠΎ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅β Π΅ Π±Π΅Π·ΠΏΠ»Π°ΡΠ½ΠΎ, Π±Π΅Π· SMS ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ. ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π·Π° ΠΈΠ·ΠΌΠ°ΠΌΠ° ΠΎΡ ΠΠ΅Π³Π°ΡΠΎΠ½ 114000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 478 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +488.0/-8.0ΠΠΎΡΡ ΡΠΊΠ΅Π½Π΅Ρ Π² Π»ΠΈΡΠ½ΠΈΡ Π°ΠΊΠ°ΡΠ½Ρ Π½Π° Π ΠΎΡΡΠ΅Π»Π΅ΠΊΠΎΠΌ 111000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 194 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +300.0/-8.0
ΠΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅
ΠΠ° Π΅Π΄ΠΈΠ½ ΡΠΎΠ²Π΅ΠΊ 167000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 249 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +239.0/-33.0ΠΠΎΠ»ΠΊΠΎΡΠΎ ΠΏΠΎ-ΡΠΊΠΎΡΠΎ Π·Π°Π±ΡΠ°Π²ΠΈΡΠ΅ ΠΠΠ, ΡΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅ Π·Π° Π²Π°Ρ ΠΈ Π²Π°ΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ 129000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 1271 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +131.0/-63.0ΠΠ°ΡΠΎ ΡΡΠ°ΡΡΠΈΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ Π½Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠΈ Π½Π°ΠΌΠ΅ΡΡΡ ΡΠ°Π±ΠΎΡΠ° 119000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 901 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +151.0/-14.0Π’ΠΎΠ²Π° Π½Π΅ Π΅ Π»ΠΈ ΠΌΡΡΡΠΎ Π·Π° ΡΡΠ°ΡΠΈ Ρ ΠΎΡΠ°? ΠΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ ΡΠ»Π΅Π΄ ΡΡΠΈΠ΄Π΅ΡΠ΅Ρ ΠΈ ΠΏΠ΅Ρ 116000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 649 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +222.0/-16.0ΠΠΎΠ²ΠΈΡΠ΅ Π΅Π·ΠΈΡΠΈ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ ΡΠΈΡ ΠΎ ΡΠ±ΠΈΠ²Π°Ρ Π²ΡΡΠ·ΠΊΠ°ΡΠ° Π½ΠΈ Ρ ΡΠ΅Π°Π»Π½ΠΎΡΡΡΠ° 106000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 764 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +164.0/-52.0ΠΠ°ΠΊΠ²ΠΎ Π½Π°ΡΡΠΈΡ ΠΏΠΎ ΡΡΡΠ΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½ (30 Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΠΎΡΡΡΠ΅Ρ) 101000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 128 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +178.0/-9.0ΠΠ°ΠΉ-ΡΠ΅Π΄ΠΊΠΈΡΠ΅ ΠΈ ΡΠΊΡΠΏΠΈ Π΅Π·ΠΈΡΠΈ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ 82900 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 119 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +38.0/-10.0ΠΡΡΡ ΠΎΡ Π»Π΅ΠΊΡΠΈΠΈ ΠΏΠΎ JavaScript ΠΈ Node.js Π² KPI 80300 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 14 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +34.0/-2.0ΠΠ’ ΡΠ΅ΡΠΌΠΈΠ½ΠΈ, ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΠΎΡΠ³Π»Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΊΠ°ΡΡΠΎΡΠΈ 78000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 86 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +84.0/-14.0256 ΡΠ΅Π΄Π° ΡΠΈΡΡ C++: ΠΏΠΈΡΠ°Π½Π΅ Π½Π° ray tracer ΠΎΡ Π½ΡΠ»Π°ΡΠ° Π·Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ°ΡΠ° 77600 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 124 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +241.0/-0.0
ΠΠΎΠΏΡΠ»ΡΡΠ½Π° Π½Π°ΡΠΊΠ°
ΠΠ°ΠΊΠ²ΠΎ ΠΏΡΡΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΡΡ: Π½Π΅ΠΎΠ±ΠΈΡΠ°ΠΉΠ½ΠΈ ΠΎΠ³Π½Π΅ΡΡΡΠ΅Π»Π½ΠΈ ΠΎΡΡΠΆΠΈΡ 236000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 123 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +119.0/-9.0Π£ΡΠ΅Π½ΠΈ ΠΎΡΠΊΡΠΈΡ Π° Π½Π°ΠΉ-ΡΡΠ°ΡΠΎΡΠΎ ΠΆΠΈΠ²ΠΎ Π³ΡΡΠ±Π½Π°ΡΠ½ΠΎ ΠΆΠΈΠ²ΠΎΡΠ½ΠΎ Π½Π° ΠΠ΅ΠΌΡΡΠ° 234000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 212 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +82.0/-14.0Π‘Π΅ΡΠΈΠ°Π»ΡΡ "Π§Π΅ΡΠ½ΠΎΠ±ΠΈΠ»": Π³Π»Π΅Π΄Π°ΠΉΡΠ΅ ΠΈ ΠΌΠΈΡΠ»Π΅ΡΠ΅ 173000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 803 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +164.0/-25.012-Π³ΠΎΠ΄ΠΈΡΠ΅Π½ ΡΠΈΠΉΠ½Π΅ΠΉΠ΄ΠΆΡΡ ΠΈΠ·Π²ΡΡΡΠΈ ΡΠ΅Π°ΠΊΡΠΈΡ Π½Π° ΡΠ΄ΡΠ΅Π½ ΡΠΈΠ½ΡΠ΅Π· Π² Π΄ΠΎΠΌΠ°ΡΠ½Π°ΡΠ° ΡΠΈ Π»Π°Π±ΠΎΡΠ°ΡΠΎΡΠΈΡ. 145000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 280 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +126.0/-29.0ΠΡΠΈΠΊΠ°Π·ΠΊΠ°ΡΠ° Π·Π° ΡΠΏΠ»Π°Π²Π½Π°ΡΠ° ΡΠΎΠ·Π° ΠΈ ΠΏΠ°Π΄Π½Π°Π»Π°ΡΠ° ΠΡΠ΅Π½ΠΊΠ° 134000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 244 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +217.0/-1.0Π£Π²Π΅Π»ΠΈΡΠ΅ΡΠ΅ Π³ΠΎ! Π‘ΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠ΅Π·ΠΎΠ»ΡΡΠΈΡΡΠ° 134000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 235 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +377.0/-1.0Π‘ΠΎΡΡΡΠ΅ΡΡΡ Π·Π° Boeing 737 Max Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ ΠΎΡ Π²ΡΠ½ΡΠ½ΠΈ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΡΠ΅Π»ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΏΠ΅ΡΠ΅Π»ΡΡ $9 Π½Π° ΡΠ°Ρ. 126000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 560 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +153.0/-6.0ΠΠ΅ ΡΠ΅ Π½Π΅ΡΠ²ΠΈΡΠ°ΠΉΡΠ΅, Π½Π΅ Π±ΡΡΠ·Π°ΠΉΡΠ΅, Π½Π΅ ΠΏΡΠ΅ΠΊΡΡΠ²Π°ΠΉΡΠ΅: ΠΈΡΡΠΎΡΠΈΡΡΠ° Π½Π° Π΅Π΄Π½Π° ΡΡΠ°Π³Π΅Π΄ΠΈΡ 121000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 384 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +242.0/-4.0ΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠΈΡΠ΅ ΡΠ° ΠΎΡΠΊΡΠΈΠ»ΠΈ ΠΈΠ΄Π΅Π°Π»Π½ΠΈΡ Π½Π°ΡΠΈΠ½ Π·Π° ΡΠΌΠ½ΠΎΠΆΠ°Π²Π°Π½Π΅ Π½Π° ΡΠΈΡΠ»Π° 108000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 222 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +173.0/-10.0ΠΠΎΠ²ΠΈΡΠ΅ Π΅Π·ΠΈΡΠΈ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ ΡΠΈΡ ΠΎ ΡΠ±ΠΈΠ²Π°Ρ Π²ΡΡΠ·ΠΊΠ°ΡΠ° Π½ΠΈ Ρ ΡΠ΅Π°Π»Π½ΠΎΡΡΡΠ° 106000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 764 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +164.0/-52.0
ΠΊΠ°ΡΠΈΠ΅ΡΠ°
ΠΠ°ΠΊ Π½Π΅ ΡΠ°Π±ΠΎΡΠΈΡ Π² Π‘Π±Π΅ΡΠ±Π°Π½ΠΊ Π΅Π΄Π½Π° Π³ΠΎΠ΄ΠΈΠ½Π° 304000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 599 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +457.0/-14.0Π‘ΡΡΠΈΠΏΠ²Π°ΠΌ ΠΆΠΈΠ²ΠΎΡΠ° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Ρ ΠΏΡΠ΅Π³Π»Π΅Π΄ΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ΄Π° ΡΠΈ ΠΈ ΡΡΠΆΠ°Π»ΡΠ²Π°ΠΌ 187000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 21 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +37.0/-3.0ΠΡΠ°Π» Π½Π° ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ΡΠΎ 179000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 668 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +315.0/-60.0ΠΠ° Π΅Π΄ΠΈΠ½ ΡΠΎΠ²Π΅ΠΊ 167000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 249 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +239.0/-33.0ΠΠ΅Π½ΡΠΈΠΎΠ½ΠΈΡΠ°ΠΉΡΠ΅ ΡΠ΅ Π½Π° 22 158000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 927 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +259.0/-100.0ΠΠ°ΠΊ Π΄Π° ΡΠΌΠ΅Π½ΠΈΡΠ΅ ΠΊΡΡΡΠΊΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ½ΠΎΡΠΎ ΡΠΈ ΠΌΡΡΡΠΎ, Π±Π΅Π· Π΄Π° Π²ΠΈ ΡΠ²ΠΎΠ»Π½ΡΡ? 139000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 762 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +200.0/-20.0ΠΠ½ΠΎΠ²Π°ΡΠΈΡ Π½Π° ΡΡΡΠΊΠΈ 128000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 612 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +480.0/-33.0ΠΠ°ΡΠΎ ΡΡΠ°ΡΡΠΈΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ Π½Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠΈ Π½Π°ΠΌΠ΅ΡΡΡ ΡΠ°Π±ΠΎΡΠ° 119000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 901 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +151.0/-14.0βΠΠ·Π³ΠΎΡΠ΅Π»ΠΈβ ΡΠ»ΡΠΆΠΈΡΠ΅Π»ΠΈ: ΠΈΠΌΠ° Π»ΠΈ ΠΈΠ·Ρ ΠΎΠ΄? 117000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 398 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +210.0/-14.0Π’ΠΎΠ²Π° Π½Π΅ Π΅ Π»ΠΈ ΠΌΡΡΡΠΎ Π·Π° ΡΡΠ°ΡΠΈ Ρ ΠΎΡΠ°? ΠΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ ΡΠ»Π΅Π΄ ΡΡΠΈΠ΄Π΅ΡΠ΅Ρ ΠΈ ΠΏΠ΅Ρ 116000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 649 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +222.0/-16.0
ΠΠ°ΠΊΠΎΠ½ΠΎΠ΄Π°ΡΠ΅Π»ΡΡΠ²ΠΎ Π² ΠΠ’
ΠΠ·ΠΌΠ°ΠΌΠ½ΠΈΡΠΈ ΠΈ ΡΠΈΡΡΠΎΠ²ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ - Π²ΡΠΈΡΠΊΠΎ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π»ΠΎΡΠΎ 176000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 778 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +356.0/-0.0ΠΠ°ΠΊ ΠΠ΅Π³Π°ΡΠΎΠ½ Π·Π°ΡΠΏΠ° Π½Π° ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈ Π°Π±ΠΎΠ½Π°ΠΌΠ΅Π½ΡΠΈ 166000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 676 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +624.0/-2.0ΠΠ½ΠΎΠ²Π°ΡΠΈΡ Π½Π° ΡΡΡΠΊΠΈ 128000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 612 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +480.0/-33.0βΠΠΎΠ±ΠΈΠ»Π½ΠΎ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅β Π΅ Π±Π΅Π·ΠΏΠ»Π°ΡΠ½ΠΎ, Π±Π΅Π· SMS ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ. ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π·Π° ΠΈΠ·ΠΌΠ°ΠΌΠ° ΠΎΡ ΠΠ΅Π³Π°ΡΠΎΠ½ 114000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 478 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +488.0/-8.0ΠΠ°ΠΊ ΠΊΠ°Π·Π°Ρ ΡΡΠ°Π½ΡΠΊΠΈΡΠ΅ Π²Π»Π°ΡΡΠΈ ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π°Ρ Π΄Π° ΠΏΡΠΈΠΊΡΠΈΡΡ Π½Π΅ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ° 111000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 77 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +122.0/-14.0ΠΠ°ΠΊ Protonmail Π΅ Π±Π»ΠΎΠΊΠΈΡΠ°Π½ Π² Π ΡΡΠΈΡ 102000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 398 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +418.0/-7.0ΠΠ°ΠΊΠΎΠ½ΡΡ Π·Π° ΠΈΠ·ΠΎΠ»Π°ΡΠΈΡ Π½Π° Runet Π±Π΅ΡΠ΅ ΠΏΡΠΈΠ΅Ρ ΠΎΡ ΠΡΡΠΆΠ°Π²Π½Π°ΡΠ° Π΄ΡΠΌΠ° Π½Π° ΡΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ 88200 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 878 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +73.0/-18.0ΠΠ°ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡ ΠΈΠ·Π±ΡΠ° Π±Π°Π½ΠΊΠ° ΠΈ ΡΠ΅ΡΠ΅ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠΈ 87200 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 611 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +166.0/-9.0ΠΠΈΠ½ΠΈΡΡΠ΅ΡΡΡΠ²ΠΎΡΠΎ Π½Π° ΡΠ΅Π»Π΅ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ ΠΈ ΠΌΠ°ΡΠΎΠ²ΠΈΡΠ΅ ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΈ ΠΎΠ΄ΠΎΠ±ΡΠΈ Π·Π°ΠΊΠΎΠ½ΠΎΠΏΡΠΎΠ΅ΠΊΡΠ° Π·Π° ΠΈΠ·ΠΎΠ»ΠΈΡΠ°Π½Π΅ Π½Π° RuNet 83600 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 364 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +79.0/-9.0ΠΠΎΠ΄ΡΠΎΠ±Π΅Π½ ΠΎΡΠ³ΠΎΠ²ΠΎΡ Π½Π° ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΠΌΠ°Π»ΠΊΠΎ Π·Π° ΠΆΠΈΠ²ΠΎΡΠ° Π½Π° Π΄ΠΎΡΡΠ°Π²ΡΠΈΡΠΈΡΠ΅ Π² Π ΡΡΠΊΠ°ΡΠ° ΡΠ΅Π΄Π΅ΡΠ°ΡΠΈΡ 74700 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 389 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +290.0/-1.0
Π£Π΅Π± ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°
Π’ΠΎΠ²Π° Π½Π΅ Π΅ Π»ΠΈ ΠΌΡΡΡΠΎ Π·Π° ΡΡΠ°ΡΠΈ Ρ ΠΎΡΠ°? ΠΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ ΡΠ»Π΅Π΄ ΡΡΠΈΠ΄Π΅ΡΠ΅Ρ ΠΈ ΠΏΠ΅Ρ 116000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 649 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +222.0/-16.0ΠΠ°ΠΊ Π΄Π° ΠΏΡΠ°Π²ΠΈΠΌ ΡΠ΅Π±ΡΠ°ΠΉΡΠΎΠ²Π΅ ΠΏΡΠ΅Π· 2019 Π³ 110000 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 278 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +233.0/-11.0ΠΠ°ΡΡΠ°Π²Π°Π½Π΅ Π½Π° Docker, ΡΠ°ΡΡ 1: ΠΡΠ½ΠΎΠ²ΠΈΡΠ΅ 91300 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 24 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +52.0/-10.0ΠΡΡΡ ΠΎΡ Π»Π΅ΠΊΡΠΈΠΈ ΠΏΠΎ JavaScript ΠΈ Node.js Π² KPI 80300 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 14 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +34.0/-2.0Π‘ΡΠ°ΠΆΠ°Π½Ρ ΠΠ°ΡΡ ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ ΠΈΡΡΠΎΡΠΈΠΈ Π·Π° API ΠΈΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ½ΠΎΡΡ 68900 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 160 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +216.0/-3.0Π Π°Π·Π±ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈΡΡΠ° Π΅ Π½Π°ΡΡΡΠ΅Π½ΠΎ. Π’ΠΎΠ²Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ Π½Π΅ Π΅ ΠΏΡΠ΅ΡΠ΅ΡΠ½Π° ΡΠΎΡΠΊΠ° Π½Π° ΠΊΡΡΠ³ΠΎΠ²Π΅, ΡΠ΅ΡΡΠ½ΠΎ ΠΊΠ°Π·Π°Π½ΠΎ 65900 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 223 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +138.0/-41.0ΠΠ°ΡΠΎ Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠΈ Π³ΡΠ±ΠΈΡΠ΅ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π² ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π½ΠΈΡΠΎΠ²ΠΈ ΡΠ΅ΠΌΠ°ΡΠΈΡΠ½ΠΈ ΡΠ΅Π±ΡΠ°ΠΉΡΠΎΠ²Π΅ 62700 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 243 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +179.0/-13.0Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΌΠΎΠ΄Π΅ΡΠ½ΠΎ ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ Π½ΡΠ»Π°ΡΠ° 62200 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 122 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +56.0/-8.0Π§Π΅ΡΠ΅Π½ Π΄Π΅Π½ Π·Π° Vue.js 60800 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 133 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +77.0/-6.0ΠΠ°ΡΠΎ ΡΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½Π°ΡΠ° ΡΠ΅Π± ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° ΡΠ»ΠΎΠΆΠ½Π°? Π§Π°ΡΡ 1 57700 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 319 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +101.0/-6.0
GTK
Π Π½Π°ΠΊΡΠ°Ρ, ΡΠ°ΠΊΠ° ΡΠ΅ Π½ΠΈΠΊΠΎΠΉ Π΄Π° Π½Π΅ ΡΠ΅ ΠΎΠ±ΠΈΠ΄ΠΈ, ΡΠ΅ Π΄Π°ΠΌ ΡΠ΅ΠΉΡΠΈΠ½Π³Π° Π½Π° Π½Π°ΠΉ-ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎΡΠ΅ΡΠ°Π²Π°Π½ΠΈΡ ΡΠ΅Π½ΡΡΡ βgtkβ. Π ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° Π΅Π΄Π½Π° Π³ΠΎΠ΄ΠΈΠ½Π° ΡΠΎΠΉ Π±Π΅ΡΠ΅ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½ Π΅Π΄ΠΈΠ½ Π‘ΡΠ°ΡΠΈΡΡΠ°, ΠΊΠΎΡΡΠΎ ΡΡΡΠΎ βΠ°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎβ Π·Π°Π΅ΠΌΠ° ΠΏΡΡΠ²ΠΈΡ ΡΠ΅Π΄ Π½Π° ΡΠ΅ΠΉΡΠΈΠ½Π³Π°.
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° GtkApplication. ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π° ΠΈΠ·ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ Π½Π° librsvg 1700 Π³Π»Π΅Π΄Π°Π½ΠΈΡ, 9 ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ°, ΡΠ΅ΠΉΡΠΈΠ½Π³ +9.0/-1.0
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΡΠΌΠ° Π΄Π° ΠΈΠΌΠ° Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. ΠΡΠΈΡΡΠ½ΠΎ ΡΠ΅ΡΠ΅Π½Π΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com