рд╣реЗ рд╣рдмрд░ред
╨Т
рдЬреЛ рд▓реЛрдЧ рдЗрд╕рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖ, рдЙрдирдХреЗ рд▓рд┐рдП рдирд┐рд░рдВрддрд░рддрд╛ рдореЗрдВ рдХрдЯреМрддреА рдХреА рдЬрд╛ рд░рд╣реА рд╣реИред
рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рдЖрдВрдХрдбрд╝реЗ рдФрд░ рд░реЗрдЯрд┐рдВрдЧ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдирд╣реАрдВ рд╣реИрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдЕрдВрджрд░реВрдиреА рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдмрд╛рдд рдХреА рднреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореБрдЭрд╕реЗ рдХрд╣реАрдВ рдХреЛрдИ рдЧрд▓рддреА рдирд╣реАрдВ рд╣реБрдИ рдпрд╛ рдХреБрдЫ рдЫреВрдЯ рдЧрдпрд╛ред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рдирд┐рдХрд▓рд╛ред рд╣рдо рдкрд╣рд▓реЗ рдХреЛрдб рд╕реЗ рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВрдЧреЗ; рдЬрд┐рдиреНрд╣реЗрдВ рдЗрд╕рдореЗрдВ рд░реБрдЪрд┐ рдирд╣реАрдВ рд╣реИ рд╡реЗ рдкрд╣рд▓реЗ рдЦрдВрдб рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣
рдкрд╛рд░реНрд╕рд░ рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдХреЗрд╡рд▓ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рд▓реЗрдЦ рд░реЗрдЯрд┐рдВрдЧ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдкреНрд░рд╢реНрди рдкреВрдЫрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдЕрдм рд╕рд╛рдЗрдЯ рдХреЗ рд╡рд┐рд╖рдпрдЧрдд рдЕрдиреБрднрд╛рдЧреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ; рдпрд╣ рдЖрдкрдХреЛ рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдк рд╢реЛрдз рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджреЗрдЦреЗрдВ рдХрд┐ "C++" рдЕрдиреБрднрд╛рдЧ рдХреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдХрдИ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдХреИрд╕реЗ рдмрджрд▓ рдЧрдИ рд╣реИред
рд▓реЗрдЦ рдкрд╛рд░реНрд╕рд░ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрдм рдпрд╣ рдЙрди рдХреЗрдВрджреНрд░реЛрдВ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬрд┐рдирд╕реЗ рд▓реЗрдЦ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рд╕рд╛рде рд╣реА рд▓реЗрдЦрдХ рдХрд╛ рдЙрдкрдирд╛рдо рдФрд░ рдЙрд╕рдХреА рд░реЗрдЯрд┐рдВрдЧ (рдмрд╣реБрдд рд╕рд╛рд░реА рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рдпрд╣рд╛рдВ рднреА рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╣ рдмрд╛рдж рдореЗрдВ рдЖрдПрдВрдЧреА)ред рдбреЗрдЯрд╛ рдПрдХ рд╕реАрдПрд╕рд╡реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
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'}
рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, рдЧреАрдХрдЯрд╛рдЗрдореНрд╕ рдЕрдиреБрднрд╛рдЧ рдЕрдзрд┐рдХ рд╡рд┐рдирдореНрд░ рджрд┐рдЦрддреЗ рд╣реИрдВ:
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'}
рдмрд╛рдХреА рд╣рдмреНрд╕ рдХреЛ рднреА рдЗрд╕реА рддрд░рд╣ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЕрдм рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдЬреЛ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЪрд╛рд╣реЗ рд▓реЗрдЦ рдЧреАрдХрдЯрд╛рдЗрдореНрд╕ рдХрд╛ рд╣реЛ рдпрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╣рдм рдХрд╛ред
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 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рд▓реЗрдЦреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
рдореИрдВрдиреЗ рдЪрд╛рд░реНрдЯ рдореЗрдВ "рдЧреАрдХрдЯрд╛рдЗрдореНрд╕" рдФрд░ "рдХреЗрд╡рд▓ рдЧреАрдХрдЯрд╛рдЗрдореНрд╕" рд▓реЗрдЦреЛрдВ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд▓реЗрдЦ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рджреЛрдиреЛрдВ рдЕрдиреБрднрд╛рдЧреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "DIY" + "рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░" + "C++")ред рдореИрдВрдиреЗ рд╕рд╛рдЗрдЯ рдкрд░ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд▓реЗрдЦреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрджрдирд╛рдо "рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╢рд╛рдпрдж рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдВрдЧреНрд░реЗрдЬреА рд╢рдмреНрдж рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рдирд╣реАрдВ рд╣реИред
рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ рдореЗрдВ рд╣рдордиреЗ рдЗрд╕ рдЧрд░реНрдореА рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЧреАрдХрдЯрд╛рдЗрдореНрд╕ рдХреЗ рд▓реЗрдЦреЛрдВ рдХреЗ рднреБрдЧрддрд╛рди рдирд┐рдпрдореЛрдВ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╕реЗ рдЬреБрдбрд╝реЗ "рдЧреАрдХрдЯрд╛рдЗрдореНрд╕ рдкреНрд░рднрд╛рд╡" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫрд╛ рдерд╛ред рдЖрдЗрдП 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()
рдирддреАрдЬрд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ. рдЧреАрдХрдЯрд╛рдЗрдореНрд╕ рд▓реЗрдЦреЛрдВ рдХреЗ рдХреБрд▓ рджреГрд╢реНрдпреЛрдВ рдХрд╛ рдЕрдиреБрдорд╛рдирд┐рдд рдЕрдиреБрдкрд╛рдд рд▓рдЧрднрдЧ 1:5 рд╣реИред рд▓реЗрдХрд┐рди рдЬрдмрдХрд┐ рджреГрд╢реНрдпреЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реВрдк рд╕реЗ рдЙрддрд╛рд░-рдЪрдврд╝рд╛рд╡ рдЖрдпрд╛, "рдордиреЛрд░рдВрдЬрди" рд▓реЗрдЦреЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рд▓рдЧрднрдЧ рдЙрд╕реА рд╕реНрддрд░ рдкрд░ рд░рд╣рд╛ред
рдЖрдк рдпрд╣ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдирд┐рдпрдореЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рднреА "рдЧреАрдХрдЯрд╛рдЗрдореНрд╕" рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд▓реЗрдЦреЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЧрд┐рд░рд╛рд╡рдЯ рдЖрдИ рд╣реИ, рд▓реЗрдХрд┐рди "рдЖрдВрдЦреЛрдВ рд╕реЗ", рдХреБрд▓ рдореВрд▓реНрдпреЛрдВ рдХреЗ 5% рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВред
рдкреНрд░рддрд┐ рд▓реЗрдЦ рджреЗрдЦреЗ рдЬрд╛рдиреЗ рдХреА рдФрд╕рдд рд╕рдВрдЦреНрдпрд╛ рдХреЛ рджреЗрдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ:
"рдордиреЛрд░рдВрдЬрди" рд▓реЗрдЦреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдФрд╕рдд рд╕реЗ рд▓рдЧрднрдЧ 40% рдЕрдзрд┐рдХ рд╣реИред рдпрд╣ рд╢рд╛рдпрдж рдХреЛрдИ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ. рдЕрдкреНрд░реИрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╡рд┐рдлрд▓рддрд╛ рдореЗрд░реЗ рд▓рд┐рдП рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рд╣реА рд╣реБрдЖ рд╣реЛ, рдпрд╛ рдпрд╣ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдкрд╛рд░реНрд╕рд┐рдВрдЧ рддреНрд░реБрдЯрд┐ рд╣реЛ, рдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЧреАрдХрдЯрд╛рдЗрдореНрд╕ рдХреЗ рд▓реЗрдЦрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЫреБрдЯреНрдЯреА рдкрд░ рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реЛ;)ред
╨Ъ╤Б╤В╨░╤В╨╕, ╨╜╨░ ╨│╤А╨░╤Д╨╕╨║╨╡ ╨▓╨╕╨┤╨╜╤Л ╨╡╤Й╨╡ ╨┤╨▓╨░ ╨╖╨░╨╝╨╡╤В╨╜╤Л╤Е ╨┐╨╕╨║╨░ ╤З╨╕╤Б╨╗╨░ ╨┐╤А╨╛╤Б╨╝╨╛╤В╤А╨╛╨▓ ╤Б╤В╨░╤В╨╡╨╣ тАФ ╨╜╨╛╨▓╨╛╨│╨╛╨┤╨╜╨╕╨╡ ╨╕ ╨╝╨░╨╣╤Б╨║╨╕╨╡ ╨┐╤А╨░╨╖╨┤╨╜╨╕╨║╨╕.
рдХреЗрдиреНрджреНрд░реЛрдВ
рдЖрдЗрдП рд╣рдм рдХреЗ рд╡рд╛рджрд╛ рдХрд┐рдП рдЧрдП рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдУрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВред рдЖрдЗрдП рджреГрд╢реНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╢реАрд░реНрд╖ 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 рдиреЗрддрд╛рдУрдВ рдореЗрдВ "рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ" рдФрд░ "рд▓реЛрдХрдкреНрд░рд┐рдп рд╡рд┐рдЬреНрдЮрд╛рди" рднреА рд╢рд╛рдорд┐рд▓ рдереЗред
рдПрдВрдЯреАрдЯреЙрдк рдЬреАрдЯреАрдХреЗ рдФрд░ рдХреЛрдХреЛ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рддрд╛ рд╣реИред
рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рд░рд╣рд╕реНрдп рдмрддрд╛рддрд╛ рд╣реВрдБ, рд╢реАрд░реНрд╖ рд╣рдм рднреА рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ
рд░реЗрдЯрд┐рдВрдЧ
рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╡рд╛рджрд╛ рдХреА рдЧрдИ рд░реЗрдЯрд┐рдВрдЧред рд╣рдм рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдЗрд╕ рд╡рд░реНрд╖ 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рд╡реАрдХреЗ рдХреЛ рд╣реИрдХ рдХрд░рдиреЗ рд╕реЗ рдЯреВ-рдлреИрдХреНрдЯрд░ рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рди рдирд╣реАрдВ рдмрдЪреЗрдЧрд╛ 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'рдореЛрдмрд╛рдЗрд▓ рд╕рд╛рдордЧреНрд░реА' рдПрд╕рдПрдордПрд╕ рдпрд╛ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдореБрдлрд╝реНрдд рд╣реИред рдореЗрдЧрдлреЙрди рд╕реЗ рдзреЛрдЦрд╛рдзрдбрд╝реА рдХрд╛ рд╡рд┐рд╡рд░рдг 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.0KPI рдкрд░ JavaScript рдФрд░ Node.js рдкрд░ рд╡реНрдпрд╛рдЦреНрдпрд╛рди рдХрд╛ рдХреЛрд░реНрд╕ 80300 рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛, 14 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, рд░реЗрдЯрд┐рдВрдЧ +34.0/-2.0рдЖрд▓реВ рдЙрдЧрд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЖрдИрдЯреА рд╢рдмреНрдж 78000 рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛, 86 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, рд░реЗрдЯрд┐рдВрдЧ +84.0/-14.0рдирдВрдЧреЗ C++ рдХреА 256 рдкрдВрдХреНрддрд┐рдпрд╛рдБ: рдХреБрдЫ рд╣реА рдШрдВрдЯреЛрдВ рдореЗрдВ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдПрдХ рдХрд┐рд░рдг рдЕрдиреБрд░реЗрдЦрдХ рд▓рд┐рдЦрдирд╛ 77600 рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛, 124 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, рд░реЗрдЯрд┐рдВрдЧ +241.0/-0.0
рд▓реЛрдХрдкреНрд░рд┐рдп рд╡рд┐рдЬреНрдЮрд╛рди
рдбрд┐рдЬрд╝рд╛рдЗрдирд░ рдиреЗ рдХреНрдпрд╛ рдзреВрдореНрд░рдкрд╛рди рдХрд┐рдпрд╛: рдЕрд╕рд╛рдорд╛рдиреНрдп рдЖрдЧреНрдиреЗрдпрд╛рд╕реНрддреНрд░ 236000 рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛, 123 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, рд░реЗрдЯрд┐рдВрдЧ +119.0/-9.0рд╡реИрдЬреНрдЮрд╛рдирд┐рдХреЛрдВ рдиреЗ рдкреГрдереНрд╡реА рдкрд░ рд╕рдмрд╕реЗ рдкреБрд░рд╛рдирд╛ рдЬреАрд╡рд┐рдд рдХрд╢реЗрд░реБрдХреА рдкреНрд░рд╛рдгреА рдкрд╛рдпрд╛ рд╣реИ 234000 рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛, 212 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, рд░реЗрдЯрд┐рдВрдЧ +82.0/-14.0рдЯреАрд╡реА рд╢реНрд░реГрдВрдЦрд▓рд╛ 'рдЪреЗрд░рдиреЛрдмрд┐рд▓': рджреЗрдЦреЗрдВ рдФрд░ рд╕реЛрдЪреЗрдВ 173000 рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛, 803 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, рд░реЗрдЯрд┐рдВрдЧ +164.0/-25.0рдПрдХ 12 рд╡рд░реНрд╖реАрдп рдХрд┐рд╢реЛрд░ рдиреЗ рдЕрдкрдиреА рдШрд░реЗрд▓реВ рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ рдореЗрдВ рдкрд░рдорд╛рдгреБ рд╕рдВрд▓рдпрди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрдВрдЬрд╛рдо рджрд┐рдпрд╛ред 145000 рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛, 280 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, рд░реЗрдЯрд┐рдВрдЧ +126.0/-29.0рдж рдЯреЗрд▓ рдСрдлрд╝ рдж рдЕрд▓реЙрдп рд░реЛрдЬрд╝ рдПрдВрдб рдж рдлреЙрд▓рди рдХреНрд░реЗрдВрдХрд╛ 134000 рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛, 244 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, рд░реЗрдЯрд┐рдВрдЧ +217.0/-1.0рдЗрд╕реЗ рдмрдбрд╝рд╛ рдХрд░реЛ! рдЖрдзреБрдирд┐рдХ рд╕рдВрдХрд▓реНрдк рд╕рдВрд╡рд░реНрджреНрдзрди 134000 рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛, 235 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, рд░реЗрдЯрд┐рдВрдЧ +377.0/-1.0рдмреЛрдЗрдВрдЧ 737 рдореИрдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ 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.022 рд╕рд╛рд▓ рдХреА рдЙрдореНрд░ рдореЗрдВ рд░рд┐рдЯрд╛рдпрд░ рд╣реЛ рдЬрд╛рдУ 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'рдореЛрдмрд╛рдЗрд▓ рд╕рд╛рдордЧреНрд░реА' рдПрд╕рдПрдордПрд╕ рдпрд╛ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдореБрдлрд╝реНрдд рд╣реИред рдореЗрдЧрдлреЙрди рд╕реЗ рдзреЛрдЦрд╛рдзрдбрд╝реА рдХрд╛ рд╡рд┐рд╡рд░рдг 114000 рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛, 478 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, рд░реЗрдЯрд┐рдВрдЧ +488.0/-8.0рдХреИрд╕реЗ рдХрдЬрд╝рд╛рдЦ рдЕрдзрд┐рдХрд╛рд░реА рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдЕрдкрдиреА рд╡рд┐рдлрд▓рддрд╛ рдХреЛ рдЫреБрдкрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ 111000 рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛, 77 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, рд░реЗрдЯрд┐рдВрдЧ +122.0/-14.0рд░реВрд╕ рдореЗрдВ рдкреНрд░реЛрдЯреЛрдирдореЗрд▓ рдХреЛ рдХреИрд╕реЗ рдмреНрд▓реЙрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ 102000 рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛, 398 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, рд░реЗрдЯрд┐рдВрдЧ +418.0/-7.0рд░реВрдиреЗрдЯ рдХреЗ рдЕрд▓рдЧрд╛рд╡ рдкрд░ рдХрд╛рдиреВрди рдХреЛ рд░рд╛рдЬреНрдп рдбреНрдпреВрдорд╛ рджреНрд╡рд╛рд░рд╛ рддреАрди рд░реАрдбрд┐рдВрдЧ рдореЗрдВ рдЕрдкрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ 88200 рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛, 878 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, рд░реЗрдЯрд┐рдВрдЧ +73.0/-18.0рдХреИрд╕реЗ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдиреЗ рдПрдХ рдмреИрдВрдХ рдЪреБрдирд╛ рдФрд░ рдЕрдиреБрдмрдВрдз рдкрдврд╝рд╛ 87200 рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛, 611 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, рд░реЗрдЯрд┐рдВрдЧ +166.0/-9.0рджреВрд░рд╕рдВрдЪрд╛рд░ рдФрд░ рдЬрди рд╕рдВрдЪрд╛рд░ рдордВрддреНрд░рд╛рд▓рдп рдиреЗ рд░реВрдиреЗрдЯ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рдзреЗрдпрдХ рдХреЛ рдордВрдЬреВрд░реА рджреЗ рджреА 83600 рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛, 364 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, рд░реЗрдЯрд┐рдВрдЧ +79.0/-9.0рдЯрд┐рдкреНрдкрдгреА рдкрд░ рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛, рд╕рд╛рде рд╣реА рд░реВрд╕реА рд╕рдВрдШ рдореЗрдВ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЗ рдЬреАрд╡рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ 74700 рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛, 389 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, рд░реЗрдЯрд┐рдВрдЧ +290.0/-1.0
рд╡реЗрдм рд╡рд┐рдХрд╛рд╕
рдХреНрдпрд╛ рдпрд╣ рдмреВрдврд╝реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реИ? рдкреИрдВрддреАрд╕ рдХреЗ рдмрд╛рдж рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ 116000 рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛, 649 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, рд░реЗрдЯрд┐рдВрдЧ +222.0/-16.02019 рдореЗрдВ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреИрд╕реЗ рдмрдирд╛рдПрдВ 110000 рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛, 278 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, рд░реЗрдЯрд┐рдВрдЧ +233.0/-11.0рдбреЙрдХрд░ рд╕реАрдЦрдирд╛ рднрд╛рдЧ 1: рдореВрд▓ рдмрд╛рддреЗрдВ 91300 рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛, 24 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, рд░реЗрдЯрд┐рдВрдЧ +52.0/-10.0KPI рдкрд░ JavaScript рдФрд░ Node.js рдкрд░ рд╡реНрдпрд╛рдЦреНрдпрд╛рди рдХрд╛ рдХреЛрд░реНрд╕ 80300 рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛, 14 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, рд░реЗрдЯрд┐рдВрдЧ +34.0/-2.0рдкреНрд░рд╢рд┐рдХреНрд╖реБ рд╡рд╛рд╕реНрдпрд╛ рдФрд░ рдПрдкреАрдЖрдИ рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрдирдХреА рдХрд╣рд╛рдирд┐рдпрд╛рдБ 68900 рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛, 160 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, рд░реЗрдЯрд┐рдВрдЧ +216.0/-3.0рдЬреБрдбрд╝рдиреЗ рдХреА рд╕рдордЭ рдЯреВрдЯ рдЧрдИ рд╣реИ. рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдХрд╣реВрдБ рддреЛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╡реГрддреНрддреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди рдирд╣реАрдВ рд╣реИ 65900 рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛, 223 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, рд░реЗрдЯрд┐рдВрдЧ +138.0/-41.0рдЖрдкрдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╖рдпрдЧрдд рд╡реЗрдмрд╕рд╛рдЗрдЯ рдмрдирд╛рдиреЗ рдореЗрдВ рдЕрдкрдирд╛ рд╕рдордп рдмрд░реНрдмрд╛рдж рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП 62700 рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛, 243 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, рд░реЗрдЯрд┐рдВрдЧ +179.0/-13.0рд╢реБрд░реБрдЖрдд рд╕реЗ рдПрдХ рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛ 62200 рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛, 122 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, рд░реЗрдЯрд┐рдВрдЧ +56.0/-8.0Vue.js рдХреЗ рд▓рд┐рдП рдХрд╛рд▓рд╛ рджрд┐рди 60800 рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛, 133 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, рд░реЗрдЯрд┐рдВрдЧ +77.0/-6.0рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рдЗрддрдирд╛ рдЬрдЯрд┐рд▓ рдХреНрдпреЛрдВ рд╣реИ? рднрд╛рдЧ ---- рдкрд╣рд▓рд╛ 57700 рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛, 319 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, рд░реЗрдЯрд┐рдВрдЧ +101.0/-6.0
рдЬреАрдЯреАрдХреЗ
рдФрд░ рдЕрдВрдд рдореЗрдВ, рддрд╛рдХрд┐ рдХреЛрдИ рдирд╛рд░рд╛рдЬ рди рд╣реЛ, рдореИрдВ рд╕рдмрд╕реЗ рдХрдо рджреЗрдЦреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╣рдм "рдЬреАрдЯреАрдХреЗ" рдХреА рд░реЗрдЯрд┐рдВрдЧ рджреВрдВрдЧрд╛ред рдПрдХ рд╕рд╛рд▓ рдХреЗ рдЕрдВрджрд░ рд╣реА рдЗрд╕рдХрд╛ рдкреНрд░рдХрд╛рд╢рди рд╣реЛ рдЧрдпрд╛ рдПрдХ рд▓реЗрдЦ, рдЬреЛ "рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ" рд░реЗрдЯрд┐рдВрдЧ рдХреА рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдкрд░ рднреА рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрддрд╛ рд╣реИред
GtkрдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред librsvg рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╕реБрд╡рд┐рдзрд╛рдПрдБ 1700 рдмрд╛рд░ рджреЗрдЦрд╛ рдЧрдпрд╛, 9 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, рд░реЗрдЯрд┐рдВрдЧ +9.0/-1.0
рдирд┐рд╖реНрдХрд░реНрд╖
рдХреЛрдИ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд╣реАрдВ рдирд┐рдХрд▓реЗрдЧрд╛. рд╕рднреА рдХреЛ рдкрдврд╝рдХрд░ рдЦреБрд╢реА рд╣реБрдИ.
рд╕реНрд░реЛрдд: www.habr.com