Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π˜ΡΠΊΡƒΡΡΡ‚Π²ΠΎ программирования для UnixΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 71

Автор Π­Ρ€ΠΈΠΊ Π Π΅ΠΉΠΌΠΎΠ½Π΄

Π’ΠΎ всСх Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… коррСляционная ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° прСдставляСт собой ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ. ВСсовыС коэффициСнты, подставлСнныС Π² Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ, наряду с провСряСмым сообщСниСм слуТат Π² качСствС нСявной ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ структуры для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… спам-Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² Π½Π° основС сличСния с ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠΌ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΈΡ… хрупкости. Π‘ΠΏΠ°ΠΌΠ΅Ρ€Ρ‹ постоянно ΡΠΎΡΡ‚ΡΠ·Π°ΡŽΡ‚ΡΡ с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€Π°Π²ΠΈΠ» Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ, заставляя ΠΊΡƒΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ² постоянно ΠΏΠ΅Ρ€Π΅Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ "ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹Ρ… позициях Π² Π³ΠΎΠ½ΠΊΠ΅ Π²ΠΎΠΎΡ€ΡƒΠΆΠ΅Π½ΠΈΠΉ". БтатистичСскиС спам-Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ собствСнныС ΠΏΡ€Π°Π²ΠΈΠ»Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Π½Π° основС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

ЀактичСски ΠΎΠΏΡ‹Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со статистичСскими Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°ΠΌΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΡΠ°ΠΌΠΎΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΉΡΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΌΠ΅Π½Π΅Π΅ Π²Π°ΠΆΠ΅Π½, Ρ‡Π΅ΠΌ качСство Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… спам/нСспам, Π½Π° основС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ вычисляСт вСсовыС коэффициСнты. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ статистичСских Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ большС ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ модСлью Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Π΅ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ.

Π‘Ρ‚Π°Ρ‚ΡŒΡ "A Plan for Spam" Π±Ρ‹Π»Π° ΠΎΡˆΠ΅Π»ΠΎΠΌΠ»ΡΡŽΡ‰Π΅ΠΉ Π½ΠΎΠ²ΠΎΡΡ‚ΡŒΡŽ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΅Π΅ Π°Π²Ρ‚ΠΎΡ€ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠΊΠ°Π·Π°Π», Ρ‡Ρ‚ΠΎ простой, Π΄Π°ΠΆΠ΅ Π³Ρ€ΡƒΠ±Ρ‹ΠΉ статистичСский ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π΄Π°Π΅Ρ‚ мСньшСС количСство принятых Π·Π° спам ΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΡ…ΡΡ Ρ‚Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ сообщСний, Ρ‡Π΅ΠΌ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ слоТныС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠΈ Π½Π° основС сличСния с ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠΌ ΠΈΠ»ΠΈ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ, ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ письма. Unix-программистам ΠΏΡ€ΠΎΡ‰Π΅ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ соблазна искусных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊ сличСния с ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Π΅ΠΌ ΠΈΡ… ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΡƒΠ»ΡŒΡ‚ΡƒΡ€Π°Ρ… программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Ρ‚Π°ΠΊ привязаны ΠΊ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ K.I.S.S.

9.1.3. Π£Ρ‡Π΅Π±Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€: ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ мСтаклассов Π² fetchmail

Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° fetchmailconf(1), ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚ΠΎΡ€ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ, поставляСмая с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ fetchmail(1), содСрТит ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠ΅Ρ€Π΅Π΄ΠΎΠ²ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, управляСмой Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, написанной Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ языкС ΠΎΡ‡Π΅Π½ΡŒ высокого уровня.

Π’ октябрС 1997 Π³ΠΎΠ΄Π° сСрия вопросов Π² спискС рассылки ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ fetchmail продСмонстрировала Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ с Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‰ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΏΡ€ΠΈ создании ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² для fetchmail. Π’ Ρ„Π°ΠΉΠ»Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ простой классичСский для Unix свободный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ синтаксиса. Однако Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ нСприступно слоТным, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Π΅ записи POP3 ΠΈ IMAP Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΡƒΠ·Π»Π°Ρ…. НСсколько упрощСнная вСрсия ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° fetchmail ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 9.1.

ЦСль создания fetchmaikonf Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»Π°ΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ синтаксис ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Π° Π·Π° ΡΡ‚ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ, эргономичным GUI-интСрфСйсом с ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ Π²Ρ‹Π±ΠΎΡ€Π°, Π±Π΅Π³ΡƒΠ½ΠΊΠ°ΠΌΠΈ ΠΈ Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ для заполнСния. Однако Π² Π±Π΅Ρ‚Π°-вСрсии Π±Ρ‹Π»Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠ³Π»Π° Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, исходя ΠΈΠ· дСйствий, прСдпринятых ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π² GUI, Π½ΠΎ Π½Π΅ ΠΌΠΎΠ³Π»Π° ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 9.1. Бинтаксис Ρ„Π°ΠΉΠ»Π° fetchmailrc

set postmaster "esr"

set daemon 300


poll imap.ccil.org with proto IMAP and options no dns

 aka snark.thyrsus.com locke.ccil.org ccil.org

  user esr there is esr here

   options fetchall dropstatus warnings 3600


poll imap.netaxs.com with proto IMAP

 user "esr" there is esr here options dropstatus warnings 3600

Анализатор для синтаксиса ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° fetchmail являСтся довольно слоТным. ЀактичСски ΠΎΠ½ написан с использованиСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ yacc ΠΈ lex, Π΄Π²ΡƒΡ… классичСских инструмСнтов Unix для создания ΠΊΠΎΠ΄Π° синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° Π½Π° языкС Π‘. Π’Π½Π°Ρ‡Π°Π»Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ показалось, Ρ‡Ρ‚ΠΎ для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ fetchmailconf ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, понадобится воспроизвСсти Ρ‚ΠΎΡ‚ ΠΆΠ΅ слоТный синтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π² языкС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ fetchmailconf β€” Python.

Вакая Ρ‚Π°ΠΊΡ‚ΠΈΠΊΠ° выглядСла бСспСрспСктивной. Π”Π°ΠΆΠ΅ Ссли Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ объСм Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΎΡ‡Π΅Π½ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π²Π° синтаксичСских Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°, написанных Π½Π° Π΄Π²ΡƒΡ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… языках, Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ использованиС ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ. ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π² дальнСйшСм ΠΈΡ… ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ развития ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ языка Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ слоТно. Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π°Ρ€ΡƒΡˆΠ°Π» Π±Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ SPOT, описанноС Π² Π³Π»Π°Π²Π΅ 4.

На ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ врСмя Π°Π²Ρ‚ΠΎΡ€ Π±Ρ‹Π» поставлСн Π² Ρ‚ΡƒΠΏΠΈΠΊ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. Π Π°Π·Ρ€Π΅ΡˆΠΈΠ»ΠΎ Π΅Π΅ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° fetchmailconf ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ собствСнный синтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ fetchmail Π² качСствС Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π² fetchmail Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ --configdump, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволял Π±Ρ‹ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» .fetchmailrc ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π½Π° стандартный Π²Ρ‹Π²ΠΎΠ΄ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Python-ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°. Для ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ Ρ„Π°ΠΉΠ»Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ выглядСли Π±Ρ‹ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 9.2 (для экономии мСста Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Π½Π΅ связанныС с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ, ΠΎΠΏΡƒΡ‰Π΅Π½Ρ‹).

ОсновноС прСпятствиС Π±Ρ‹Π»ΠΎ ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Π½ΠΎ. Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python ΠΌΠΎΠ³ Π·Π°Ρ‚Π΅ΠΌ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ fetchmail --configdump ΠΈ ΠΏΡ€ΠΎΡ‡Π΅ΡΡ‚ΡŒ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΡƒΡŽ для fetchmailconf ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ ΠΊΠ°ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½ΠΎΠΉ "fetchmail".

Однако описанноС прСпятствиС Π±Ρ‹Π»ΠΎ Π½Π΅ послСдним. Π‘Ρ‹Π»ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ fetchmail ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ, Π½ΠΎ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π΅Π΅ Π² связанноС Π΄Π΅Ρ€Π΅Π²ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π’ Π΄Π°Π½Π½ΠΎΠΌ Π΄Π΅Ρ€Π΅Π²Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ 3 Π²ΠΈΠ΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²: Configuration (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ всю ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ), Site (ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· сСрвСров для опроса) ΠΈ User (ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅, связанныС с ΡƒΠ·Π»ΠΎΠΌ). Π€Π°ΠΉΠ» Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ описываСт 3 ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Site, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… связан с ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ.

Π”Π°Π½Π½Ρ‹Π΅ 3 класса ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΡƒΠΆΠ΅ сущСствовали Π² fetchmailconf. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΈΠΌΠ΅Π» ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ заставлял Π΅Π³ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° экран GUI-панСль рСдактирования для ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ своСго экзСмпляра Π΄Π°Π½Π½Ρ‹Ρ…. ПослСдняя ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° сводилась ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡŽ статичСских Π΄Π°Π½Π½Ρ‹Ρ… Π² Python-ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π΅ Π² Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 9.2. Π”Π°ΠΌΠΏ Python-структуры для ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ fetchmail

fetchmailrc = {

 'poll_interval':300,

 "logfile":None,

 "postmaster":"esr",

 'bouncemail':TRUE,

 "properties":None,

 'invisible':FALSE,

 'syslog' :FALSE,

 # List of server entries begins here

 # (НиТС начинаСтся список сСрвСров)

 'servers': [

   # Entry for site `imap.ccil.org' begins:

   # (Начало записи для ΡƒΠ·Π»Π° imap.ccil.org:)

   {

    "pollname":"imap.ccil.org",

    'active':TRUE,

    "via":None,

    "protocol":"IMAP",

    'port':0,

    'timeout':300,

    'dns':FALSE,

    "aka":["snark.thyrsus.com","locke.ccil.org","ccil.org"],

    'users': [

     {

      "remote":"esr",

      "password":"masked_one",

      'localnames':["esr"],

      'fetchall':TRUE,

      'keep':FALSE,

      'flush':FALSE,

      "mda":None,

      'limit':0,

      'warnings':3600,

     }

    ' ]

   }

  '

  # Entry for site `imap.netaxs.com' begins:

  # (Начало записи для ΡƒΠ·Π»Π° imap.netaxs.com:)

  {

   "pollname":"imap.netaxs.com",

   'active':TRUE,

   "via":None,

   "protocol":"IMAP",

   'port':0,

   'timeout':300,

   'dns':TRUE,

   "aka":None,

   'users': [

    {

     "remote":"esr",

     "password":"masked_two",

     'localnames':["esr"],

     'fetchall':FALSE,

     'keep':FALSE,

     'flush':FALSE,

     "mda":None,

     'limit':0,

     'warnings':3600,

    }

   ' ]

  }

  '

 ]

}

Π Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π»Π°ΡΡŒ идСя написания ΡΠ²ΡΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ уровня, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π» Π±Ρ‹ ΡΠ²Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ структурС всСх 3 классов ΠΈ использовал Π±Ρ‹ Π΄Π°Π½Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ для просмотра ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° ΠΏΡ€ΠΈ создании ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Однако данная идСя Π±Ρ‹Π»Π° ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ сущСствовала Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ добавлСния со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Π½ΠΎΠ²Ρ‹Ρ… Ρ‡Π»Π΅Π½ΠΎΠ² класса, ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ создания Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌ языкС. Если Π±Ρ‹ ΠΊΠΎΠ΄ создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π±Ρ‹Π» написан Ρ‚Π°ΠΊΠΈΠΌ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ ΠΏΡƒΡ‚Π΅ΠΌ, Ρ‚ΠΎ ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ Π±Ρ‹Π» Π±Ρ‹ Ρ…Ρ€ΡƒΠΏΠΊΠΈΠΌ ΠΈ склонным ΠΊ рассинхронизации ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ опрСдСлСния классов Π»ΠΈΠ±ΠΎ структуры ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°, Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΠΎΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ² --configdump. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ бСсконСчному появлСнию ошибок.

Π‘ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ способом Π±Ρ‹Π»ΠΎ Π±Ρ‹ использованиС созданиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, управляСмой Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Ρ‚.Π΅. ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π» Π±Ρ‹ Ρ„ΠΎΡ€ΠΌΡƒ ΠΈ Ρ‡Π»Π΅Π½Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°, ΠΎΠΏΡ€Π°ΡˆΠΈΠ²Π°Π» Π±Ρ‹ опрСдСлСния классов ΠΎΠ± ΠΈΡ… Ρ‡Π»Π΅Π½Π°Ρ…, Π° Π·Π°Ρ‚Π΅ΠΌ согласовывал Π±Ρ‹ ΠΎΠ±Π° Π½Π°Π±ΠΎΡ€Π°.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ с Lisp ΠΈ Java, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Π΄Π°Π½Π½ΡƒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΡƒ интроспСкциСй (introspection). Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках ΠΎΠ½Π° называСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ мСтаклассов (metaclass hacking) ΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, считаСтся "Ρ‡Π΅Ρ€Π½ΠΎΠΉ ΠΌΠ°Π³ΠΈΠ΅ΠΉ", понятной Ρ‚ΠΎΠ»ΡŒΠΊΠΎ "посвящСнным". Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ- ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языков данная ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ° Π½Π΅ поддСрТиваСтся Π²ΠΎΠΎΠ±Ρ‰Π΅, Π° Π² Ρ‚Π΅Ρ… языках, Π³Π΄Π΅ ΠΎΠ½Π° поддСрТиваСтся (срСди Π½ΠΈΡ… Perl ΠΈ Java), ΠΎΠ½Π° часто слоТна ΠΈ Π½Π΅Π½Π°Π΄Π΅ΠΆΠ½Π°. Однако Π² языкС Python срСдства интроспСкции ΠΈ программирования мСтаклассов ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ доступны.