Habrastatistics: рдХрд╕рд░реА Habr geektimes рдмрд┐рдирд╛ рдмрд╛рдБрдЪреНрджрдЫ

рд╣реЗрд░ Habr.

рдпреЛ рд▓реЗрдЦ рдореВрд▓реНрдпрд╛рдЩреНрдХрдирдХреЛ рддрд╛рд░реНрдХрд┐рдХ рдирд┐рд░рдиреНрддрд░рддрд╛ рд╣реЛ 2018 рдХреЛ рд▓рд╛рдЧрд┐ рд╕рдмреИ рднрдиреНрджрд╛ рд░рд╛рдореНрд░реЛ Habr рд▓реЗрдЦред рд░ рдпрджреНрдпрдкрд┐ рд╡рд░реНрд╖ рдЕрдЭреИ рд╕рдХрд┐рдПрдХреЛ рдЫреИрди, рддрдкрд╛рдИрд▓рд╛рдИ рдерд╛рд╣рд╛ рдЫ, рдЧрд░реНрдореАрдорд╛ рдирд┐рдпрдорд╣рд░реВрдорд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдерд┐рдП, рддрджрдиреБрд╕рд╛рд░, рдпреЛ рд╣реЗрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд░реЛрдЪрдХ рднрдпреЛ рдХрд┐ рдпрд╕рд▓реЗ рдХреЗрд╣рд┐ рдЕрд╕рд░ рдЧрд░реНрдпреЛред

Habrastatistics: рдХрд╕рд░реА Habr geektimes рдмрд┐рдирд╛ рдмрд╛рдБрдЪреНрджрдЫ

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрдереНрдпрд╛рдЩреНрдХрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд, рд▓реЗрдЦрд╣рд░реВрдХреЛ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдореВрд▓реНрдпрд╛рдЩреНрдХрди рдкреНрд░рджрд╛рди рдЧрд░рд┐рдиреЗрдЫ, рд╕рд╛рдереИ рдпрд╕рд▓реЗ рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрдЫ рднрдиреНрдиреЗ рдХреБрд░рд╛рдорд╛ рд░реБрдЪрд┐ рд░рд╛рдЦреНрдиреЗрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдХреЗрд╣реА рд╕реНрд░реЛрдд рдХреЛрдб рдкреНрд░рджрд╛рди рдЧрд░рд┐рдиреЗрдЫред

рдХреЗ рднрдпреЛ рднрдиреЗрд░ рдЪрд╛рд╕реЛ рд░рд╛рдЦреНрдиреЗрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐, рдирд┐рд░рдиреНрддрд░рддрд╛ рдХрдЯ рдЕрдиреНрддрд░реНрдЧрдд рдЫред рд╕рд╛рдЗрдЯрдХреЛ рдЦрдгреНрдбрд╣рд░реВрдХреЛ рдердк рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдгрдорд╛ рд░реБрдЪрд┐ рд░рд╛рдЦреНрдиреЗрд╣рд░реВрд▓реЗ рдкрдирд┐ рд╣реЗрд░реНрди рд╕рдХреНрдЫрдиреН рдЕрд░реНрдХреЛ рднрд╛рдЧ.

рд╕реНрд░реЛрдд рдбрд╛рдЯрд╛

рдпреЛ рдореВрд▓реНрдпрд╛рдЩреНрдХрди рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рд╣реЛ, рд░ рдорд╕рдБрдЧ рдХреБрдиреИ рднрд┐рддреНрд░реА рдЬрд╛рдирдХрд╛рд░реА рдЫреИрдиред рддрдкрд╛рдИрд▓реЗ рдЖрдлреНрдиреЛ рдмреНрд░рд╛рдЙрдЬрд░рдХреЛ рдареЗрдЧрд╛рдирд╛ рдкрдЯреНрдЯреАрдорд╛ рд╣реЗрд░реЗрд░ рд╕рдЬрд┐рд▓реИ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, Habr├й рдорд╛ рд╕рдмреИ рд▓реЗрдЦрд╣рд░реВ рдирд┐рд░рдиреНрддрд░ рд╕рдВрдЦреНрдпрд╛рдорд╛ рдЫрдиреНред рддреНрдпрд╕реЛрднрдП рдпреЛ рдкреНрд░рд╛рд╡рд┐рдзрд┐рдХрдХреЛ рдХреБрд░рд╛ рд╣реЛ, рд╣рд╛рдореА рдХреЗрд╡рд▓ рдПрдХ рдЪрдХреНрд░рдорд╛ рдкрдЩреНрдХреНрддрд┐рдорд╛ рд╕рдмреИ рд▓реЗрдЦрд╣рд░реВ рдкрдвреНрдЫреМрдВ (рдПрдЙрдЯрд╛ рдереНрд░реЗрдбрдорд╛ рд░ рдкрдЬрд╣рд░реВрд╕рдБрдЧ, рддрд╛рдХрд┐ рд╕рд░реНрднрд░ рд▓реЛрдб рдирд╣реЛрд╕реН)ред рдорд╛рдирд╣рд░реВ рдкрд╛рдЗрдердирдорд╛ рд╕рд╛рдзрд╛рд░рдг рдкрд╛рд░реНрд╕рд░рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░рд┐рдПрдХрд╛ рдерд┐рдП (рд╕реНрд░реЛрддрд╣рд░реВ рдЙрдкрд▓рдмреНрдз рдЫрдиреН рдпрд╣рд╛рдБ) рд░ csv рдлрд╛рдЗрд▓рдорд╛ рдмрдЪрдд рдЧрд░рд┐рдПрдХреЛ рдЫ:

2019-08-11T22:36Z,https://habr.com/ru/post/463197/,"Blazor + MVVM = Silverlight ╨╜╨░╨╜╨╛╤Б╨╕╤В ╨╛╤В╨▓╨╡╤В╨╜╤Л╨╣ ╤Г╨┤╨░╤А, ╨┐╨╛╤В╨╛╨╝╤Г ╤З╤В╨╛ ╨┤╤А╨╡╨▓╨╜╨╡╨╡ ╨╖╨╗╨╛ ╨╜╨╡╨┐╨╛╨▒╨╡╨┤╨╕╨╝╨╛",votes:11,votesplus:17,votesmin:6,bookmarks:40,views:5300,comments:73
2019-08-11T05:26Z,https://habr.com/ru/news/t/463199/,"╨Т NASA ╨╕╤Б╨┐╤Л╤В╨░╨╗╨╕ ╤Б╨╕╤Б╤В╨╡╨╝╤Г ╨░╨▓╤В╨╛╨╜╨╛╨╝╨╜╨╛╨│╨╛ ╤Г╨┐╤А╨░╨▓╨╗╨╡╨╜╨╕╤П ╨╛╨┤╨╜╨╛╨│╨╛ ╨╝╨╕╨║╤А╨╛╤Б╨┐╤Г╤В╨╜╨╕╨║╨░ ╨┤╤А╤Г╨│╨╕╨╝",votes:15,votesplus:15,votesmin:0,bookmarks:2,views:1700,comments:7

рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрджреИ

рдкрд╛рд░реНрд╕рд┐рдЩрдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА Python, Pandas рд░ Matplotlib рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред рддрдереНрдпрд╛рдЩреНрдХрдорд╛ рд░реБрдЪрд┐ рдирднрдПрдХрд╛рд╣рд░реВрд▓реЗ рдпреЛ рднрд╛рдЧ рдЫреЛрдбреЗрд░ рд╕рд┐рдзреИ рд▓реЗрдЦрд╣рд░реВрдорд╛ рдЬрд╛рди рд╕рдХреНрдЫрдиреНред

рдкрд╣рд┐рд▓реЗ рддрдкрд╛рдИрдВрд▓реЗ рдореЗрдореЛрд░реАрдорд╛ рдбреЗрдЯрд╛рд╕реЗрдЯ рд▓реЛрдб рдЧрд░реНрди рд░ рдЗрдЪреНрдЫрд┐рдд рд╡рд░реНрд╖рдХреЛ рд▓рд╛рдЧрд┐ рдбреЗрдЯрд╛ рдЪрдпрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред

import pandas as pd
import datetime
import matplotlib.dates as mdates
from matplotlib.ticker import FormatStrFormatter
from pandas.plotting import register_matplotlib_converters


df = pd.read_csv("habr.csv", sep=',', encoding='utf-8', error_bad_lines=True, quotechar='"', comment='#')
dates = pd.to_datetime(df['datetime'], format='%Y-%m-%dT%H:%MZ')
df['datetime'] = dates
year = 2019
df = df[(df['datetime'] >= pd.Timestamp(datetime.date(year, 1, 1))) & (df['datetime'] < pd.Timestamp(datetime.date(year+1, 1, 1)))]

print(df.shape)

рдпрд╕ рд╡рд░реНрд╖ (рдпрджреНрдпрдкрд┐ рдпреЛ рдЕрдЭреИ рд╕рдорд╛рдкреНрдд рднрдПрдХреЛ рдЫреИрди) рд▓реЗрдЦреНрдиреЗ рд╕рдордпрдорд╛, 12715 рд▓реЗрдЦрд╣рд░реВ рдкреНрд░рдХрд╛рд╢рд┐рдд рднрдЗрд╕рдХреЗрдХрд╛ рдЫрдиреНред рддреБрд▓рдирд╛рдХреЛ рд▓рд╛рдЧрд┐, рд╕рдореНрдкреВрд░реНрдг 2018 - 15904 рдХреЛ рд▓рд╛рдЧрд┐ред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рдзреЗрд░реИ - рдпреЛ рдкреНрд░рддрд┐ рджрд┐рди рд▓рдЧрднрдЧ 43 рд▓реЗрдЦрд╣рд░реВ рдЫрдиреН (рд░ рдпреЛ рдХреЗрд╡рд▓ рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдореВрд▓реНрдпрд╛рдЩреНрдХрди рд╕рдВрдЧ рдЫ; рдХреБрд▓ рдХрддрд┐ рд▓реЗрдЦ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░рд┐рдпреЛ рдЬреБрди рдирдХрд╛рд░рд╛рддреНрдордХ рдЧрдП рд╡рд╛ рдореЗрдЯрд╛рдЗрдпреЛ, рдПрдХ рдорд╛рддреНрд░ рдЕрдиреБрдорд╛рди рдЧрд░реНрди рд╕рдХреНрдЫред рд╡рд╛ рдкрд╣рд┐рдЪрд╛рдирдХрд░реНрддрд╛рд╣рд░реВ рдмреАрдЪрдХреЛ рдЦрд╛рдбрд▓рдмрд╛рдЯ рд▓рдЧрднрдЧ рдЕрдиреБрдорд╛рди рдЧрд░реНрдиреБрд╣реЛрд╕реН)ред

рдбрд╛рдЯрд╛рд╕реЗрдЯрдмрд╛рдЯ рдЖрд╡рд╢реНрдпрдХ рдлрд┐рд▓реНрдбрд╣рд░реВ рдЪрдпрди рдЧрд░реМрдВред рдореЗрдЯреНрд░рд┐рдХреНрд╕рдХреЛ рд░реВрдкрдорд╛ рд╣рд╛рдореА рд╣реЗрд░рд╛рдЗрдХреЛ рд╕рдВрдЦреНрдпрд╛, рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ, рдореВрд▓реНрдпрд╛рдЩреНрдХрди рдорд╛рдирд╣рд░реВ рд░ рдмреБрдХрдорд╛рд░реНрдХрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред

def to_float(s):
    # "bookmarks:22" => 22.0
    num = ''.join(i for i in s if i.isdigit())
    return float(num)

def to_int(s):
    # "bookmarks:22" => 22
    num = ''.join(i for i in s if i.isdigit())
    return int(num)

def to_date(dt):
    return dt.date() 

date = dates.map(to_date, na_action=None)
views = df["views"].map(to_int, na_action=None)
bookmarks = df["bookmarks"].map(to_int, na_action=None)
votes = df["votes"].map(to_float, na_action=None)
votes_up = df["up"].map(to_float, na_action=None)
votes_down = df["down"].map(to_float, na_action=None)
comments = df["comments"].map(to_int, na_action=None)

df['date'] = date
df['views'] = views
df['votes'] = votes
df['bookmarks'] = bookmarks
df['up'] = votes_up
df['down'] = votes_down

рдЕрдм рдбрд╛рдЯрд╛рд╕реЗрдЯрдорд╛ рдбрд╛рдЯрд╛ рдердкрд┐рдПрдХреЛ рдЫ рд░ рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред рджрд┐рдирдХреЛ рдЖрдзрд╛рд░рдорд╛ рдбреЗрдЯрд╛ рд╕рдореВрд╣рдмрджреНрдз рдЧрд░реМрдВ рд░ рдФрд╕рдд рдорд╛рдирд╣рд░реВ рд▓рд┐рдиреБрд╣реЛрд╕реНред

g = df.groupby(['date'])
days_count = g.size().reset_index(name='counts')
year_days = days_count['date'].values
grouped = g.median().reset_index()
grouped['counts'] = days_count['counts']
counts_per_day = grouped['counts'].values
counts_per_day_avg = grouped['counts'].rolling(window=20).mean()
view_per_day = grouped['views'].values
view_per_day_avg = grouped['views'].rolling(window=20).mean()
votes_per_day = grouped['votes'].values
votes_per_day_avg = grouped['votes'].rolling(window=20).mean()
bookmarks_per_day = grouped['bookmarks'].values
bookmarks_per_day_avg = grouped['bookmarks'].rolling(window=20).mean()

рдЕрдм рдЪрд╛рдЦрд▓рд╛рдЧреНрджреЛ рдкрдХреНрд╖ рдпреЛ рд╣реЛ рдХрд┐ рд╣рд╛рдореА рдЧреНрд░рд╛рдлрд╣рд░реВ рд╣реЗрд░реНрди рд╕рдХреНрдЫреМрдВред

2019 рдорд╛ Habr├й рдорд╛ рдкреНрд░рдХрд╛рд╢рдирд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рд╣реЗрд░реМрдВред

import matplotlib.pyplot as plt

plt.rcParams["figure.figsize"] = (16, 8)
fig, ax = plt.subplots()

plt.bar(year_days, counts_per_day, label='Articles/day')
plt.plot(year_days, counts_per_day_avg, 'g-', label='Articles avg/day')
plt.xticks(rotation=45)
ax.xaxis.set_major_formatter(mdates.DateFormatter("%d-%m-%Y"))  
ax.xaxis.set_major_locator(mdates.MonthLocator(interval=1))
plt.legend(loc='best')
plt.tight_layout()
plt.show()

рдирддрд┐рдЬрд╛ рд░реЛрдЪрдХ рдЫред рддрдкрд╛рдИрд▓реЗ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреЗ рд░реВрдкрдорд╛, Habr рд╡рд░реНрд╖рднрд░рд┐ рдереЛрд░реИ "рд╕рд╕реЗрдЬ" рднрдПрдХреЛ рдЫред рдорд▓рд╛рдИ рдХрд╛рд░рдг рдерд╛рд╣рд╛ рдЫреИрдиред

Habrastatistics: рдХрд╕рд░реА Habr geektimes рдмрд┐рдирд╛ рдмрд╛рдБрдЪреНрджрдЫ

рддреБрд▓рдирд╛рдХреЛ рд▓рд╛рдЧрд┐, 2018 рдЕрд▓рд┐ рд╕рд╣рдЬ рджреЗрдЦрд┐рдиреНрдЫ:

Habrastatistics: рдХрд╕рд░реА Habr geektimes рдмрд┐рдирд╛ рдмрд╛рдБрдЪреНрджрдЫ

рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рдореИрд▓реЗ рдЧреНрд░рд╛рдлрдорд╛ 2019 рдорд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рд▓реЗрдЦрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛рдорд╛ рдХреБрдиреИ рдареВрд▓реЛ рдХрдореА рджреЗрдЦреЗрдХреЛ рдЫреИрдиред рдпрд╕рдХреЛ рд╡рд┐рдкрд░реАрдд, рдЧрд░реНрдореАрдХреЛ рддреБрд▓рдирд╛рдорд╛ рдпреЛ рдЕрд▓рд┐рдХрддрд┐ рдмрдвреЗрдХреЛ рджреЗрдЦрд┐рдиреНрдЫред

рддрд░ рдЕрд░реНрдХреЛ рджреБрдИ рдЧреНрд░рд╛рдлрд▓реЗ рдорд▓рд╛рдИ рдЕрд▓рд┐ рдмрдвреА рдирд┐рд░рд╛рд╢ рдкрд╛рд░реНрдЫред

рдкреНрд░рддрд┐ рд▓реЗрдЦ рд╣реЗрд░рд╛рдЗрдХреЛ рдФрд╕рдд рд╕рдВрдЦреНрдпрд╛:

Habrastatistics: рдХрд╕рд░реА Habr geektimes рдмрд┐рдирд╛ рдмрд╛рдБрдЪреНрджрдЫ

рдкреНрд░рддрд┐ рд▓реЗрдЦ рдФрд╕рдд рдореВрд▓реНрдпрд╛рдЩреНрдХрди:

Habrastatistics: рдХрд╕рд░реА Habr geektimes рдмрд┐рдирд╛ рдмрд╛рдБрдЪреНрджрдЫ

рддрдкрд╛рдИрд▓реЗ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреЗ рд░реВрдкрдорд╛, рд╣реЗрд░рд╛рдЗрдХреЛ рдФрд╕рдд рд╕рдВрдЦреНрдпрд╛ рд╡рд░реНрд╖рднрд░рд┐ рдереЛрд░реИ рдШрдЯреНрдЫред рдпреЛ рддрдереНрдп рджреНрд╡рд╛рд░рд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ рдХрд┐ рдирдпрд╛рдБ рд▓реЗрдЦрд╣рд░реВ рдЕрдЭреИ рдЦреЛрдЬ рдЗрдиреНрдЬрд┐рдирд╣рд░реВ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдЧрд░рд┐рдПрдХреЛ рдЫреИрди, рд░ рддрд┐рдиреАрд╣рд░реВ рдкреНрд░рд╛рдпрдГ рдлреЗрд▓рд╛ рдкрд░реНрджреИрдирдиреНред рддрд░ рдкреНрд░рддрд┐ рд▓реЗрдЦ рдФрд╕рдд рдореВрд▓реНрдпрд╛рдЩреНрдХрдирдорд╛ рдЖрдПрдХреЛ рдЧрд┐рд░рд╛рд╡рдЯ рдЕрдЭ рдЕрдЪрдореНрдордХреЛ рдЫред рднрд╛рд╡рдирд╛ рдпреЛ рд╣реЛ рдХрд┐ рдкрд╛рдардХрд╣рд░реВрд╕рдБрдЧ рдпрд╛ рдд рдзреЗрд░реИ рд▓реЗрдЦрд╣рд░реВ рд╣реЗрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рдордп рдЫреИрди рд╡рд╛ рдореВрд▓реНрдпрд╛рдЩреНрдХрдирд╣рд░реВрдорд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реБрдиреНрдиред рд▓реЗрдЦрдХ рдЗрдирд╛рдо рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рджреЗрдЦрд┐, рдпреЛ рдкреНрд░рд╡реГрддреНрддрд┐ рдзреЗрд░реИ рдЕрдкреНрд░рд┐рдп рдЫред

рд╡реИрд╕реЗ, рдпреЛ 2018 рдорд╛ рднрдПрди, рд░ рддрд╛рд▓рд┐рдХрд╛ рдХрдо рд╡рд╛ рдХрдо рдкрдирд┐ рдЫред

Habrastatistics: рдХрд╕рд░реА Habr geektimes рдмрд┐рдирд╛ рдмрд╛рдБрдЪреНрджрдЫ

рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рд╕реНрд░реЛрдд рдорд╛рд▓рд┐рдХрд╣рд░реВрд╕рдБрдЧ рд╕реЛрдЪреНрдирдХреЛ рд▓рд╛рдЧрд┐ рдХреЗрд╣рд┐ рдЫред

рддрд░ рджреБрдГрдЦрдХреЛ рдХреБрд░рд╛ рдирдЧрд░реМрдВред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рд╣рд╛рдореА рднрдиреНрди рд╕рдХреНрдЫреМрдВ рдХрд┐ Habr "рдмрд╛рдБрдЪреНрдпреЛ" рдЧреНрд░реАрд╖реНрдордорд╛ рдзреЗрд░реИ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрд░рд┐рд╡рд░реНрддрди рднрдпреЛ, рд░ рд╕рд╛рдЗрдЯрдорд╛ рд▓реЗрдЦрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдШрдЯреЗрдХреЛ рдЫреИрдиред

рдореВрд▓реНрдпрд╛рдЩреНрдХрди

рдЕрдм, рд╡рд╛рд╕реНрддрд╡рдорд╛, рдореВрд▓реНрдпрд╛рдЩреНрдХрдиред рдпрд╕рдорд╛ рдкреНрд░рд╡реЗрд╢ рдЧрд░реНрдиреЗрд╣рд░реВрд▓рд╛рдИ рдмрдзрд╛рдИ рдЫред рдо рддрдкрд╛рдИрдВрд▓рд╛рдИ рдлреЗрд░рд┐ рдПрдХ рдкрдЯрдХ рд╕рдореНрдЭрд╛рдЙрди рдЪрд╛рд╣рдиреНрдЫреБ рдХрд┐ рдореВрд▓реНрдпрд╛рдЩреНрдХрди рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рдЫ, рд╕рд╛рдпрдж рдореИрд▓реЗ рдХреЗрд╣рд┐ рдЫреБрдЯреЗрдХреЛ рдЫреБ, рд░ рдпрджрд┐ рдХреЗрд╣рд┐ рд▓реЗрдЦ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдкрдорд╛ рдпрд╣рд╛рдБ рд╣реБрдиреБрдкрд░реНрдЫ, рддрд░ рдпреЛ рд╣реЛрдЗрди, рд▓реЗрдЦреНрдиреБрд╣реЛрд╕реН, рдо рдпрд╕рд▓рд╛рдИ рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рдердкреНрдиреЗрдЫреБред рдореВрд▓реНрдпрд╛рдЩреНрдХрдирдХреЛ рд░реВрдкрдорд╛, рдо рдЧрдгрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреБ, рдЬреБрди рдорд▓рд╛рдИ рд▓рд╛рдЧреНрдЫ рдХрд┐ рдзреЗрд░реИ рд░реЛрдЪрдХ рд╣реБрди рдкреБрдЧреНрдпреЛред

рд╣реЗрд░рд╛рдЗрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдЕрдиреБрд╕рд╛рд░ рд╢реАрд░реНрд╖ рд▓реЗрдЦрд╣рд░реВ

рд╣реЗрд░рд╛рдЗрдХреЛ рдЕрдиреБрдкрд╛рддрдорд╛ рдореВрд▓реНрдпрд╛рдЩреНрдХрди рдЧрд░реА рд╢реАрд░реНрд╖ рд▓реЗрдЦрд╣рд░реВ

рд╣реЗрд░рд╛рдЗрдХреЛ рдЕрдиреБрдкрд╛рддрдорд╛ рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВрджреНрд╡рд╛рд░рд╛ рд╢реАрд░реНрд╖ рд▓реЗрдЦрд╣рд░реВ

рд╢реАрд░реНрд╖ рд╕рдмреИрднрдиреНрджрд╛ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рд▓реЗрдЦрд╣рд░реВ

рдореВрд▓реНрдпрд╛рдЩреНрдХрди рджреНрд╡рд╛рд░рд╛ рд╢реАрд░реНрд╖ рд▓реЗрдЦрд╣рд░реВ

рдмреБрдХрдорд╛рд░реНрдХрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдЕрдиреБрд╕рд╛рд░ рд╢реАрд░реНрд╖ рд▓реЗрдЦрд╣рд░реВ

рдкреБрд╕реНрддрдХрдЪрд┐рдиреЛ рд░ рд╣реЗрд░рд╛рдЗрдХреЛ рдЕрдиреБрдкрд╛рдд рдЕрдиреБрд╕рд╛рд░ рд╢реАрд░реНрд╖

рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛рдорд╛ рд╢реАрд░реНрд╖ рд▓реЗрдЦрд╣рд░реВ

рд░ рдЕрдиреНрддрдорд╛, рдЕрдиреНрддрд┐рдо рдПрдХ рдорди рдирдкрд░реНрдиреЗ рд╕рдВрдЦреНрдпрд╛ рдЕрдиреБрд╕рд╛рд░ рдПрдиреНрдЯрд┐рдЯрдк

рдЙрд╣ред рдорд╕рдБрдЧ рдХреЗрд╣рд┐ рдердк рд░реЛрдЪрдХ рдЪрдпрдирд╣рд░реВ рдЫрдиреН, рддрд░ рдо рдкрд╛рдардХрд╣рд░реВрд▓рд╛рдИ рдмреЛрд░ рдЧрд░реНрджрд┐рдиред

рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛

рдореВрд▓реНрдпрд╛рдЩреНрдХрди рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджрд╛, рдореИрд▓реЗ рдЪрд╛рдЦрд▓рд╛рдЧреНрджреЛ рджреЗрдЦрд┐рдиреЗ рджреБрдИрд╡рдЯрд╛ рдмрд┐рдиреНрджреБрд╣рд░реВрдорд╛ рдзреНрдпрд╛рди рджрд┐рдПрдБред

рд╕рдмреИрднрдиреНрджрд╛ рдкрд╣рд┐рд▓реЗ, рд╢реАрд░реНрд╖рдХреЛ ремреж% "geektimes" рд╡рд┐рдзрд╛рдХрд╛ рд▓реЗрдЦрд╣рд░реВ рд╣реБрдиреНред рдЕрд░реНрдХреЛ рд╡рд░реНрд╖ рддрд┐рдиреАрд╣рд░реВрдордзреНрдпреЗ рдХрдо рд╣реБрдиреЗрдЫ рдХрд┐ рдЫреИрди, рд░ рдмрд┐рдпрд░, рдард╛рдЙрдБ, рдФрд╖рдзрд┐, рдЖрджрд┐ рдмрд╛рд░реЗ рд▓реЗрдЦрд╣рд░реВ рдмрд┐рдирд╛ Habr рдХрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ, рдорд▓рд╛рдИ рдерд╛рд╣рд╛ рдЫреИрдиред рдЕрд╡рд╢реНрдп рдкрдирд┐, рдкрд╛рдардХрд╣рд░реВрд▓реЗ рдХреЗрд╣реА рдЧреБрдорд╛рдЙрдиреЗрдЫрдиреНред рд╣реЗрд░реМрдВред

рджреЛрд╕реНрд░реЛ, рд╢реАрд░реНрд╖ рдмреБрдХрдорд╛рд░реНрдХрд╣рд░реВ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдкрдорд╛ рдЙрдЪреНрдЪ рдЧреБрдгрд╕реНрддрд░рдХреЛ рд╣реБрди рдкреБрдЧреЗред рдпреЛ рдордиреЛрд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рд░реВрдкрдорд╛ рдмреБрдЭреНрди рдпреЛрдЧреНрдп рдЫ; рдкрд╛рдардХрд╣рд░реВрд▓реЗ рдореВрд▓реНрдпрд╛рдЩреНрдХрдирдорд╛ рдзреНрдпрд╛рди рдирджрд┐рди рд╕рдХреНрдЫрдиреН, рддрд░ рдпрджрд┐ рд▓реЗрдЦ рдЖрд╡рд╢реНрдпрдХ рдЫ, рддреНрдпрд╕рдкрдЫрд┐ рдпреЛ рддрдкрд╛рдЗрдБрдХреЛ рдмреБрдХрдорд╛рд░реНрдХ рдорд╛ рдердкрд┐рдиреЗрдЫред рд░ рдпрд╣рд╛рдБ рдареАрдХ рдЙрдкрдпреЛрдЧреА рд░ рдЧрдореНрднреАрд░ рд▓реЗрдЦрд╣рд░реВрдХреЛ рд╕рдмреИрднрдиреНрджрд╛ рдареВрд▓реЛ рдПрдХрд╛рдЧреНрд░рддрд╛ рдЫред рдорд▓рд╛рдИ рд▓рд╛рдЧреНрдЫ рдХрд┐ рд╕рд╛рдЗрдЯ рдорд╛рд▓рд┐рдХрд╣рд░реВрд▓реЗ рдХреБрдиреИ рди рдХреБрдиреИ рд░реВрдкрдорд╛ рдмреБрдХрдорд╛рд░реНрдХрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рд░ рдкреБрд░рд╕реНрдХрд╛рд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдмреАрдЪрдХреЛ рдЬрдбрд╛рдирдХреЛ рдорд╛рдзреНрдпрдордмрд╛рдЯ рд╕реЛрдЪреНрдиреБ рдкрд░реНрдЫ рдпрджрд┐ рддрд┐рдиреАрд╣рд░реВ рдпрд╣рд╛рдБ Habr├й рдорд╛ рд▓реЗрдЦрд╣рд░реВрдХреЛ рдпреЛ рд╡рд┐рд╢реЗрд╖ рд╢реНрд░реЗрдгреА рдмрдврд╛рдЙрди рдЪрд╛рд╣рдиреНрдЫрдиреНред

рдпрд╕реНрддреИ рдХреЗрд╣рд┐ред рдорд▓рд╛рдИ рдЖрд╢рд╛ рдЫ рдпреЛ рдЬрд╛рдирдХрд╛рд░реАрдореВрд▓рдХ рдерд┐рдпреЛред

рд▓реЗрдЦрд╣рд░реВрдХреЛ рд╕реВрдЪреА рд▓рд╛рдореЛ рднрдпреЛ, рд░рд╛рдореНрд░реЛ, рдпреЛ рд╕рдореНрднрд╡рддрдГ рд░рд╛рдореНрд░реЛрдХреЛ рд▓рд╛рдЧрд┐ рд╣реЛред рд╕рдмреИрд▓рд╛рдИ рдкрдвреЗрд░ рдЦреБрд╢реАред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди