ืืื ืืืจ.
ะ
ืืื ืฉืืชืขื ืืื ืืื ืฉืงืจื, ืืืืฉื ืืงืืข.
ืืจืฉื ืื ืืืืืืจ ืืื ืฉืื ืฉืืกืืืืกืืืงื ืืืืืจืืืื ืืื ื ืจืฉืืืื, ืืื ืื ืืืืข ืคื ืืื. ืื ืื ืื ืืืืื ืฉืื ืขืฉืืชื ืืขืืช ืืืคืฉืื ืื ืคืกืคืกืชื ืืฉืื. ืืื ืืื ืืืช, ืื ื ืืืฉื ืฉืื ืืฆื ืืขื ืืื. ื ืชืืื ืงืืื ืืงืื, ืื ืฉืื ืืขืื ืืื ืืื ืืืื ืืืื ืขื ืืกืขืืคืื ืืจืืฉืื ืื.
ืืืกืืฃ ื ืชืื ืื
ืืืจืกื ืืจืืฉืื ื ืฉื ืืื ืชื ื ืืงืื ืืืฉืืื ืจืง ืืกืคืจ ืืฆืคืืืช, ืืืขืจืืช ืืืืจืืื ืืืชืืืช. ืื ืืืจ ืืื, ืืื ืื ืื ืืืคืฉืจ ืื ืืืฆืข ืฉืืืืชืืช ืืืจืืืืช ืืืชืจ. ืืืืข ืืืื ืื ืชื ืืช ืืืืงืื ืื ืืฉืืืื ืฉื ืืืชืจ; ืื ืืืคืฉืจ ืื ืืขืจืื ืืืงืจ ืืขื ืืื ืืืื, ืืืฉื, ืืจืืืช ืืืฆื ืืคืืคืืืจืืืช ืฉื ืงืืข "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'}
ืืฉื ืืฉืืืื, ืงืืขื ืืืื ืื ืฉื ืื ืื ืื ื ืจืืื ืฆื ืืขืื ืืืชืจ:
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:
ืืืืงืชื ืืช ืืืืืจืื "ืืื ื ืื ืื" ื"ืืื ื ืื ืื ืืืื" ืืชืจืฉืื, ืื ืืืืจ ืืืื ืืืฉืชืืื ืืฉื ื ืืกืขืืคืื ืื-ืืื ืืช (ืืืืืื, "DIY" + "microcontrollers" + "C++"). ืืฉืชืืฉืชื ืืืื ืื "ืคืจืืคืื" ืืื ืืืืืืฉ ืืืืจื ืคืจืืคืื ืืืชืจ, ืื ืื ืืืื ืืืื ื ืืื ืืืืช profile ืขืืืจ ืื ืื ืืืืจื ื ืืื.
ืืืืง ืืงืืื ืฉืืื ื ืขื "ืืคืงื ื-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. ืืื ืืขืื ืฉืืกืคืจ ืืฆืคืืืช ืืืืื ืืฉืชื ื ืืฆืืจื ื ืืืจืช, ืืฆืคืืื ืืืชืืืช "ืืืืืจ" ื ืืชืจื ืืขืจื ืืืืชื ืจืื.
ืืชื ืืืื ืื ืืฉืื ืื ืฉืืกืคืจ ืืฆืคืืืช ืืืืื ืฉื ืืืืจืื ืืกืขืืฃ "ืืื ืื ืฉื ืื ืื ืื" ืขืืืื ืืจื ืืืืจ ืฉืื ืื ืืืืืื, ืื "ืืคื ืืขืื", ืืื ืืืชืจ ื-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()
ืชืืฆืื:
ืืืืคื ืืคืชืืข, ืืืจืื ืืคืืคืืืจื ืืืืชืจ ืืืืื ืช ืฆืคืืืช ืืื "ืืืืืช ืืืืข"; ืืืฉืช ืืื ืืืืื ืืืืืืืื ืืืื ืื "ืชืื ืืช" ื"ืืืข ืคืืคืืืจื".
Antitop ืืืืฉ Gtk ืืงืงืื.
ืื ื ืืืื ืื ืกืื, ื ืืชื ืืจืืืช ืื ืืช ืืจืืืืช ืืขืืืื ืืช
ืืจืื
ืืืืกืืฃ, ืืืืจืื ืืืืืื. ืืืืฆืขืืช ื ืชืื ื ื ืืชืื ืจืืืืช, ื ืืื ืืืฆืื ืืช ืืืืืจืื ืืคืืคืืืจืืื ืืืืชืจ ืขืืืจ ืืจืืืืช ืืคืืคืืืจืืืช ืืืืชืจ ืืฉื ื ืื 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ืกืืจืง ืืฆืืืืช ืืืฉืืื ืืืืฉื ืฉืื ื-Rostelecom 111000 ืฆืคืืืช, 194 ืชืืืืืช, ืืืจืื +300.0/-8.0
ืชืื ืืช
ืขื ืืืืจ ืืื 167000 ืฆืคืืืช, 249 ืชืืืืืช, ืืืจืื +239.0/-33.0ืืื ืฉืชืฉืื ืืืงืื ืืืชืจ ืืช OOP, ืื ืืืื ืื ืืืชืืื ืืืช ืฉืื 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ืืื ืื IT ืชืื ืฉืืืืฉ ืืืืืื ืฉื ืชืืืื ืืืืื ืชืคืืื ืืืื 78000 ืฆืคืืืช, 86 ืชืืืืืช, ืืืจืื +84.0/-14.0256 ืฉืืจืืช ืฉื C++ ืืฉืืฃ: ืืชืืืช ื ืืชื ืงืจื ืืื ืืืคืก ืชืื ืืื ืฉืขืืช 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.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
ืืงืืงื ืืชืืื ื-IT
ืจืืืื ืืืชืืืืช ืืืืืืืืืช - ืืื ืจืข ืืืื 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ืืืฆื ืคืจืืืื ืืืื ื ืืกื ืืจืืกืื 102000 ืฆืคืืืช, 398 ืชืืืืืช, ืืืจืื +418.0/-7.0ืืืง ืืืืื ืืจืื ื ืืืืฅ ืขื ืืื ืืืืื ืืืืืืชืืช ืืฉืืืฉ ืงืจืืืืช 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