áá±áž áá¬á
Ð
á¡ááŒá
áºá¡áá»ááºááᯠá
áááºáááºá
á¬ážáá°áá»á¬ážá¡ááœáẠáááºáááºá ááŒááºáá±á¬ááºáá¬ážááŒááºážááŒá
áºáááºá
á
á¬áááºážááá¬ážáá»á¬ážááŸáá·áº á¡ááá·áºáááºááŸááºáá»ááºáá»á¬ážááẠááá¬ážáááºááá¯ááºáá«á áá»áœááºá¯ááºááœáẠá¡ááœááºážá¡áá»ááºá¡áááºáá»á¬ážáááºáž áááŸáááŒá±á¬ááºáž áááºáá¶ááááá±ážáá«áá
á±á áá
áºáá±áá¬áá¬ááŸá¬ á¡ááŸá¬ážááá¯ááºáá²á·áá°áž áá«ááŸááá¯áẠáá
áºáá¯áá¯ááœá²áá»á±á¬áºááœá¬ážáááºááá¯áá¬áááºáž á¡á¬áááá¶ááá¯ááºáá«áá°ážá áá«áá±ááá·áº á
áááºáááºá
á¬ážááá¯á·áá±á¬ááºážáááºááá¯á· áááºáá«áááºá áá»áœááºá¯ááºááá¯á·ááẠáá¯ááºááŒáá·áº ááááŠážá
áœá¬ á
áááºáá«áááºá áá«ááᯠá
áááºááááºá
á¬ážáá«á áááá¡ááá¯ááºážáá»á¬ážááᯠáá»á±á¬áºááœá¬ážááá¯ááºáá«áááºá
áá±áá¬á á¯áá±á¬ááºážááŒááºážá
ááœá²ááŒááºážá áááºááŒá¬ááŸá¯á ááááá¬ážááŸááºážááœáẠááŒáá·áºááŸá¯ááŸá¯á ááŸááºáá»ááºáá»á¬ážááŸáá·áº áá±á¬ááºážáá«ážá¡ááá·áºáááºááŸááºáá»ááºáá»á¬ážááá¯áᬠááá·áºááœááºážá ááºážá á¬ážáááºá áááºážááẠáá±á¬ááºážááœááºáá±ááŒá®ááŒá áºáá±á¬áºáááºáž ááá¯ááá¯ááŸá¯ááºááœá±ážáá±á¬ áá±ážááŒááºážááŸá¯áá»á¬ážááᯠááŒá¯áá¯ááºááœáá·áºáááŒá¯áá«á ááá¯ááºá á¡ááŒá±á¬ááºážá¡áá¬á¡ááá¯áẠá¡ááá¯ááºážáá»á¬ážááᯠááœá²ááŒááºážá áááºááŒá¬ááẠá¡áá»áááºáááºááŒá®á áááºážááẠááá·áºá¡á¬áž á¡ááœááºá áááºáááºá á¬ážááœááºáá±á¬ááºážáá±á¬ áá¯áá±ááááŒá¯ááá¯ááºá á±áááºá á¥ááá¬á "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 function ááŸáá·áº Str class ááẠtag ááŸá
áºáá¯ááŒá¬ážááœáẠstring áá
áºáá¯ááᯠááœá±ážáááºá áááºážááá¯á·ááᯠá¡áá¯á¶ážááŒá¯áá²á·áááºá
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 ááá¯á·ááá¯áẠprofile hub á០ááááºááᯠááŒááºáá±ážááá·áº áá¯ááºáá±á¬ááºáá»ááºááᯠáá±ážáá¬ážááẠááœááºáá°áá«áááºá
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
á¡áá¬ážáá°áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠá¡ááŒá¬ážááá¹ááá»á¬áž ("ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±áž"á "á á®áá¶ááá·áºááœá²áá±áž" á áááºááŒáá·áº) ááŒá¯áá¯ááºáá¬ážáá«áááºá
á¡ááŒá±á¬ááºážá¡áá²áá²á·
ááœá²ááŒááºážá áááºááŒá¬ááẠá¡áá»áááºáááºááŒá®á áá»áœááºá¯ááºááá¯á·ááẠdataset ááá¯áááºááŒá®áž hub data ááᯠáá¯ááºáá±á¬ááºáá«áááºá
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)
ááᯠáá»áœááºá¯ááºááá¯á·ááẠáá±áá¬áá»á¬ážááᯠáá±á·á¡ááá¯áẠá¡á¯ááºá á¯ááœá²á·ááá¯ááºááŒá®áž ááá°áá®áá±á¬ hubs á¡ááœáẠáá¯ááºáá±ááŸá¯á¡áá±á¡ááœááºááᯠááŒáááá¯ááºáá«ááŒá®á
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â áá±á¬ááºážáá«ážáá»á¬ážááᯠááá¯ááºážááŒá¬ážáá¬ážáá±á¬ááŒá±á¬áá·áºááŒá
áºáááºá áá±á¬ááºážáá«ážáá
áºáá¯ááẠááá¹áááŸá
áºáá¯áá¯á¶ážááᯠáá
áºááŒáá¯ááºáááºáááºáž ááá¯ááºááá¯ááºááá¯ááºááẠ(á¥ááá¬á "DIY" + "microcontrollers" + "C++")á áá»áœááºá¯ááºááẠáááºááá¯ááºááŸá áááá¯ááá¯ááºáá±á¬ááºážáá«ážáá»á¬ážááᯠáá®ážáá±á¬ááºážááá¯ážááŒááẠáá®ááá¯ááºážáááºááŸááºááŒááºáž âáááá¯ááá¯ááºâ ááá¯á¡áá¯á¶ážááŒá¯áá²á·áááºá á€á¡ááœáẠá¡ááºá¹áááááºá¡áá¯á¶ážá¡ááŸá¯ááºážáááá¯ááá¯ááºááẠáá¯á¶ážáááŸááºáááºááŒááºážáááŸááá±á
ááááºá¡ááá¯ááºážááœáẠááá¯ááœá±áá¬áá®á០á áááºááá·áº geektimes á¡ááœáẠáá±á¬ááºážáá«ážáá»á¬ážá¡ááœáẠááœá±áá±ážáá»á±ááŸá¯á ááºážáá»ááºážáá»á¬áž á¡ááŒá±á¬ááºážá¡áá²ááŸáá·áº áááºá ááºáá±áá±á¬ "geektimes effect" á¡ááŒá±á¬ááºáž áá±ážááŒááºážáá¬ážáá«áááºá 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 á
á¬áá±ážááá¬áá»á¬ážáá²á០áá
áºáŠážááẠá¡á¬ážáááºáááºááá®ážááœááºáá²á·ááẠ;)
á áá¬ážáá ááºá ááááºááẠáá±á¬ááºážáá«ážáá»á¬ážá ááŒáá·áºááŸá¯ááŸá¯á¡áá±á¡ááœááºááœáẠááá¯ááá¯áááá¬áááºááŸá¬ážáá±á¬ á¡ááœááºá¡ááááºááŸá áºáá¯ááŒá áºááá·áº ááŸá áºáá áºáá°ážááŸáá·áº áá±áá¡á¬ážáááºáááºáá»á¬ážááᯠááŒááááºá
á¡áá»ááºá¡áá»á¬áá»áááºá
á¡áá»ááºá¡áá»á¬áá»áá±á¬ ááœá²ááŒááºážá áááºááŒá¬ááŸá¯áá®ááá¯á· áááºááœá¬ážááŒáá«á áá¯á·á ááŒáá·áºááŸá¯ááŸá¯á¡áá±á¡ááœááºá¡ááá¯áẠááááºáááºážáá±áᬠáá ááᯠá á¬áááºážááŒá¯á á¯ááŒáá«á áá¯á·á
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 áŠážááœááºáááºáž "Programming" ááŸáá·áº "Popular Science" ááá¯á·áá«áááºáááºá
Antitop ááẠGtk ááŸáá·áº Cocoa ááá¯ááááºážááá¯ááºáááºá
áá»áŸáá¯á·ááŸááºáá»ááºáá
áºáá¯ááŒá±á¬ááŒááẠááááºáááºážá¡áá»ááºá¡áá»á¬áá»áá²á· áá±áá¬ááœá±ááá¯áááºáž ááŒááºááá¯ááºáá«áááºá
á¡áááºá·áááºááŸááºáá»ááº
áá±á¬ááºáá¯á¶ážá¡áá±áá²á· ááááá±ážáá¬ážáá²á· á¡ááá·áºáááºááŸááºáá»ááºá hub ááœá²ááŒááºážá áááºááŒá¬ááŸá¯áá±áá¬ááᯠá¡áá¯á¶ážááŒá¯á 2019 áá¯ááŸá áºá¡ááœáẠáá°ááŒáá¯ááºá¡áá»á¬ážáá¯á¶áž hubs áá»á¬ážá¡ááœáẠáá±áááºážá¡á á¬ážáá¯á¶áž áá±á¬ááºážáá«ážáá»á¬ážááᯠááŒáááá¯ááºáá«áááºá
ááááºážá¡áá»ááºá¡áááºáá¯á¶ááŒá¯á¶áá±áž
áá»áœááºáá±á¬áº Sberbank ááŸá¬ áá áºááŸá áºáá±á¬áẠá¡áá¯ááºááá¯ááºááŒá áºáá²á·áá«áá°ážá ááŒáá·áºááŸá¯ááŸá¯ 304000á ááŸááºáá»áẠ599 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+457.0/-14.0á áœáá·áºáá áºáá¬ážááá·áº á áááºáá®ážáá®ážáá»á¬ážááẠááá¯ááºáá±ážááá¯ááºáá¬á¡áá»ááºá¡áááºáá»á¬ážá á¡ááá¯ážáááºá¡áááºážá¡ááŒá áºáá áºáá¯ááŒá áºáááºá ááŒáá·áºááŸá¯ááŸá¯ 232000á ááŸááºáá»áẠ147 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+75.0/-11.0ááááºáááºáá°áá»á¬ážááŸáá·áº EDS - á¡áá¬á¡á¬ážáá¯á¶ážááẠá¡ááœááºááá¯ážááœá¬ážáááºá ááŒáá·áºááŸá¯ááŸá¯ 176000á ááŸááºáá»áẠ778 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+356.0/-0.0ááá¯ááá¯ááºážá á¬áááºážááœááºážááŸá¯áá»á¬ážááœáẠMegafon á¡áááºáá»á±á¬áºááœá¬ážáá¯á¶ ááŒáá·áºááŸá¯ááŸá¯ 166000á ááŸááºáá»áẠ676 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+624.0/-2.0VK ááᯠáááºáá¬á two-factor authentication ááᯠááááºážáááºážáááºááá¯ááºáá«á ááŒáá·áºááŸá¯ááŸá¯ 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 ááŸáá·áº ááŸááºáá¯á¶áááºááŒááºážáááŸááá² á¡ááá²á·ááŒá áºáááºá Megafon ááŸááááºáááºááŸá¯á¡áá±ážá ááẠááŒáá·áºááŸá¯ááŸá¯ 114000á ááŸááºáá»áẠ478 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+488.0/-8.0Rostelecom á ááá¯ááºáá±ážááá¯ááºáá¬á¡áá±á¬áá·áºááŸá ááááºáááºážá áááºáᬠááŒáá·áºááŸá¯ááŸá¯ 111000á ááŸááºáá»áẠ194 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+300.0/-8.0
áááá¯ááááºážáááºáž
áá±á¬ááºá»á¬ážáá áºáá±á¬ááºá¡ááŒá±á¬ááºáž ááŒáá·áºááŸá¯ááŸá¯ 167000á ááŸááºáá»áẠ249 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+239.0/-33.0OOP ááᯠââááŒááºááŒááºáá±á·áá±á áááºááŸáá·áº ááá·áºáááá¯ááááºáá»á¬ážá¡ááœáẠááá¯áá±á¬ááºážáá±ááŒá áºáááºá ááŒáá·áºááŸá¯ááŸá¯ 129000á ááŸááºáá»áẠ1271 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+131.0/-63.0á¡ááŒá®ážáááºáž developer áá»á¬áž á¡áááºááŒá±á¬áá·áº á¡áá¯ááºáá»á¬áž ááááŸáááá¯ááºááááºážá ááŒáá·áºááŸá¯ááŸá¯ 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 ááá¯ááºáž- áá¬áá®á¡áááºážáááºá¡ááœááºáž ray tracer ááᯠá¡á ááá± ááŒááºáá±ážáá«á ááŒáá·áºááŸá¯ááŸá¯ 77600á ááŸááºáá»áẠ124 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+241.0/-0.0
áá¬áááºááŒá®ážáááá¹áá¶
áá®ááá¯ááºáá¬á áá±ážááááºáá±á¬ááºáá²á·áᬠ- áá¯á¶ááŸááºááá¯ááºáá±á¬ áá±áááºáá»á¬áž ááŒáá·áºááŸá¯ááŸá¯ 236000á ááŸááºáá»áẠ123 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+119.0/-9.0ááá¹áá¬áá±á«áºááœáẠá¡áááºá¡ááŒá®ážáá¯á¶áž áá»á±á¬ááá¯ážááŸáááá¹ááá«ááᯠáááá¹áá¶ááá¬ááŸááºáá»á¬áž ááŸá¬ááœá±ááœá±á·ááŸááá²á·áááºá ááŒáá·áºááŸá¯ááŸá¯ 234000á ááŸááºáá»áẠ212 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+82.0/-14.0'Chernobyl' á á®ážáá®áž- ááŒáá·áºááŸá¯ááŒá®áž á ááºážá á¬ážáá«á ááŒáá·áºááŸá¯ááŸá¯ 173000á ááŸááºáá»áẠ803 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+164.0/-25.0á¡ááẠ12 ááŸá áºá¡ááœáẠáááºáá»á±á¬áºáááºáá áºáŠážááẠáááºážááá±á¡áááºáá¬ááºááœá²áááºážááœáẠáá»á°ááá®ážáá¬ážáá±á«ááºážá ááºáá¯á¶á·ááŒááºááŸá¯ááᯠááŒá¯áá¯ááºáá²á·áááºá ááŒáá·áºááŸá¯ááŸá¯ 145000á ááŸááºáá»áẠ280 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+126.0/-29.0Alloy Rose ááŸáá·áº Fallen Krenka áá¯á¶ááŒáẠááŒáá·áºááŸá¯ááŸá¯ 134000á ááŸááºáá»áẠ244 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+217.0/-1.0áá»á²á·ááŒáá·áºáá«á áá±ááºáá® ááŒááºáááºááŒááºáá¬ážááŸá¯ ááŒáŸáá·áºáááºááŒááºážá ááŒáá·áºááŸá¯ááŸá¯ 134000á ááŸááºáá»áẠ235 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+377.0/-1.0Boeing 737 Max á¡ááœáẠáá±á¬á·ááºáá²ááºááᯠoutsourcers áá»á¬ážá áá áºáá¬áá® á áá±á«áºáá¬ááŒáá·áº áá±ážáá¬ážáá²á·áááºá ááŒáá·áºááŸá¯ááŸá¯ 126000á ááŸááºáá»áẠ560 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+153.0/-6.0á áááºááá°áá«áá²á·á á¡áá»ááºá ááá¯ááá¯ááºáá«áá²á·á áááŸá±á¬ááºááŸááºáá«áá²á·- ááŒá±ááœá²á áá¬áá¬ááºáááºáž ááŒáá·áºááŸá¯ááŸá¯ 121000á ááŸááºáá»áẠ384 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+242.0/-4.0áááºá¹áá»á¬ááá¬ááŸááºáá»á¬ážááẠááááºážáá»á¬ážááᯠááŒáŸá±á¬ááºááẠá¡áá±á¬ááºážáá¯á¶ážáááºážáááºážááᯠááŸá¬ááœá±ááœá±á·ááŸááá²á·áááºá ááŒáá·áºááŸá¯ááŸá¯ 108000á ááŸááºáá»áẠ222 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+173.0/-10.0áááá¯ááááºážáááºážáá¬áá¬á áá¬ážá¡áá áºáá»á¬ážááẠáá»áœááºá¯ááºááá¯á·ááá»áááºáááºááŸá¯ááᯠáááºááœá±á·ááááá¯á· ááááºááááẠáááºáá áºááá¯ááºáá«áááºá ááŒáá·áºááŸá¯ááŸá¯ 106000á ááŸááºáá»áẠ764 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+164.0/-52.0
áá¬áá°áž
áá»áœááºáá±á¬áº Sberbank ááŸá¬ áá áºááŸá áºáá±á¬áẠá¡áá¯ááºááá¯ááºááŒá áºáá²á·áá«áá°ážá ááŒáá·áºááŸá¯ááŸá¯ 304000á ááŸááºáá»áẠ599 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+457.0/-14.0áá»áœááºá¯ááºááá¯ááºáá¯á¶ážáááºáá»ááºáá»á¬ážááŒá±á¬áá·áº developer áá»á¬ážáááááᯠáá»ááºá á®ážá á±ááŒá®áž áááºážáááºážáá«áááºá ááŒáá·áºááŸá¯ááŸá¯ 187000á ááŸááºáá»áẠ21 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+37.0/-3.0ááœá¶á·ááŒáá¯ážáá±ážáá¯ááẠááŒáá·áºááŸá¯ááŸá¯ 179000á ááŸááºáá»áẠ668 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+315.0/-60.0áá±á¬ááºá»á¬ážáá áºáá±á¬ááºá¡ááŒá±á¬ááºáž ááŒáá·áºááŸá¯ááŸá¯ 167000á ááŸááºáá»áẠ249 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+239.0/-33.0áá ááœáẠá¡ááŒáááºážá á¬ážáá°áááºá ááŒáá·áºááŸá¯ááŸá¯ 158000á ááŸááºáá»áẠ927 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+259.0/-100.0á¡áá¯ááºáááŒá¯ááºáá² ááá·áºáá¯ááºáááºážááœááºááŸá¬ áá®ážáá®ážáá áºáá¯á¶ážááᯠáááºááá¯ááŒá±á¬ááºážááá²á ááŒáá·áºááŸá¯ááŸá¯ 139000á ááŸááºáá»áẠ762 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+200.0/-20.0áá¯ááŸá¬ážááᯠáááºážáá áºáá®ááœááºááŸá¯ ááŒáá·áºááŸá¯ááŸá¯ 128000á ááŸááºáá»áẠ612 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+480.0/-33.0á¡ááŒá®ážáááºáž developer áá»á¬áž á¡áááºááŒá±á¬áá·áº á¡áá¯ááºáá»á¬áž ááááŸáááá¯ááºááááºážá ááŒáá·áºááŸá¯ááŸá¯ 119000á ááŸááºáá»áẠ901 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+151.0/-14.0'áá®ážááŸáá¯á·áá¶á' áááºáááºážáá»á¬áž- ááœááºáááºážááŸááá«ááá¬ážá ááŒáá·áºááŸá¯ááŸá¯ 117000á ááŸááºáá»áẠ398 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+210.0/-14.0áá®áá±áá¬á áá°ááŒá®ážááœá±á¡ááœáẠááá¯ááºáá°ážáá¬áž? áá¯á¶ážááá·áºáá«ážááŒá®ážááẠáááá¯ááááºáá±ážáááºá ááŒáá·áºááŸá¯ááŸá¯ 116000á ááŸááºáá»áẠ649 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+222.0/-16.0
IT ááá¯ááºáá¬á¥ááá±
ááááºáááºáá°áá»á¬ážááŸáá·áº EDS - á¡áá¬á¡á¬ážáá¯á¶ážááẠá¡ááœááºááá¯ážááœá¬ážáááºá ááŒáá·áºááŸá¯ááŸá¯ 176000á ááŸááºáá»áẠ778 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+356.0/-0.0ááá¯ááá¯ááºážá á¬áááºážááœááºážááŸá¯áá»á¬ážááœáẠMegafon á¡áááºáá»á±á¬áºááœá¬ážáá¯á¶ ááŒáá·áºááŸá¯ááŸá¯ 166000á ááŸááºáá»áẠ676 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+624.0/-2.0áá¯ááŸá¬ážááᯠáááºážáá áºáá®ááœááºááŸá¯ ááŒáá·áºááŸá¯ááŸá¯ 128000á ááŸááºáá»áẠ612 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+480.0/-33.0'ááá¯ááá¯ááºážá¡ááŒá±á¬ááºážá¡áá¬' ááẠSMS ááŸáá·áº ááŸááºáá¯á¶áááºááŒááºážáááŸááá² á¡ááá²á·ááŒá áºáááºá Megafon ááŸááááºáááºááŸá¯á¡áá±ážá ááẠááŒáá·áºááŸá¯ááŸá¯ 114000á ááŸááºáá»áẠ478 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+488.0/-8.0áá¬áááºá¡á¬áá¬ááá¯ááºáá»á¬ážááẠá¡ááá¡ááŸááºááŒá¯áááºááŸááºááᯠá¡áá±á¬ááºá¡áááºááá±á¬áºááẠáááºážááá¯á·ááá»ááºááœááºááŸá¯ááᯠáá¯á¶ážááœááºááẠáááºááá¯á·ááŒáá¯ážá á¬ážáá±ááááºážá ááŒáá·áºááŸá¯ááŸá¯ 111000á ááŸááºáá»áẠ77 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+122.0/-14.0áá¯ááŸá¬ážááœáẠProtonmail ááá¯áááºáá²á·ááá¯á·ááááºááá¯á·áá¬ážáááºá ááŒáá·áºááŸá¯ááŸá¯ 102000á ááŸááºáá»áẠ398 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+418.0/-7.0Runet áá¡áá®ážáá»ááºááŒááºážááá¯ááºáá¬á¥ááá±á¡á¬áž State Duma ááŸáá¯á¶ážááŒáááºáááºááŒá®ážá¡áááºááŒá¯áá²á·áááºá ááŒáá·áºááŸá¯ááŸá¯ 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.02019 áá¯ááŸá áºááœáẠáááºááá¯ááºáá»á¬áž ááŒá¯áá¯ááºáááºáž ááŒáá·áºááŸá¯ááŸá¯ 110000á ááŸááºáá»áẠ278 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+233.0/-11.0Docker áááºáá°ááŒááºáž á¡ááá¯ááºáž 1- á¡ááŒá±áá¶áá»á¬áž ááŒáá·áºááŸá¯ááŸá¯ 91300á ááŸááºáá»áẠ24 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+52.0/-10.0KPI ááŸá JavaScript ááŸáá·áº Node.js ááá¯ááºáᬠáá±á¬ááŒá±á¬ááœá²áááºáááºáž ááŒáá·áºááŸá¯ááŸá¯ 80300á ááŸááºáá»áẠ14 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+34.0/-2.0áááºáááºážáá¬áž Vasya ááŸáá·áº API áá»áá¯á·áá²á·ááŒááºážá¡ááŒá±á¬ááºáž áá¬ááºáááºážáá»á¬áž ááŒáá·áºááŸá¯ááŸá¯ 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áá±ááºáá® web development á áá¬ááŒá±á¬áá·áº áá®áá±á¬áẠááŸá¯ááºááœá±ážááá¬áá²á á¡ááá¯ááºáž 1 ááŒáá·áºááŸá¯ááŸá¯ 57700á ááŸááºáá»áẠ319 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+101.0/-6.0
GTK
áá±á¬ááºáá¯á¶ážá¡áá±ááŸáá·áºá áááºáá°áá»áŸ á áááºá¡ááŸá±á¬ááºá¡ááŸááºáááŒá áºá á±áááºá áá¬áá±á¬ááºáááºáááºááŸá¯á¡áááºážáá¯á¶ážá¡áá»ááºá¡áá»á¬ááŒá áºáá±á¬ âgtkâ ááᯠá¡ááá·áºáááºááŸááºáá±ážáá«áááºá áá áºááŸá áºá¡ááœááºážááŸá¬áá² áá¯ááºáá±áá²á·áá«áááºá áá Ạâá¡ááá¯á¡áá»á±á¬ááºâ ááẠá¡ááá·áºáááºááŸááºááŒááºážá áááá á¬ááŒá±á¬ááºážááᯠááááºážááá¯ááºáá¬ážáá±á¬ áá±á¬ááºážáá«ážááŒá áºáááºá
GtkApplication ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážá librsvg áááºáááºááŸá¯á¡ááºá¹áá«áááºáá»á¬áž ááŒáá·áºááŸá¯ááŸá¯ 1700á ááŸááºáá»áẠ9 áá¯á á¡ááá·áºáááºááŸááºáá»áẠ+9.0/-1.0
áá±á¬ááºáá»ááº
áááá¯á¶ážáá»á¯ááºáááºááá¯ááºáá«á á¡á¬ážáá¯á¶ážáá² áá»á±á¬áºááœáŸááºá
áœá¬áááºáá«á
source: www.habr.com