рдирдорд╕реНрддреЗ, `whoami`ред
рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдЗрдВрдЯрд░рдиреЗрдЯ рдкреНрд░рд╕рд╛рд░рдг рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ - рд╕рдмрд╕реЗ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрдЬрдЯреАрдпред рдореИрдВрдиреЗ рддреБрд░рдВрдд рдЪреЗрддрд╛рд╡рдиреА рджреА рдХрд┐ рдпрд╣ рдкреНрд░рдгрд╛рд▓реА рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕реЗ рдкрд░рд┐рдЪрд┐рдд "рдмрдврд╝рдИрдЧреАрд░реА рдЙрдкрдХрд░рдг" рдХреА рдорджрдж рд╕реЗ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдпрд╣ рд▓реЗрдЦ рд╢реБрд░реБрдЖрддреА рдЖрдИрдЯреА-рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдХрдИ рдХреНрд╖рдгреЛрдВ рдХреЛ "рдЪрдмрд╛рдиреЗ" рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдореИрдВрдиреЗ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛, рдпрд╣ рдЖрдк рдкрд░ рд╣реИ, рдореЗрд░реЗ рдкреНрд░рд┐рдп рдкрд╛рдардХ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдЖрдкрдХреА рд░реБрдЪрд┐ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛, рддреЛ рдХреГрдкрдпрд╛, рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗред
рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛
рдЗрд╕рд▓рд┐рдП, рдкрд╣рд▓реЗ рдореБрдЭреЗ рдЕрдкрдиреЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд▓рдХреНрд╖реНрдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рджреЗрдВ:
1. рдиреЙрди-рд╕реНрдЯреЙрдк 24/7/365 рдХрд╛ рдкреНрд░рд╕рд╛рд░рдг рдХрд░реЗрдВ (рдШрд░ рдореЗрдВ рдмрд┐рдЬрд▓реА рдХреА рдирд┐рдХрд╛рд╕реА рдХреА рдЧрд┐рдирддреА рдирд╣реАрдВ)ред
2. рдЕрдиреБрд╕реВрдЪрд┐рдд рдкреНрд░рд╕рд╛рд░рдгред рдЕрд░реНрдерд╛рддреН, рд╣рд╡рд╛ рдкрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдЕрд╡рдзрд┐ рдореЗрдВ, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╢реИрд▓реА / рд╢реИрд▓реА рдХреЗ рдЧрд╛рдиреЗ рдмрдЬрдиреЗ рдЪрд╛рд╣рд┐рдПред
3. рдорд╛рд╕реНрдЯрд░ / рдбреАрдЬреЗ рдХреЗ "рдЧрд░реНрдо" рдХрдиреЗрдХреНрд╢рди рдФрд░ рд╡рд┐рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдердиред
4. рд╕рд╛рдЗрдЯ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ:
4.a. рд▓рдЧрдиреЗ рд╡рд╛рд▓реА рд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдорддрджрд╛рди рдХрд╛ рдПрдХ рдорд╛рдореВрд▓реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░, рддрджрдиреБрд╕рд╛рд░, TOP-20/30 / рдХреА рд░реЗрдЯрд┐рдВрдЧ рдХрд┐рддрдиреА рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИред
4.b. рд╡рд░реНрддрдорд╛рди рдЯреНрд░реИрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА, рд╡рд░реНрддрдорд╛рди рд╢реИрд▓реА / рд╢реИрд▓реА рдФрд░, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред
рдЕрдм рдереЛрдбрд╝рд╛ рдЬреЛ рдореЗрд░реЗ "рд╕реНрдЯреИрд╢" рдореЗрдВ рдерд╛ (рдЕрдзрд┐рдХ рд╕рдЯреАрдХ, рдкреИрдВрдЯреНрд░реА рдореЗрдВ):
- 2003 рд╣реЛрдо рдХрдВрдкреНрдпреВрдЯрд░, рдПрдПрдордбреА рдПрдерд▓реЙрди 1.8 рдЧреАрдЧрд╛рд╣рд░реНрдЯреНрдЬрд╝, рдЬреЛ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╣реЛрдо рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛ (рд╡реИрд╕реЗ, рдореИрдВрдиреЗ рдкрд╛рд╡рд░ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдШрдбрд╝реА рдХреА рдЖрд╡реГрддреНрддрд┐ 1.1 рдЧреАрдЧрд╛рд╣рд░реНрдЯреНрдЬрд╝ рддрдХ рдХрдо рдХрд░ рджреА);
- рдЬреЗрдВрдЯреВ рд▓рд┐рдирдХреНрд╕ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо;
- рд╡реИрд╢реНрд╡рд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рддрдХ рдкрд╣реБрдВрдЪ ~ 10Mbit / s + рд╕рдорд░реНрдкрд┐рдд рдЖрдИрдкреА;
рдЖрдЗрд╕рдХрд╛рд╕реНрдЯ рд╕рд░реНрд╡рд░ рд╕реЗрдЯрдЕрдк
рддреЛ рдЪрд▓рд┐рдП рдЪрд▓рддреЗ рд╣реИрдВред рдореИрдВ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡рд┐рддрд░рдг рдореЗрдВ рд╡реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ рдФрд░ рдПрдХ рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд╛рдкрд┐рдд / рдЗрдХрдЯреНрдареЗ рд╣реИрдВред
рдЖрдЗрд╕рдХрд╛рд╕реНрдЯ 2.3.2 рдХреЛ рд╕рд░реНрд╡рд░ рдХреЛ рдиреЙрди-рд╕реНрдЯреЙрдк - ices рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ (рдореБрдЭреЗ рд╕рдВрд╕реНрдХрд░рдг рдпрд╛рдж рдирд╣реАрдВ рд╣реИ)ред
рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЖрдЗрд╕рдХрд╛рд╕реНрдЯ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдлрд╝рд╛рдЗрд▓ /etc/icecast2/icecast.xml:
<icecast> <limits> <sources>2</sources> <burst-size>32768</burst-size> <threadpool>5</threadpool> </limits> <authentication> <admin-user>admin</admin-user> <admin-password>_</admin-password> </authentication> <directory> <yp-url-timeout>15</yp-url-timeout> <yp-url>http://dir.xiph.org/cgi-bin/yp-cgi</yp-url> </directory> <directory> <yp-url-timeout>15</yp-url-timeout> <yp-url>http://www.oddsock.org/cgi-bin/yp-cgi</yp-url> </directory> <hostname>_IP_</hostname> <listen-socket> <port>__</port> <!тАФ 8000 --> </listen-socket> <fileserve>1</fileserve> <paths> <basedir>/usr/share/icecast</basedir> <logdir>/var/log/icecast</logdir> <webroot>/home/www/icecast</webroot> <adminroot>/home/www/icecast/admin</adminroot> <alias source="/" dest="/status.xsl"/> </paths> <logging> <accesslog>access.log</accesslog> <errorlog>error.log</errorlog> <loglevel>3</loglevel> </logging> <mount> <mount-name>/non-stop</mount-name> <password>_-</password> <max-listeners>___</max-listeners> <charset>cp1251</charset> <public>0</public> <stream-name>_</stream-name> <stream-description>24/7 Non-stop music</stream-description> <stream-url>_</stream-url> <genre>Electronic</genre> <!-тАФ --> <bitrate>128</bitrate> <type>audio/mpeg</type> <subtype>mp3</subtype> <hidden>0</hidden> </mount> <mount> <mount-name>/live</mount-name> <password>__</password> <max-listeners>100</max-listeners> <fallback-mount>/non-stop</fallback-mount> <fallback-override>1</fallback-override> <fallback-when-full>0</fallback-when-full> <charset>cp1251</charset> <public>1</public> <stream-name>_</stream-name> <stream-description>_</stream-description> <stream-url>_</stream-url> <genre>Electronic</genre> <bitrate>128</bitrate> <type>audio/mpeg</type> <subtype>mp3</subtype> <hidden>0</hidden> </mount> <security> <chroot>0</chroot> <changeowner> <user>icecast</user> <group>nogroup</group> </changeowner> </security> </icecast>
Ices рд╕реЗрдЯрд┐рдВрдЧ
Ices рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ:
рдлрд╝рд╛рдЗрд▓ /etc/ices.conf:
<ices:Configuration xmlns:ices="http://www.icecast.org/projects/ices"> <Playlist> <File>/home/PUBLIC/Music/playlist.m3u</File> <Randomize>0</Randomize> <Type>builtin</Type> <Module>ices</Module> <Crossfade>1</Crossfade> </Playlist> <Server> <Hostname>localhost</Hostname> <Port>_</Port> <Password>_</Password> <Protocol>http</Protocol> </Server> <Execution> <Background>1</Background> <Verbose>1</Verbose> <Base_Directory>/tmp</Base_Directory> </Execution> <Stream> <Server> <Hostname>localhost</Hostname> <Port>_</Port> <Password>_</Password> <Protocol>http</Protocol> </Server> <Mountpoint>/non-stop</Mountpoint> <Name>_</Name> <Genre>Electronic</Genre> <Description>24/7 Non-stop music</Description> <URL>_</URL> <Bitrate>128</Bitrate> <Public>1</Public> <Reencode>0</Reencode> <Samplerate>-1</Samplerate> <Channels>2</Channels> </Stream> </ices:Configuration>
рддреЛ, рдЖрдЗрд╕рдХрд╛рд╕реНрдЯ рд╕рд░реНрд╡рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╣реА рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЖрдорддреМрд░ рдкрд░, /etc/init.d/icecast рдкреНрд░рд╛рд░рдВрдн)ред
Ices рдХреА рд╕реНрдерд╛рдкрдирд╛ рднреА рдХреА рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рдмрд╣реБрдд рдЬрд▓реНрджреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рдиреЙрди-рд╕реНрдЯреЙрдк рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рдирд╣реАрдВ рд╣реИред
рджрд░рдЕрд╕рд▓, рдЕрдм рд╣рдо рдЗрд╕реЗ рдареАрдХ рдХрд░ рджреЗрдВрдЧреЗ ...
рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ
рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдкрд░рд┐рдЪрдпред рдореИрдВрдиреЗ рдЗрд╕ рд░реЗрдбрд┐рдпреЛ рд╕реНрдЯреЗрд╢рди рдХреЛ рдЕрдХреЗрд▓реЗ рдирд╣реАрдВ рдЙрдард╛рдпрд╛, рдмрд▓реНрдХрд┐ рдПрдХ рдРрд╕реЗ рджреЛрд╕реНрдд рдХреЗ рд╕рд╛рде, рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдореЗрд░реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рд╕рдВрдЧреАрдд рдХреА рдмрд╣реБрдд рдмрдбрд╝реА рдЖрдкреВрд░реНрддрд┐ рд╣реИред рдкрд╣рд▓реЗ, рд╣рдорд╛рд░реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдкреНрд░рд╛рдЗрд╡реЗрдЯ рдиреЗрдЯрд╡рд░реНрдХ (рд╡реАрдкреАрдПрди) рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рд╕реЗ рд╣рдо рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рдереЗред рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рдЕрд▓рдЧ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЧреИрд░-рд╕реНрдЯреЙрдк рдХреЗ рд▓рд┐рдП рд╕рднреА рдкрдЯрд░рд┐рдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдХрд┐ рд╕рд╛рдВрдмрд╛-рдмреЙрд▓ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ, рдФрд░ рдЬрд┐рд╕рдореЗрдВ рдореЗрд░рд╛ рд╕рд╣рдпреЛрдЧреА рдкрдЯрд░рд┐рдпреЛрдВ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдпрд╛ рд╢рд╛рдпрдж рд╣рдЯрд╛ рд╕рдХрддрд╛ рд╣реИ)ред
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рд╕рд░рд▓ рд╣реИ:
рд╕рдВрдЧреАрдд
--Genre1
---- File1.mp3
---- File2.mp3
---- ...
---- рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ .3u
--Genre2
---- File1.mp3
---- File2.mp3
---- ...
---- рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ .3u
...
playlist.m3u
рдпрд╛рдиреА рдореБрдЦреНрдп рд╕рдВрдЧреАрдд рд╕реВрдЪреА рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдВ рд╣реИрдВ (рдпрд╛рдж рд░рдЦреЗрдВ, рдореИрдВ рдПрдХ рдЧреИрд░-рд░реЛрдХ рдЕрдиреБрд╕реВрдЪреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рдерд╛?)ред рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдордкреА 3 рдлрд╛рдЗрд▓реЗрдВ рдФрд░ рдПрдХ рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рд╣реЛрддреА рд╣реИред
рддреЛ, рдЪрд▓реЛ рд╕рднреА рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯреА рд╕реА BASH рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
Music_find.sh рдлрд╝рд╛рдЗрд▓ (рдореЗрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП
рдЕрд▓рдЧ-рдЕрд▓рдЧ рдзрдиреНрдпрд╡рд╛рдж)
рдиреЛрдЯ: рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рд╕рдВрдЧреАрдд рд╕реЗ рджреВрд░ рдХреЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕рдордЭрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдмреНрд░реЗрдХреНрд╕, рдЪрд┐рд▓, рд╣рд╛рд░реНрдбрдХреЛрд░ рдХреЗрд╡рд▓ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рд╕рдВрдЧреАрдд рдХреА рд╢реИрд▓реА рд╣реИрдВредрдФрд░ рдЪреВрдВрдХрд┐ рдореЗрд░рд╛ рд╕рд╣рдпреЛрдЧреА рд▓рд┐рдирдХреНрд╕ рд╕реЗ рджреВрд░ рд╣реИ, рдФрд░ рдПрд╕рдПрд╕рдПрдЪ рдкрд░ рд▓реЙрдЧ рдЗрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдорд┐рд╢рди рдХреЛ рдЧреНрд░реЗрдЯ рдХреНрд░реЛрдирд╕ рдХреЛ рд╕реМрдВрдкрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛:
рдЕрдм рд╣рд░ 30 рдорд┐рдирдЯ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓реЗрдЧреА рдФрд░ рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдЧреАред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк рдЕрднреА рддрдХ рдирд╣реАрдВ рднреВрд▓реЗ рд╣реИрдВ, рддреЛ рдЖрдпрдиреЛрдВ рдореЗрдВ "рдореБрдЦреНрдп" рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреА рдЧрдИ рдереА, рдЬреЛ рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдирд╣реАрдВ рдмрдиреА рд╣реИред
рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рд╢реЗрдбреНрдпреВрд▓ рдпрд╛рдж рд░рдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдШреГрдгрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рд╣реИ: рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп (рдПрдпрд░рдЯрд╛рдЗрдо рд╢реЗрдбреНрдпреВрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░), рд╡рд╛рдВрдЫрд┐рдд рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рдХреЛ рд╕рдВрдЧреАрдд рдХреА рдореВрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ (рдореЗрд░реЗ рдорд╛рдорд▓реЗ / рдШрд░ / рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ / рд╕рдВрдЧреАрдд рдореЗрдВ) рдХреЙрдкреА рдФрд░ рдмрджрд▓реЗрдВред рдкрд╣рд▓реЗ рддреЛ рдореИрдВрдиреЗ рд╢реЗрдбреНрдпреВрд▓ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ BASH рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рд╕реЛрдЪреА, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдореБрдЭреЗ рдпрд╛рдж рдЖрдпрд╛ рдХрд┐ рдЕрдЪреНрдЫрд╛ рдХреНрд░реЛрди рд╣рдореЗрд╢рд╛ рд╣рдорд╛рд░реА рдорджрдж рдХрд░рдиреЗ рдФрд░ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рднреА рдЧрдВрджреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдерд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрддреНрдкрдиреНрди рд╣реБрдИ рдЬреЛ рдЕрдиреБрд╕реВрдЪреА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрд╣рд▓реЗ рд╡рд┐рд╖рдпрд╛рдВрддрд░ ...
рдпрд╛рдж рд░рдЦреЗрдВ рдЬрдм рдореИрдВрдиреЗ ices рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдерд╛ рддреЛ рдореИрдВрдиреЗ рд░реЗрдВрдбрдорд╛рдЗрдЬреЗрд╢рди рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдерд╛? рдЖрдкрдХреЛ рд╢рд╛рдпрдж рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпреЛрдВ? рдЗрд╕рдХреЗ рджреЛ рдХрд╛рд░рдг рд╣реИрдВ:
1. рдИрд╢реНрд╡рд░ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдЖрдпрди рдпрд╛рджреГрдЪреНрдЫрд┐рдХрд░рдг рдХрд░рддрд╛ рд╣реИред рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдореБрдЭреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд░реИрдВрдбрдорд╛рдЗрдЬреЗрд╢рди рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рдЬреИрд╕рд╛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдЖрддреНрдорд╛ рдЕрднреА рднреА рд╢рд╛рдВрдд рд╣реЛ рдЬрд╛рдПред
2. рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкрдврд╝ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╢рд╛рдпрдж "рдЬрд┐рдВрдЧрд▓" рд╢рдмреНрдж рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рд╣рд╡рд╛ рдореЗрдВ рдЬрд┐рдВрдЧрд▓реНрд╕ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рд░ рддреАрди рдЯреНрд░реИрдХ), рддреЛ рдЖрдпрди рд╢рдХреНрддрд┐рд╣реАрди рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИред рдЕрдкрдиреЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХрд░рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдпрд╣ рдПрдХ рдФрд░ рдХрд╛рд░рдг рд╣реИред
BASH, рдмреЗрд╢рдХ, рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ C ++ рднрд╛рд╖рд╛ рдХреЛ рдЪреБрдирд╛ред рдиреАрдЪреЗ C ++ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рд╣реИ рдЬреЛ рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ (рдирд╛рдо рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реЗ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ), рдЗрд╕реЗ рдорд┐рд▓рд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЙрд╕реА рдлрд╝рд╛рдЗрд▓ рдкрд░ рд▓рд┐рдЦрддрд╛ рд╣реИред
рдпрд╛рджреГрдЪреНрдЫрд┐рдХрд░рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб:
#include <iostream> #include <fstream> #include <cstdlib> #include <ctime> #include <string> #include <vector> using namespace std; int main(const int argc, const char *argv[]) { if (argc<2) { cout << "ERROR: no argument recieved." << endl; return 1; } vector<string> list; string line; ifstream infile(argv[1]); if (infile.fail()) return 1; cout << "Using file: " << argv[1] << endl; while (!infile.eof()) { getline(infile,line); list.push_back(line); } infile.close(); cout << "End of file reached." << endl; int n = list.size(); if (n>1) { cout << "Begin shuffle." << endl; srand(time(0)); string temp; for (int i=0; i<(n-1); i++) { int r = i + (rand() % (ni)); temp = list[i]; list[i] = list[r]; list[r] = temp; } cout << "Finished shuffle." << endl; ofstream outfile(argv[1]); for (int i=0; i<n; i++) outfile << list[i] << endl; outfile.close(); cout << "File succuessfully updated." << endl; return 0; } return 1; }
рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ, рдореИрдВрдиреЗ рдЬрд┐рдВрдЧрд▓ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкреВрд░реА рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдк, рдореЗрд░реЗ рдкреНрд░рд┐рдп рдкрд╛рдардХ, рдЗрд╕ рдХреЛрдб рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛, рдФрд░ рднреА рдмреЗрд╣рддрд░, рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд▓рд┐рдЦ тАЛтАЛрд╕рдХрддреЗ рд╣реИрдВред
рдЕрдиреБрд╕реВрдЪреА рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рддреЛ, рд╡рд┐рд╖рдпрд╛рдВрддрд░ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЕрдиреБрд╕реВрдЪреА рдореЗрдВ рд╡рд╛рдкрд╕:
Playlist_update рдлрд╝рд╛рдЗрд▓:
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд╕рд╛рде рдирдХрд▓ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдпрд╣ рдпрд╛рджреГрдЪреНрдЫрд┐рдХрдХрд░рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдкрд╛рда рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╢реИрд▓реА рд▓рд┐рдЦрддрд╛ рд╣реИ (рдХреНрдпреЛрдВ, рдЖрдкрдХреЛ рдмрд╛рдж рдореЗрдВ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛)
рдФрд░ "рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рдХреЛ рдкреБрди: рдкрдврд╝рдиреЗ" рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрдд рднреЗрдЬрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдпрди рдкрд╣рд▓реЗ рдмрдВрдж рд╣реЛ рдЧрдП рд╣реИрдВ, рддреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдПрдЧреАред рдпрд╣ рдЬрд╛рдирдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ ices рдПрдХ рдирдИ рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рдЦреЗрд▓рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛, рдЬрдм рд╡рд╣ рд╡рд░реНрддрдорд╛рди рдЯреНрд░реИрдХ рдЦреЗрд▓рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдХрд╛рд░реНрдпрдХреНрд░рдо рдмрд╣реБрдд рд╣реА рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдирд╣реАрдВ рд▓рдЧреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдорд┐рддреНрд░ рдХреНрд░реЛрди рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ рдЕрдкрдиреА рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реВрдВ:
crontab -e 58 01 * * * /root/scripts/radio/playlist_update Breaks 58 03 * * * /root/scripts/radio/playlist_update Chill 58 09 * * * /root/scripts/radio/playlist_update Dance 58 14 * * * /root/scripts/radio/playlist_update House 58 17 * * * /root/scripts/radio/playlist_update Trance 58 21 * * * /root/scripts/radio/playlist_update Hardstyle 58 23 * * * /root/scripts/radio/playlist_update Hardcore
рдзрд┐рдХреНрдХрд╛рд░ рд╣реИ! рдЕрдм рдЕрдиреБрд╕реВрдЪрд┐рдд рдкреНрд░рд╕рд╛рд░рдг рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЬрдм рдХреЛрдИ рдбреАрдЬреЗ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдПрдХ рд╢реЗрдбреНрдпреВрд▓ рдкрд░ рдиреЙрди-рд╕реНрдЯреЙрдк рдЦреЗрд▓рддрд╛ рд╣реИ, рдЬрдм рдПрдХ рдбреАрдЬреЗ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рддреЛ рд╢реНрд░реЛрддрд╛ рдЕрдкрдиреЗ рдкреНрд░рд╕рд╛рд░рдг рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдЖрдкрдХреЛ рдпрд╛рдж рд╣реИ, рддреЛ рд╕рд╛рдЗрдЯ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЕрднреА рднреА рдЕрд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИрдВред
рд╕рдВрдЧреАрдд рдбреЗрдЯрд╛рдмреЗрд╕
рдЕрд░реЗ рд╣рд╛рдБ, рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рднреВрд▓ рдЧрдпрд╛ред рдорддрджрд╛рди рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ MySQL рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП рдореЗрд╣рдирдд рдХрд░реЛ, рдореЗрд░реЗ рджреЛрд╕реНрдд, рдПрдХ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рдЖрдкрдиреЗ рдРрд╕рд╛ рдкрд╣рд▓реЗ рд╕реЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ "рд░реВрдЯ рдореНрдпреВрдЬрд╝рд┐рдХ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА" рдореЗрдВ рдореМрдЬреВрдж рд╕рднреА рдЯреНрд░реИрдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╕реНрдЯреЛрд░ рдХрд░рдиреА рд╣реЛрдЧреАред рд╣рдореЗрдВ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ рд░реЗрдбрд┐рдпреЛ рд╣реИ), рдФрд░ рдирд┐рдореНрди рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдЗрд╕рдореЗрдВ рджреЛ рдЯреЗрдмрд▓ рд╣реИрдВ:
рдЧрд╛рдиреЗ рдХреА рдореЗрдЬ
рдЖрдИрдбреА INT (11) AUTO_INCREMENT PRIMARY_KEY
рд╢реИрд▓реА рд╡рдХрд╛рд░ (15)
рд╢реАрд░реНрд╖рдХ VARCHAR (100)
рдлрд╝рд╛рдЗрд▓ рдирд╛рдо VARCHAR (200)
рджрд░ INT (11)
рд╡реЛрдЯ рддрд╛рд▓рд┐рдХрд╛
рдЖрдИрдбреА INT (11)
рдЖрдИрдкреА тАЛтАЛрд╡рд╛рд░рдЪреЗрдпрд░ (16)
рдЕрдм рджреБрдЦ рдХреА рдмрд╛рддред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рднреА рдПрдордкреА 3 рдлрд╛рдЗрд▓реЗрдВ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд▓рд╛рдЗрд╕реЗрдВрд╕ рд╡рд╛рд▓реЗ рднреА) рдореЗрдВ рд╕рд╣реА рдЖрдИрдбреА 3 рдЯреИрдЧ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдореЗрдВ рдЙрдирдХреЗ рдкрд╛рд╕ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рд╣реИред рджреВрд╕рд░реЗ, рдореБрдЭреЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ ID3 рдЯреИрдЧ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╣реАрдВ рдорд┐рд▓реАред рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рдХреБрдЫ рдмрд▓рд┐рджрд╛рди рдХрд░рдиреЗ рдкрдбрд╝реЗред рдЕрд░реНрдерд╛рддреН: TagScanner рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ ID3 рдЯреИрдЧреНрд╕ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдЙрд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рдорд╛рдиреНрдп ID3 рдЯреИрдЧреНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВред рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛:
<рд╕рдВрдЦреНрдпрд╛>ред <рдХрд▓рд╛рдХрд╛рд░> - <рд╕рдВрд░рдЪрдирд╛> .mp3
рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ UTF-8 рдореЗрдВ рд╕рднреА ID3 рдЯреИрдЧ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рдореВрд▓рднреВрдд рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдПрдХ рд╕рдВрдЧрдд рд╡рд┐рдХрд▓реНрдк рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рд╕рднреА рд╡рд░реНрдгреЛрдВ рдХреЛ 'рдФрд░' рдХреЗ рд╕рд╛рде рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рдФрд░"ред рдХрд╛рд░реНрдпрдХреНрд░рдо рдЖрдкрдХреЛ рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдареАрдХ рд╣реИ, рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреИрдЯрд░реНрди рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реБрдП рд╕рд╣реА рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд╣реИрдВ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд╣реА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА PHP рдореЗрдВ (рддрд╛рдХрд┐ рдЗрд╕реЗ рдЕрдкрдиреЗ рдЕрд╡рдХрд╛рд╢ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ)ред
Db_update.php рдлрд╝рд╛рдЗрд▓:
рдЙрдкрд░реЛрдХреНрдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд╣рд▓реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЙрди рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХреЛ рд╣рдЯрд╛рддреА рд╣реИ, рдЬреЛ рдЕрдм рдЙрд╕реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдирдП рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдпрджрд┐ рдХреЛрдИ рд╣реЛред
рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП music_find.sh рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ (рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рдкрде рдХреЛ рдмрджрд▓рдирд╛):
/root/scripts/radio/db_update.php
рдЕрдм, рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рдПрдЧреАред
рдореИрдВ рдирд╛рд╢реНрддреЗ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реА рддрд╛рд▓рд┐рдХрд╛ (рд╡реЛрдЯ) рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ред
рдкреНрд░рд╕рд╛рд░рдг рд╕реВрдЪрдирд╛ рд╕рдВрдЧреНрд░рд╣
рдпрд╣рд╛рдВ рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛ред рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдПрдХ php рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдЖрдордВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдкрд╛рда рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдЯреНрд░реИрдХ, рд╢реИрд▓реА рдФрд░ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдирд╛рдо рд▓рд┐рдЦрддреА рд╣реИред рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпреЗ рдлрд╛рдЗрд▓реЗрдВ рд╣рдорд╛рд░реА рд╕рд╛рдЗрдЯ рдХреЗ рдореВрд▓ рдореЗрдВ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреНред рдпрджрд┐ рдЖрдк, рдореЗрд░реЗ рдорд┐рддреНрд░, рд╡реЗрдм рд╕рд░реНрд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЬрд▓реНрджреА рдХрд░реЗрдВред
рдлрд╝рд╛рдЗрд▓ icecast_status.php:
рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╣рд░ рдорд┐рдирдЯ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕реЗ 5 рд╕реЗрдХрдВрдб рдХреА рджреЗрд░реА рдХреЗ рд╕рд╛рде 12 рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ "рдмрд╛рдЗрдХ" рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдорд┐рддреНрд░ рдХреНрд░реЛрди 1 рдорд┐рдирдЯ рд╕реЗ рдХрдо рдХреА рд╕рдордп рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХрд╛ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдФрд░ рд╣рдореЗрдВ рд╣рд░ 5 рд╕реЗрдХрдВрдб рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмрд╛рд░ рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЦреИрд░, рдХреНрд░реЛрди рд╕реЗ (рдЖрдЦрд┐рд░реА рдмрд╛рд░) рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╣рд░ рдорд┐рдирдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВ:
crontab -e */1 * * * * /root/scripts/radio/icecast_status.php
рдареАрдХ рд╣реИ, рдЕрдм рд╣рдорд╛рд░реА рд╕рд╛рдЗрдЯ рдХреА рдЬрдбрд╝ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 5 рдЕрджреНрднреБрдд рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ:
тАв now_playing.txt - рдХрд▓рд╛рдХрд╛рд░ рдФрд░ рд╡рд░реНрддрдорд╛рди рдЯреНрд░реИрдХ рдХрд╛ рдирд╛рдо;
тАв id.txt - рд╡рд░реНрддрдорд╛рди рд░рдЪрдирд╛ рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рд╕рдВрдЦреНрдпрд╛;
тАв style.txt - рдЕрдЧрд░ рдпрд╣ рдиреЙрди-рд╕реНрдЯреЙрдк, рдпрд╛ "рдбреАрдЬреЗ рдСрди-рдПрдпрд░" рд▓рд╛рдЗрди рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реИ рддреЛ рдЯреНрд░реИрдХ рдХреА рд╢реИрд▓реА рдпрджрд┐ рдбреАрдЬреЗ рд╣рд╡рд╛ рдореЗрдВ рд╣реИ;
тАв рд╢реНрд░реЛрддрд╛рдУрдВред рдкрд╛рда - рд╢реНрд░реЛрддрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ (рдЦрд╛рддреЗ рдореЗрдВ HTML рд╕реНрд╡рд░реВрдкрдг рд▓реЗрддреЗ рд╣реБрдП: рдпрджрд┐ 0 рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рд╣рд░рд╛ рд╣реИ, рдпрджрд┐ рд╢реВрдиреНрдп - рдХрд╛рд▓рд╛ рд╣реИ);
тАв rate.txt - рдЯреНрд░реИрдХ рд░реЗрдЯрд┐рдВрдЧ (HTML рд╕реНрд╡рд░реВрдкрдг рдХреЛ рднреА рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП)ред
рд╡рд╛рд╣, рд╣рдореЗрдВ рд▓рдЧрднрдЧ рд╡рд╣ рд╕рдм рдХреБрдЫ рдорд┐рд▓рд╛ рдЬреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рдереЗ (рдпрд╛ рдЬреЛ рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛)ред рдпрд╣ рд╡реЛрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рд╛рдЗрдЯ рдкрд░ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЧрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╡реЛрдЯ рдХрд░реЗрдВ
рдкрд╣рд▓реА рдмрд╛рдд рдЬрдм рдореИрдВрдиреЗ рдПрдХ рд╡реЛрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд╛ рдерд╛, рддреЛ рдПрдХ рдЯреНрд░реИрдХ рдХреЗ рд▓рд┐рдП рд░рд┐рдкреАрдЯ рд╡реЛрдЯрд┐рдВрдЧ рдХреЛ рдХреИрд╕реЗ рд░реЛрдХрдирд╛ рдерд╛? рдХреБрдХреАрдЬрд╝ рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдХрднреА рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ (рд╣рд╛рдБ, рдпрд╣ рднреА рд╣реЛрддрд╛ рд╣реИ), рдФрд░ рдЖрдИрдкреА рдкрддреЗ рджреНрд╡рд╛рд░рд╛ рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП, рд╡реЛрдЯ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рдлрд╝реАрд▓реНрдб рд╣реИрдВ: рдЖрдИрдбреА рдФрд░ рдЖрдИрдкреАред
рдлрд╝рд╛рдЗрд▓ рд╡реЛрдЯред Php (рд╕рд╛рдЗрдЯ рдХреЗ рдореВрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП):
<?php
рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИ - рд╡реЛрдЯрд┐рдВрдЧ рдХрд╛ рдкреНрд░рдХрд╛рд░ (рдХреЗ рд▓рд┐рдП рдпрд╛ рдЦрд┐рд▓рд╛рдл)ред рддрджрдиреБрд╕рд╛рд░, рдХреЙрд▓
vote.php?type=plus
рд╡рд░реНрддрдорд╛рди рдЯреНрд░реИрдХ рдореЗрдВ 1 рд░реЗрдЯрд┐рдВрдЧ рдЬреЛрдбрд╝ рджреЗрдЧрд╛, рдФрд░
vote.php?type=minus
1 рд░реЗрдЯрд┐рдВрдЧ рд▓реЗрддрд╛ рд╣реИред
рд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ
рддреЛ, рдПрдХ рд╡реЛрдЯ рд╣реИред рдпрд╣ рд░рд╣рддрд╛ рд╣реИ, рд╢рд╛рдпрдж, рд╕рд╛рдЗрдЯ рдкрд░ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдореИрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ HTML рдХреЛрдб рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рдпрджрд┐ рдЖрдк рдЕрдЪрд╛рдирдХ рдПрдХ рдЕрджреНрднреБрдд jQuery рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЧрдП рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдБред
HTML рдХреЛрдб рдХреЗ рд╕рд╣реА рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рддрддреНрд╡ = рдЯреНрд░реИрдХ рдХреЗ рдирд╛рдо рдХреЗ рд▓рд┐рдП 'now_playing', рдЖрдЗрдбреА = рд╢реИрд▓реА рдХреЗ рд▓рд┐рдП 'рд╢реИрд▓реА' рдЖрджрд┐ рдХреЗ рд╕рд╛рде рд╣реЛрдиреЗ рджреЗрдВред
рдлрд┐рд░ рдЕрдЧрд▓реА рдХреЙрд▓ рдореЗрдВ рдЗрд╕реЗ рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ (рдмреЗрд╢рдХ, рдЖрдкрдХреЛ рд╕рд╛рдЗрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ jQuery рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛):
<script> function show() { $.ajax({ url: "now_playing.txt", cache: false, success: function(html){ $("#now_playing").html(html); } }); $.ajax({ url: "genre.txt", cache: false, success: function(html){ $("#genre").html(html); } }); $.ajax({ url: "listeners.txt", cache: false, success: function(html){ $("#listeners").html(html); } }); $.ajax({ url: "rate.txt", cache: false, success: function(html){ $("#rate").html(html); } }); } $(document).ready(function(){ show(); setInterval('show()',5000); }); </script>
рдФрд░ рдлрд┐рд░ рд╣рд░ 5 рд╕реЗрдХрдВрдб рдореЗрдВ рдкреГрд╖реНрда рдХреА рдЬрд╛рдирдХрд╛рд░реА рдЕрдкрдбреЗрдЯ рдХреА рдЬрд╛рдПрдЧреА (рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреГрд╖реНрда рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдмрд┐рдирд╛)ред
рдпрд╛рдж рд░рдЦреЗрдВ, рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдореИрдВрдиреЗ TOP20 рд░реИрдВрдХрд┐рдВрдЧ рдХреА рдШреЛрд╖рдгрд╛ рдХреА рдереА? рд╣рд╛рдБ, рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред
рддреЛ, рдЖрдЦрд┐рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ (рдЯрд╛рдЗрдк = 1) рдХреА рддрд╛рд▓рд┐рдХрд╛ рддреИрдпрд╛рд░ рдХрд░рддреА рд╣реИ рдпрд╛ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм (рдЯрд╛рдЗрдк = 2) рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╢реИрд▓реА / рд╢реИрд▓реА рдХреЗ рдЯреНрд░реИрдХ:
| рд░рдЪрдирд╛ | рд░реЗрдЯрд┐рдВрдЧ |
рдлрд╝рд╛рдЗрд▓ top20.php (рдЕрдкрдиреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рдЯреВрд▓ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ):
<?php $Gen = array('Dance','House','Trance','Hardstyle','Hardcore','Chill','Breaks','Pumping');
рд╡рд╣ рд╕рдм рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ HTML рдХреЛрдб рдореЗрдВ рд╕рд╣реА рдЬрдЧрд╣ рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдЖрдк рдПрдХ рд╣реА jQuery рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдмрд┐рдирд╛ setInterval ('рд╢реЛ'), 5000) рдХреЗред рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдЖрдкрдХреЛ, рдореЗрд░реЗ рдпреБрд╡рд╛ рдорд┐рддреНрд░ рдХреЛ рд╣реЛрдорд╡рд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реВрдВред
рдореБрдЭреЗ рдкреВрд░реА рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореЗрд░реА рдХрд╣рд╛рдиреА рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдпрд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧреАред