Loading...
  Всячина ▼  
  Поиск ▼  
  Обратная связь ▼  
Гостевая книга @pager('Личное сообщение') Чат Почта




МакроСервер

О макросервере. Идея такая: Создать макропроцессор, который бы позволил некоторые часто повторяющиеся куски html, css, javascript, вынести в отдельные файлы. Причём сделать это как можно проще. Причём сделать это так, чтобы сайт мог храниться и на народе, и у меня дома без устновки какого бы то ни было софта.

Объясню, почему считаю это важным. Нормальное меню для страницы - уже половина дизайна сайта. Но если используется хостинг без поддержки скриптов, придётся это меню вручную вставлять в каждую страницу. То же относится к заголовкам html, путям в javascript, css...

Дальше - больше. Если представить, что при разработке страницы можно было бы указать для временно не работающей ссылки макрос <a href="URL" @disabled>@disabled</a>, для текста примера макрос @example('...')...

Чтобы было вот так...

Если бы можно было одной строчкой указать, что на сайте должна быть страничка с фотоальбомом из фотографий, лежащих в таком-то каталоге... Или просто страница с файлами какой-либо подпапки. Ведь такие оглавления можно создавать не прибегая к скриптам.

Почему не скрипты? Лично у меня нет никакого желания платить за хостинг сайта, который я сделал просто чтобы освоиться в интернете. Я мог бы поставить сайт у себя дома, но... Как-то нет желания устанавливать у себя SQL, Апач, тратить пару дней и ночей на изучение документации... Чтобы в итоге обнаружить, что у компьютера сдох блок питания, а сервер придётся переносить в другое место и снова повторять всю работу по установке и настройке.

А кроме того, простота... Мой сервер почти полностью написан за неделю, соответственно, разобраться в нём можно за час. Шутка. Для того, чтобы МакроСервер работал, в нём ВООБЩЕ НЕ НУЖНО РАЗБИРАТЬСЯ. 

Ну и кроме того... Не так много людей создают веб-серверы... И все они на одно лицо. Вы читали о том, почему размер гондол космической ракеты равен размеру двух лошадиных задниц? Очень поучительная история... Так вот весьма похожа история с Апачем, который, насколько мне не изменяет память, был создан с помощью прикручивания Си к http-серверу. Неудобно. Может быть близко и понятно сишникам, но для решения простейших задач неудобно.

Покажу, что я имею в виду простым примером. Как я уже сказал, вы можете использовать МакроСервер не разбираясь, поэтому просто можете использовать готовый шаблон (в архиве для скачивания соответствующий макрос @fdir), но если Вы хотите изменить этот шаблон, когда-нибудь придётся на него хотя бы раз взглянуть:

@header("@url","")
@dirinfo<p>
<table border=1>
<tr><td>Файл</td><td>Размер</td><td>Дата</td><td>Время</td><td>Описание</td></tr>
@items("@relpath/",'@fdiritem','@updir')
</table>
@footer

Я так понимаю, что не нужно иметь десять классов образования, чтобы понять, что здесь написано. В отличие от си-подобного синтаксиса апача...

Конечно, если не вникнуть в то, что это - html,  а @header, @footer и тому подобное - просто файлы, в которых хранятся части странички - и это покажется кому-то слишком сложным.

А теперь по пунктам. В файле @header - заголовок таблицы. Он же включает в себя и главное меню, описанное в отдельном файле и включённое в текст @header с помощью макроса @menu. В файле @footer - счётчики и тому подобные мелочи, распологающиеся внизу окна.

@dirinfo заменяется на файл "dirinfo", находящийся в текущем каталоге или на пустой текст, если такой файл не найден. А это позволяет использовать этот шаблон для разных каталогов и выводить разное содержание в зависимости от того, какая страница запрошена.

@items("@relpath/",'@fdiritem','@updir') - самый сложный макрос. Он собирает информацию обо всех файлах в каталоге @relpath/, для каждого файла генерирует html-код по шаблону @fdiritem, за исключением ссылки на верхний уровень. В последнем случае используется шаблон @updir.

Если поместить такой шаблон в отдельный файл, присвоить ему имя макроса (в примерах и настройках по умолчанию это @fdir), то в любом каталоге можно будет создать файл index.html с единственной строчкой @fdir, чтобы посетитель мог увидеть оглавление каталога. (Пример результата)

Чуть-чуть видоизменив шаблон, сохранив в другом файле и назначив ему другой макрос, получим результат другого вида, где будет видно не только размер, дату/время, но ещё и содержимое графических и видеофайлов.

Аналогичный макрос можно использовать для фотоальбома (пример), простой коллекции картинок (пример), музыки (это уж как-нибудь потом)... Самому файлу index.html при этом можно установить атрибут "скрытый", чтобы он не мешался в общем списке.

Для удобной навигации по каталогам можно использовать макрос @tree. При этом каталоги отображаются как в "проводнике", с деревом каталогов в левой части окна и содержимым выбранного каталога в правой. (Пример результата)

Тут есть несколько "но". Подстановка макросов из файлов производится в том порядке, в каком они указаны в списке макросов. Только после этого подставляются макросы items/tree. Если макросы встречаются в самом тексте страницы, можно, например, заменить символ @ в тексте на &at;. Не волнуйтесь, поймёт ли эту строку браузер, МакроСервер обработает эту подстановку сам после всех преобразований страницы.

Параметры макросам допустимо указывать как в кавычках, так и в апострофах ("'" и "`"). Если этого мало - пишите, сделаем.

Не знаю, кому как, а мне этого синтаксиса было вполне достаточно, чтобы создать сайт, которым я в данный момент абсолютно доволен.

Итак, возможности сервера в настоящий момент

МакроСервер можно запускать в любой момент. Можно поместить ссылку в автозагрузку. Никакой инсталляции не нужно, нужно лишь открыть в трее окно "настройки", указать путь к файлам сервера на локальном компьютере, поставить галочку "включить" - и всё. Можно нажимать кнопку "открыть" и в браузере откроется http://localhost (с учётом номера порта), где Вы сразу же увидите сайт в том виде, в каком его увидят посетители. Можно свернуть окно сервера в трей, редактировать исходный текст страниц и сразу же просматривать результат в браузере без заливки на хост.

Для заливки файлов на хост, написан плагин для Total Commander, позволяющий представить структуру сайта в виде архива, из которого можно копировать файлы (уже не содержащие макросов) как на диск, так и прямо на ftp, открытый в соседней панели.

Вы также можете вообще не заливать файлы на хост. А зачем?  Если у Вас круглосуточно включен компьютер - просто откройте в фаерволе 80-й порт, бесплатно зарегистрируйте себе доменное имя где-нибудь на dyndns.com, причём это можно сделать даже для динамического IP... И всё. Сайт, который Вы только что отлаживали доступен всему миру.  А если Вы просто хотите выложить пару mp3-файлов для своей тёти, у которой на работе есть интернет, просто продиктуйте ей свой IP (Ваш IP - 54.226.58.177), чтобы она набрала его в браузере в виде ссылки http://54.226.58.177. Не нужно вручную посылать файлы, как в ICQ, не нужно выкладывать на рапиду, а потом ждать и вводить циферки...

Да, вот так просто: поместить в каталог, указанный в настройках МакроСервера всё, что Вам нужно выложить в интернет, создать там же index.html (например, написав в нём одну строчку @fdir, шаблон прилагается), убедиться, что сервер активен и слушает порт (галочка в основных настройках, никаких предупреждений на вкладке "Лог") - и всё. Для абсолютной уверенности можно воспользоваться кнопкой на вкладке "Порт", чтобы прозвонить используемый порт из интернета.

Кроме того, можно выкладывать в сеть свои фотографии и видео (gif, jpeg, jpg, jpe, png, bmp, ico, avi, mpg, mpeg, divx, ogm, mkv, m2v, dat, vob, asf, wmv, flv) с превьюшками в виде thumbnails, то есть уменьшенных фотографий размером 65*65. Для их генерации используется алгоритм, более грамотный, чем обычный StretchDraw. В результате уменьшенные копии картинок не "пестрят". Чтобы воспользоваться этой возможностью, достаточно в каталоге с картинками создать файл index.html с единственной строчкой внутри: @thumbnails. И в случае с @fdir, и в случае с @thumbnails, к каждому файлу можно добавить описание (Ctrl-Z в Total Commander или Far), которое будет видно посетителям сайта.

Макросервер поддерживает режим "Мультидомен", позволяющий обратиться к разным сайтам на одном порту/IP. Для этого достаточно установить флажок "мультидомен" и разместить файлы, относящиеся к разным сайтам, в подкаталогах, имена которых совпадают с именами хостов.

В целях более удобной отладки по умолчанию макросы перечитываются при каждом обращении к серверу, но если Вы сами предоставляете доступ к своему сайту из интернета, рекомендую выключить эту опцию, чтобы макросы читались только при старте сервера. Впрочем, как я позже подсчитал, эту опцию имеет смысл выключать только при милионах запросов в сутки. 

Имейте в виду, ваш глобальный IP (54.226.58.177) может отличаться от IP вашего компьютера. В этом случае при обращении к сайту по его домену (например, бесплатно полученному на dyndns.com, как мой, ) зарегистрированному на глобальный IP, Вы можете попадать в настройки роутера, даже если в нём и настроено перенаправление портов при обращении извне. В этом случае можете открыть в блокноте файл C:\WINDOWS\system32\drivers\etc\hosts, и добавить туда строчку вида

127.0.0.1 mysite.dyndns.com

Ну или при обращении к сайту с собственного же компьютера использовать домен http://localhost, который прописан в этом файле по умолчанию. (Если выключен режим "мультидомен".)

Кроме того, у Вас может быть закрыт 80 порт.  В этом случае, решение такое же, как и при участии в пиринговых сетях. Разница только в том, что для проверки доступности вашего сайта извне можно использовать любую службу онлайн-проверки сайтов. Будь то бесплатный скрипт анализа ключевых слов сайта (http://www.promolab.ru/free/) или опять же бесплатный сервис проверки сайтов на вирусы http://online.drweb.com/?url=1. А лучше использовать кнопку на вкладке "Порт", использующую тот же сервис, что и µTorrent. Если при такой проверке рядом с кнопкой не появится надпись "Установлено входящее соединение - порт доступен", значит доступа к МакроСерверу извне нет.  На этот случай уже давно написанная инструкция здесь.

P.S. Специально для тестирования "домашних" серверов создано первое в Интернете зеркало.  Можете посмотреться в него прямо сейчас, если, конечно, на Вашем компьютере запущен сервер на http-порту (80).

P.P.S. Кроме того, для регулярного тестирования доступности локальных TCP-серверов вообще создана специальная утилита, использующая сервис µTorrent.

Теперь о типах файлов

На вкладке "Расширения" указывается, какие файлы МакроСервер вообще может или не может отдавать посетителям. Также указано, в каких файлах надо производить макроподстановки. Помимо HTML по умолчанию указаны CSS и JS. Кроме того указано, какие файлы Вы предлагаете посетителям открывать в браузере, а какие - в отдельном окне как файл определённого типа.

Кроме того, указываются расширения графических и видеофайлов, для которых МакроСервер может генерировать картинки предпросмотра (thumbnails).

О передаче файлов

МакроСервер поддерживает докачку. Я убеждён, что на домашнем компьютере заниматься раздачей гигабайтных файлов по http не имеет абсолютно никакого смысла. Больше того, раздача таких файлов и по ftp не имеет абсолютно никакого смысла. Трудно сказать, есть ли вообще смысл в раздаче таких файлов, но если мне когда-нибудь это понадобится, я использую eMule или µTorrent. (Тем более, что обыкновенный µTorrent при желании может выступать и в роли трекера, что позволяет за считанные секунды выложить в сеть файл или группу файлов любого размера.) Однако, МакроСервер поддерживает докачку и многопоточное скачивание.

Заливка файлов не предусмотрена вообще, по крайней мере пока. Ну за исключением приёма коротких личных сообщений.

Скорость обработки файлов с макросами позволяет обойтись без кэширования. Пусть вас не смущают цифры внизу страницы, благодаря нетребовательности МакроСервера, этот сайт работает на антикварном компьютере,  хотя вообще узким местом домашнего сервера является пропускная способность канала, а не производительность (даже на антикварном компьютере).

Для всех файлов выдаётся корректная дата модификации файла, производится обработка If-Modified-Since, так что браузеры могут не обновлять не изменившиеся файлы. В ближайшее время (неделю, время пошло с 7 декабря ) будет написана процедура кэширования файлов с макросами, с целью выдать дату реального изменения результата генерации страницы, а не её исходного текста.

Что касается ссылок, МакроСервер понимает русский язык, но использовать русские буквы и пробелы в ссылках на своих сайтах наверное ещё рано. Юниксоиды ругаются. Тем не менее, одинаково работают и http://anikvn.ru/Files/%D4%EE%F2%EA%E8/, и http://anikvn.ru/Files/Фотки/. Однако, предпочтителен наверное всё-таки первый вариант. Второй, как я понимаю, поддерживается только под Windows, да ещё, возможно, и не всеми браузерами. Лучше использовать не кодированные ссылки только в качестве title. А слоги "Рё" и "РЁ" в UTF8 вообще представляют одну букву: пример.  Поэтому, раз уж UTF8 используется, не используйте большую букву "Р" перед "ё". 

Вообще, МакроСервер, корректно работает с русскими буквами в названии файлов. При создании ссылок на такие файлы, МакроСервер их кодирует (URLEncode), а при отдаче таких файлов, ответы сервера снабжаются заголовками filename с указанием исходного имени. Это позволяет посетителям сохранять файлы с сервера под исходными именами, не вводя имя вручную. К сожалению, до сих пор ещё некоторые браузеры заменяют пробелы на подчёркивания, но это всё равно лучше, чем вручную транслитерировать имена выкладываемых файлов или отдавать их пользователям под трудночитаемыми именами. Например, попробуйте сохранить файл: Анимированная проекция тессеракта на трёхмерное пространство.gif . Учтите, некоторые хостинги, вроде narod.ru вообще не позволяют заливать файлы с русскими буквами (и далеко не только) в названиях... Но и в этом случае русские буквы кодируются URLEncode при заливке файлов на хост через плагин для Total Commander-а.

Регистр символов в ссылках (именах файлов), как это принято в Windows, игнорируется.

Теперь о гарантиях и безопасности.

Во-первых, сервер не выполняет никаких скриптов. Он не запускает ни единой команды, ни присланной извне, ни взятой из html. Он абсолютно ничего не делает с операционной системой, никаких dll, ссылок... Все настройки сохраняются в специальный файл в каталоге с программой.

Файлы, к которым предоставляется доступ, предполагается хранить отдельно. Все обращения к файлам внутри сервера производятся с помощью относительных путей (без использования /../ и /./ в ссылках). То есть если Вы не укажете в качестве корневого каталога путь "c:/", доступ к личным файлам будет абсолютно невозможен. (В отличие от Апача или ISS.) Ещё раз: АБСОЛЮТНО невозможен.

Если Вы не хотите предоставлять доступ к файлам определённого типа (например, к шаблонам) - можно указать исключения.

МакроСервер при доступе к файлам придерживается такой политики: если ссылка неправильная - отказать в доступе без подробных объяснений. Если заблокировано расширение (тип файла) - отказать с объяснением. Если файл не найден - честно об этом заявить. Если запрошен каталог или index.html в каталоге, то оглавление считается найденным только если в данном каталоге существует index.html. В противном случае получить доступ к оглавлению каталога невозможно. Если же index.html есть, то возвращается он. При этом в index.html может быть как обычная страница, так и оглавление, из которого будут исключены все скрытые файлы, а также каталоги без index.html.

Никакие файлы не используются в качестве шаблонов, если это не указано непосредственно в настройках программы. Один макрос - одно имя файла. Наличие файлов проверяется при запуске сервера (или при каждом запросе, если поставлена галочка "перечитывать").

Особняком стоит descript.ion и dirinfo. МакроСервер считает, что в них хранится информация, относящаяся к запрашиваемым файлам. То есть Вы можете запретить обращение к этим файлам по прямым ссылкам, и они не будут доступны для скачивания, но информация из них будет использоваться для подстановки макросов @dirinfo и @description. Если, конечно, эти макросы используются в шаблонах.

МакроСервер не открывает вообще никакие файлы на запись, за исключением указанного Вами файла лога и файла сообщений, которые МакроСервер может получать для Вас лично или для Вашей гостевой книги (пока реализован приём только личных сообщений).

Что же касается безопасности в плане целенаправленных DDoS атак, то в первую очередь Сервер разрабатывался всё-таки как возможность отлаживать сайт, который будет залит по ftp на narod.ru... И пока я не предполагаю никаких действий по блокировке атакующих. Поэтому если Вы даже в Интернете умудрились нажить себе врагов, которые, причём, могут гадить не только болтовнёй, но и активными действиями, ну не знаю... Пишите @pager('в личку'), приделаю банилку по IP. 

По поводу эксплойтоустойчивости. В отличие от Апача и ISS, которые не одну неделю нужно настраивать прежде чем решиться открыть порт, МакроСервер можно запускать сразу же после распаковки архива. Там нечего настраивать. Там нет никаких "опасных" опций. МакроСервер вообще не производит никаких опасных операций. Он "по умолчанию" настроен так, чтобы модифицируемые файлы (настройки, лог, данные пейджера, кэш иконок и thumbnails) сохранялись отдельно от данных, передаваемых в интернет. И я не рекомендую Вам сваливать всё в один каталог и назначать его в качестве корневого. В остальном МакроСервер безопасен. Напоминаю, если уж у Вас одновременно есть и windows, и сетевая карта, то Вам необходимо иметь одновременно и ежедневно обновляемый антивирус, и фаервол. Правда МакроСервера это уже не касается, это касается дырявости windows и очень многих программ, в число которых, надеюсь, МакроСервер не попадёт никогда. 

По поводу планов

Планирую сделать нормальную навигацию по файловым каталогам (сделано). В данный момент это просто списки файлов или thumbnails. Но написав соответствующий шаблон можно сделать любую навигацию, хоть деревья файлов, хоть thumbnails во весь экран, хоть полосу с выбором картинки, которая будет показана в основном окне... Если кто-нибудь напишет интересный макрос (пусть даже для его работы нужно будет доработать МакроСервер) - @pager('присылайте').

Планирую сделать возможность вести базы сообщений. В данный момент сообщения просто складываются в один файл... Легче лёгкого сделать так, чтобы они разделялись каким-нибудь шаблоном @message("Вася","21.04.07","На ту же тему","vasya@mаil.ru"). Ещё интереснее будет возможность складывать сообщения в общую базу, по которой можно будет осуществлять поиск в любых пределах. Для организации форума на 10-20 человек этого более чем. Вообще есть более далёкие планы, но тут МакроСервер скорее средство, чем цель.

Планирую также в ближайшем будущем сделать свой собственный счётчик. Чтобы я мог у себя дома узнавать о каждом посетителе моего же сайта на narod.ru.

С целью понять: а кто вообще те пять посетителей в день, что на него заходят, роботы или кто...  И откуда. Может быть где-то на мой сайт стоят ссылки, которые уже давно не работают, кто-то ищет то, чего уже нет, ну в общем, просто любопытно увидеть общую картину.  Проще разобраться в логе собственного счётчика, чем гадать, что означают графики различных сервисов, которые к тому же хотят денег за подробную информацию.

Денег за МакроСервер я получить даже не надеюсь, какие деньги могут быть у того, кто ищет альтернативу размещению сайта на бесплатном хостинге?  Тем не менее, прошу свято чтить авторское право, в том смысле, что я не хочу, чтобы где-то, где нет даже ссылки на мой сайт, лежали устаревшие версии. Если же Вам понравилась идея и её реализация и Вам вдруг захотелось поделиться открытием - ссылки на эту страницу будет вполне достаточно и я буду Вам признателен. 

Возможные проблемы:

  1. Программа не закрывается во время работы хотя бы одного потока генерации страниц и передачи данных. По этой же причине может не сработать перечитывание макросов (вместо этого в логе появится сообщение "Сервер занят"). Но иногда соединение обрывается и до таймаута программу не закрыть. Можно попытаться деактивировать сервер сняв галочку "включить". Если и это не поможет, в этом (и только в этом) случае закрывайте программу при нажатом шифте. Хотя можно и подождать: вдруг кто-то именно в этот момент докачивает пятидесятимегабайтный файл по модему... 
  2. При открытии каталога с thumbnails, возможны некоторые тормоза, когда сразу десяток процессов в памяти преобразовывают мегабайтные картинки в килобайтные. Поэтому настоятельно рекомендуется первый визит на соответствующую страничку сделать самостоятельно. Прокэшированная страничка ничуть не подтормаживает. Кэш (при корректном завершении программы) сохраняется в файл MacroServer.cache. Пути используются относительные, так что при изменении основного каталога и сохранении структуры сайта, перекешировать не обязательно. Поверьте, динамическое создание thumbnails - не очень большая проблема, видели бы вы, на каком древнем компьютере работает этот сайт - долго смеялись бы. 
  3. Иконки, генерируемые макросом @icons создаются из системных, 16х16, truecolor. То есть если на сервере не установлен Офис, то и иконки doc/xls не будут отличаться от стандартных. Можно установить какой-нибудь IconTweaker, например, упоминавшийся у меня на сайте. Собственно, именно он у меня на сервере и стоит. Можно также использовать @largeicon, чтобы иконки были 32х32. Планирую сделать сопоставление стандартных иконок стандартным типам файлов, но вот беда - стандартных иконок для стандартных типов файлов у меня нет, а искать лень. 
  4. Thumbnails вписываются в квадрат 65х65 с сохранением пропорций картинки. Они генерируются для jpeg, bmp, gif, png и видеофайлов (*.avi, *.mpg, *.mpeg, *.divx, *.ogm, *.mkv, *.m2v, *.dat, *.vob, *.asf, *.wmv, *.flv). Для того, чтобы картинки генерировались для видеофайлов, должны быть установлены соответствующие кодеки. Иначе вместо картинки будет генерироваться иконка 32х32.
  5. В случае ошибок с синтаксисом первое, что нужно сделать - это перечитать макросы. Если не помогло - убедиться, что параметры указываются в кавычках. Даже если текстом параметра является какой-либо макрос. Если и это не помогло, убедиться, что где-то внутри параметра не используется таких же кавычек. Убедиться, что макросы, которые должны подставляться первыми, не находятся в конце списка макросов. Убедиться, что расширения всех запрашиваемых браузером файлов разрешены в настройках МакроСервера. Может помочь вкладка лога. Убедитесь, что МакроСервер запущен.  Убедитесь, что ваш браузер обращается именно к МакроСерверу (на http://localhost, а не просто читает html с диска. Извините, если пишу очевидные вещи, но год назад я не знал, ни что такое IP, ни что такое порт, ни что такое HTTP. 
  6. Некоторые ResponseNo 500 вызваны специальными проверками на сервере. В интернет (в браузер) сообщения об ошибке не попадают, но в лог записываются, так что смотрите расшифровку там.
  7. Если и это не помогает, @pager('спросите у меня').

МакроСервер написан недавно. Поэтому возможны невыловленные глюки. Впрочем, он отлаживался с полной нагрузкой на двух компьютерах с разными операционными системами довольно продолжительное время. На нём пару дней один явно сильно загруженный рабочими обязанностями человек часами просматривал кучи фотографий. По серверу уже не первую неделю активно роются поисковые роботы, а также сюда регулярно заходят по ссылкам и с поисковиков. Выловлено два серьёзных глюка, приводивших к зависанию МакроСервера. Первый - зацикливание генерации страницы при использовании макроса в самом себе. Второй - взаимная блокировка двух процессов критическими секциями (при попытке отключить запись в лог сообщений о соединении с собственного IP). В первом случае я, как и всякий программист, предполагал, что такого никогда не произойдёт. Во втором - просто не понял, как работают критические секции (теперь думаю,  что понял). Оба глюка исправлены и других пока не наблюдается.

Со своей стороны я сделал всё возможное, чтобы не допустить более серьёзных ошибок. Включая проверки переполнения, диапазонов, контроль выделения-освобождения памяти. Все сообщения об ошибках должны заноситься в лог, так что если что-то пойдёт не так - это можно заметить. Больше того, МакроСервер за время работы не теряет ни одного байта динамически распределяемой памяти. Независимо от режима работы. Пришлось для этого даже перелопатить пару сторонних библиотек, найти и исправить ошибки в них. 

Надо также отметить, что при написании МакроСервера не использовалось такой кривизны как "язык невысокого уровня Си". Я имею в виду ущербную сишную идеологию, которой мы обязаны большей частью эксплойтов. Поэтому лично у меня нет сомнений в надёжности МакроСервера в плане безопасности (несанкционированного исполнения программного кода, доступа к конфиденциальной информации). А кроме того МакроСервер написан в расчёте на неподготовленного пользователя, не желающего вникать в настройку http-сервера и шаблоны страниц. Цель, на мой взгляд, достигнута.


Ссылки:

  1. Описание интерфейса
  2. Описание макросов
  3. Плагин для Total Commander
  4. Скачать

А это для поисковиков: здесь описан самый лучший мега-пупер замечательный HTTP сервер под Windows, Винду, win XP, а так же под окна, надёжный безглючный без глюков, а так же как его настроить. Сам не похвалишь - никто не похвалит. 

Создан: 25 Дек 2015, 23:10


Изменён: Сб, 08 дек 2018, 10:08:31+0:00 МСК

Сайт работает на домашнем компьютере под управлением MacroServer

Время, затраченное на создание страницы в секундах — 0,02
с 7 апреля 2007, 0:06+0:00 МСК и постоянно обновляется