Ru-Board.club
← Вернуться в раздел «Программы»

» SciTE - Open Source Text Editor for Windows & Linux

Автор: TymurGubayev
Дата сообщения: 18.09.2009 10:08
Real Root
я когда-то писал на Луа перекодировщик как модуль.
Понимает win, dos, koi8r и русский utf8
И плюс одна специфическая кодировка для телнета: win с большой Я.
Ссылка: http://luams.googlecode.com/svn/trunk/libs_l/encode.lua
пользоваться так:
require 'encode'
print( encode('somestringin WIN', 'win', 'dos') )

Да, оно требует lpeg, но только для utf, емнип.
UPD: Нет, не так. Я переделал под lpeg, и utf будет только с ним работать. Но если utf не нужен, то несложно вернуть назад, старый код просто закомментирован: 17-23 строки
Автор: Real Root
Дата сообщения: 18.09.2009 12:35
TymurGubayev

Цитата:
require 'encode'
print( encode('somestringin WIN', 'win', 'dos') )

Я так и не понял, как его подключить к меню tools.
А точнее заменить recode.js ра encode.lua

Пробовал так (по прмеру вызова других скриптов):

Код: command.parent.21.*=21
command.name.21.*=OEM 866 #2
command.21.*=dofile "$(SciteDefaultHome)\tools\encode.lua" win dos
command.mode.21.*=subsystem:lua,savebefore:no
Автор: mozers
Дата сообщения: 18.09.2009 15:11
ALeXkRU перевел последние новшества SciTE.
Прошу всех кто соображает внести свои коррективы до публикации в сборке.

Цитата:
Release 2.01
Released on 19 August 2009.

Версия 2.01 от 19 августа 2009 г.


Fix to positioning rectangular paste when viewing line ends.
Исправлено размещение прямоугольной области при вставке в конце просматриваемой строки.

Don't insert new lines and indentation for line ends at end of rectangular paste.
Не вставляются новые строки и отступы для концов строки в конце прямоугольной вставки.

When not in additional selection typing mode, cutting a rectangular selection removes all of the selected text.
(!!) Когда в режиме ввода нет дополнительного выделения, вырезание прямоугольного выделения удаляет весь выделенный текст.

Rectangular selections are copied to the clipboard in document order, not in the order of selection.
Прямоугольные выделения копировались в буфер обмена в порядке размещения в тексте, а не в порядке выбора.

SCI_SETCURRENTPOS and SCI_SETANCHOR work in rectangular mode.
SCI_SETCURRENTPOS и SCI_SETANCHOR работают в режиме прямоугольного выделения.

On GTK+, drag and drop to a later position in the document now drops at the position.
В GTK+ перетаскивание в более позднюю позицию документа теперь вставляется в указанное место.

Fix bug where missing property did not use default value.
Исправлена ошибка, при которой для пустых параметров не использовались значения по умолчанию.


Release 2.0
Released on 11 August 2009.

Версия 2.00 от 11 августа 2009 г.


Multiple pieces of text can be selected simultaneously by holding control whil dragging the mouse. Typing, backspace and delete may affect all selections together.
С помощью мыши и клавиши Ctrl можно выделить нескольких несмежных частей текста. Ввод символов, нажатие на BackSpace или Delete может действовать одновременно на все выделенные области.

Virtual space allows selecting beyond the last character on a line.
Виртуальные пробелы позволяют устанавливать каретку правее последнего символа в строке.

SciTE on GTK+ path bar is now optional and defaults to off.
В GTK+ индикатор текущего пути (path bar) теперь опционален и по умолчанию выключен.

MagikSF lexer recognises numbers correctly.
Лексер MagikSF корректно распознает числа.

Folding of Python comments and blank lines improved. Bug #210240.
Улучшена свертка пустых строк и комментариев в Python. (ошибка #210240)

Bug fixed where background colour of last character in document leaked past that character.
Исправлена ошибка с исчезновением фонового цвета последнего символа в документе.

Crash fixed when adding marker beyond last line in document. Bug #2830307.
Ликвидировано падение SciTE при добавлении маркера ниже последней строки в документе. (ошибка #2830307)

Resource leak fixed in SciTE for Windows when printing fails. Bug #2816524.
Ликвидирована утечка ресурсов в SciTE для Windows при неудачной печати документа. (ошибка #2816524)

Bug fixed on Windows where the system caret was destroyed during destruction when another window was using the system caret. Bug #2830223.
Исправлена ошибка в Windows, при которой системная каретка (курсор) уничтожалась во время уничтожения, если другое окно использует системную каретку. (ошибка #2830223)

Bug fixed where indentation guides were drawn over text when the indentation used a style with a different space width to the default style.
Исправлена ошибка, при которой направляющая линия отступов рисовалась поверх текста, если отступ использовал стиль с другой шириной просветов, чем в стиле по умолчанию.

SciTE bug fixed where box comment added a bare line feed rather than the chosen line end. Bug #2818104.
В SciTE исправлена ошибка, при которой блок комментариев добавлял пустой перевод строки вместо конца выбранной строки. (ошибка #2818104)

Reverted fix that led to wrapping whole document when displaying the first line of the document.
Восстановлено исправление, приводившее к свертке всего документа при отображении первой строки документа.

Export to LaTeX in SciTE fixed to work in more cases and not use as much space. Bug #1286548.
При экспорте из SciTE в LaTeX исправлена работа в большинстве случаев и не используется столько места. (ошибка #1286548)

Bug fixed where EN_CHANGE notification was sent when performing a paste operation in a read-only document. Bug #2825485.
Исправлена ошибка, когда уведомление EN_CHANGE отправлялось при выполнении вставки в документ в режиме "только для чтения". (ошибка #2825485)

Refactored code so that Scintilla exposes less of its internal implementation and uses the C++ standard library for some basic collections. Projects that linked to Scintilla's SString or PropSet classes should copy this code from a previous version of Scintilla or from SciTE.
Переработан код Scintilla, чтобы снизить влияние ее внутренней реализации и использовать стандартную библиотеку C++ для некоторых базовых коллекций. В проекты, использующие классы SString или PropSet в Scintilla, необходимо скопировать этот код из предыдущих версий Scintilla или SciTE.


Добавлено:
chitatel2
Цитата:
После отбора файлов в Favorites, переменная favorites_files остается пустой
...
Отобранные файлы в переменной появляются только после выхода из SciTe (файлы должны остаться в Favorites) и последующего его запуска
...
в окне Favorites, появляются продублированные файлы из предыдущего запуска.
Никак не врублюсь как это у тебя получилось У меня все работает как надо...
Автор: Real Root
Дата сообщения: 19.09.2009 09:50
Кстати товарищи, а можно ли как-нибудь SciTE научить определять кодировку при открытии файла. Есть много тектовых редакторов, которые при открытии файлов в 866 кодировке отображают ее соответствующе. Есть ли эта возможность в SciTE?
Автор: mozers
Дата сообщения: 20.09.2009 16:27
Real Root
Вот, доработал маленько CodePage.lua : [more]
Код: --[[--------------------------------------------------
CodePage.lua
Authors: YuriNB, VladVRO, mozers™
Version: 2.1
------------------------------------------------------
Гибрид 2х скриптов:
win1251 to cp866 keyboard mapper (YuriNB icq#2614215)
Переключатель кодировки текущего ввода и отображения win1251/dos866
Одновременно переключается кодировка окна консоли
и
codepage.lua (VladVRO)
Показ текущей кодировки в статусной строке.

Кроме того, скрипт пытается отличить кодировку cp866 от win1251 при открытии файла или при переключении на него.
Если это удается, то происходит автоматическое переключение отображения и ввода.
------------------------------------------------------
Connection:
In file SciTEStartup.lua add a line:
dofile (props["SciteDefaultHome"].."\\tools\\CodePage.lua")
Set in a file .properties:
command.name.29.*=DOS Mode (cp866)
command.29.*=change_codepage_ru
command.checked.29.*=$(code.page.866)
command.mode.29.*=subsystem:lua,savebefore:no
--]]--------------------------------------------------

local function UpdateToolBar() -- лучшего способа обновить тулбар не нашел
scite.MenuCommand(IDM_TOGGLEOUTPUT)
scite.MenuCommand(IDM_TOGGLEOUTPUT)
end

local function
UpdateStatusCodePage(mode)
props["code.page.866"]='0'
if mode == IDM_ENCODING_UCS2BE then
props["code.page.name"]='UCS-2 BE'
elseif mode == IDM_ENCODING_UCS2LE then
props["code.page.name"]='UCS-2 LE'
elseif mode == IDM_ENCODING_UTF8 then
props["code.page.name"]='UTF-8 BOM'
elseif mode == IDM_ENCODING_UCOOKIE then
props["code.page.name"]='UTF-8'
else
if
props["character.set"]=='255' then
props["code.page.name"]='DOS-866'
props["code.page.866"]='1'
elseif props["character.set"]=='204' then
props["code.page.name"]='WIN-1251'
elseif tonumber(props["character.set"])==0 then
props["code.page.name"]='CP1252'
elseif props["character.set"]=='238' then
props["code.page.name"]='CP1250'
elseif props["character.set"]=='161' then
props["code.page.name"]='CP1253'
elseif props["character.set"]=='162' then
props["code.page.name"]='CP1254'
else
props["code.page.name"]='???'
end
end
UpdateToolBar()
scite.UpdateStatusBar()
end

local function
CharsetDetect(mode)
function CharsetDOS()
return editor:findtext("[\128-\191][\128-\191][\128-\191]", SCFIND_REGEXP, 0)
end
if
mode == IDM_ENCODING_DEFAULT then
if
(props["character.set"]=='204' and CharsetDOS())
or (props["character.set"]=='255' and not CharsetDOS()) then
change_codepage_ru()
end
end
end

-- Добавляем свой обработчик события OnSwitchFile
local old_OnSwitchFile = OnSwitchFile
function OnSwitchFile(file)
local result
if old_OnSwitchFile then result = old_OnSwitchFile(file) end
CharsetDetect(tonumber(props["editor.unicode.mode"]))
UpdateStatusCodePage(tonumber(props["editor.unicode.mode"]))
return result
end

-- Добавляем свой обработчик события OnOpen
local old_OnOpen = OnOpen
function OnOpen(file)
local result
if old_OnOpen then result = old_OnOpen(file) end
CharsetDetect(tonumber(props["editor.unicode.mode"]))
UpdateStatusCodePage(tonumber(props["editor.unicode.mode"]))
return result
end

-- Добавляем свой обработчик события OnMenuCommand
local old_OnMenuCommand = OnMenuCommand
function OnMenuCommand(cmd, source)
local result
if old_OnMenuCommand then result = old_OnMenuCommand(cmd, source) end
if
cmd > 149 and cmd < 155 then -- IDM_ENCODING_DEFAULT, IDM_ENCODING_UCS2BE, IDM_ENCODING_UCS2LE, IDM_ENCODING_UTF8, IDM_ENCODING_UCOOKIE
UpdateStatusCodePage(cmd)
end
return
result
end

-------------------------------------------------------------
-- win1251 to cp866 keyboard mapper
-------------------------------------------------------------

function change_codepage_ru()
scite.MenuCommand(IDM_ENCODING_DEFAULT)
if props["character.set"]=='255' then
props["character.set"]='204'
else
props["character.set"]='255'
end
scite.Perform('reloadproperties:')
UpdateStatusCodePage()
end

local
charset1251to866 =
{
[
168]=240, --Ё
[184]=241, --ё
[185]=252, --№
[192]=128,[193]=129,[194]=130,[195]=131,[196]=132,
[
197]=133,[198]=134,[199]=135,[200]=136,[201]=137,
[
202]=138,[203]=139,[204]=140,[205]=141,[206]=142,
[
207]=143,[208]=144,[209]=145,[210]=146,[211]=147,
[
212]=148,[213]=149,[214]=150,[215]=151,[216]=152,
[
217]=153,[218]=154,[219]=155,[220]=156,[221]=157,
[
222]=158,[223]=159,[224]=160,[225]=161,[226]=162,
[
227]=163,[228]=164,[229]=165,[230]=166,[231]=167,
[
232]=168,[233]=169,[234]=170,[235]=171,[236]=172,
[
237]=173,[238]=174,[239]=175,[240]=224,[241]=225,
[
242]=226,[243]=227,[244]=228,[245]=229,[246]=230,
[
247]=231,[248]=232,[249]=233,[250]=234,[251]=235,
[
252]=236,[253]=237,[254]=238,[255]=239
}

local function Win2DOS(charAdded)
local a1=string.byte(charAdded)
if charset1251to866[a1] ~= nil then
local
pos = editor.CurrentPos
editor:SetSel(pos, pos - 1)
editor:ReplaceSel( string.char( charset1251to866[a1] ) )
end
end

-- Добавляем свой обработчик события OnChar
local old_OnChar = OnChar
function OnChar(char)
local result
if old_OnChar then result = old_OnChar(char) end
if
props["character.set"]=='255' then
Win2DOS(char)
end
return
result
end
Автор: entada
Дата сообщения: 22.09.2009 11:16
Пожалуйста, подскажите новичку, как поставить сборку Ru-Board под линукс [InfraLinux, почти Ubuntu]? Из репозитория скачалась стандарная версия...
Автор: Real Root
Дата сообщения: 22.09.2009 13:56
Товарищи.
Продолжаю пилить SciTE Ru-Board напильником
Можно ли как нибудь ввести различные комментарии для ini, inf и properties файлов.
Тут по всей видимости все программисты. А я сисадмин
Так вот, для inf и ini файлов символом комментария является ;
А для properties - #
Но, в настройках others.properties есть только общая опция комментария для всех файлов.
Как разделить символ комментария, чтоб для каждого типа файла, символ был бы свой?
Автор: mozers
Дата сообщения: 22.09.2009 19:13
entada
На SVN лежат исходники, которые компилятся под gtk.
Работает. Правда, результат будет очень похож на оригинальный SciTE, поскольку многие фичи SciTE-Ru написаны только для Виндов.
Frank Wunderlich нашу сборку периодически переделывает с тем чтобы работать с ней в gtk...

Real Root
Цитата:
Можно ли как нибудь ввести различные комментарии для ini, inf и properties файлов.
Нет, поскольку все эти расширения обрабатываются одним и тем же лексером - props.
Автор: vladvro
Дата сообщения: 22.09.2009 19:56
Real Root, mozers

Цитата:
> Можно ли как нибудь ввести различные комментарии для ini, inf и properties файлов.
Нет, поскольку все эти расширения обрабатываются одним и тем же лексером - props.

можно попробовать повесить на открытие файла и смену буфера обработчик, кторый будет менять это значение в зависимости от расширения открываемого файла.
Автор: Real Root
Дата сообщения: 22.09.2009 23:07
vladvro
можно попробовать повесить на открытие файла и смену буфера обработчик, кторый будет менять это значение в зависимости от расширения открываемого файла.
А как это сделать?
Или можно разделить other.properties на 2 файла? Чтоб один для ini, inf, reg был, а другой для остального?
Автор: mozers
Дата сообщения: 23.09.2009 08:29
vladvro
Отличная идея

Real Root
Цитата:
А как это сделать?
Вот так, например [more]
Код: local function ChangeCommentChar()
function IsINI(ext)
local ini = {'ini', 'inf', 'reg'}
for _, x in pairs(ini) do
if
x == ext then return true end
end
return false
end
if
editor.LexerLanguage == 'props' then
local
ext = props['FileExt']:lower()
if IsINI(ext) then
props['comment.block.props']=';'
else
props['comment.block.props']='#'
end
end
end

-- Добавляем свой обработчик события OnSwitchFile
local old_OnSwitchFile = OnSwitchFile
function OnSwitchFile(file)
local result
if old_OnSwitchFile then result = old_OnSwitchFile(file) end
ChangeCommentChar()
return result
end

-- Добавляем свой обработчик события OnOpen
local old_OnOpen = OnOpen
function OnOpen(file)
local result
if old_OnOpen then result = old_OnOpen(file) end
ChangeCommentChar()
return result
end
Автор: entada
Дата сообщения: 23.09.2009 12:13
mozers, спасибо!
Действительно, хоть и нет таких вкусностей, как в Windows, но редактор собрался и работает.
Автор: oldBob
Дата сообщения: 25.09.2009 10:02
Доброго времени суток!
Добавил к SciTE под Linux FuncProcList.lua и получил два подарка.


Цитата:

/home/bob/private/scite_tools/FuncProcList.lua:36: Editor pane is not accessible at this time.
>Lua: error occurred while loading startup script
/home/bob/private/scite_tools/FuncProcList.lua:40: attempt to call field 'GetTranslation' (a nil value)
>Lua: error occurred while processing command


FuncProcList.lua - ver. 1.3
Из COMMON.lua в FuncProcList.lua скопирована функция IsComment

Можно ли вылечить и как?
Автор: mozers
Дата сообщения: 25.09.2009 22:46
oldBob
Цитата:
/home/bob/private/scite_tools/FuncProcList.lua:36: Editor pane is not accessible at this time.
>Lua: error occurred while loading startup script
Этот скрипт вызывается из меню. Добавлять его в SciTEStartup.lua не нужно.

Цитата:
/home/bob/private/scite_tools/FuncProcList.lua:40: attempt to call field 'GetTranslation' (a nil value)
>Lua: error occurred while processing command
Видимо функция GetTranslation не работает в gtk. Можно просто исключить все ее вызовы из скрипта записав текст непосредственно, т.е. вместо
Код: print('> '..scite.GetTranslation('List of Functions / Procedures')..':')
Автор: oldBob
Дата сообщения: 26.09.2009 12:42
mozers, спасибо, попробую


Цитата:
Я бы, на твоем месте, лучше вытащил код из SideBar.lua (там FunctionsList работает на порядок более корректно). Правда, повозится придется побольше...

- и это попробую.
Автор: megli
Дата сообщения: 27.09.2009 13:35
Помогите синхронизировать sctie на 3- машинах: xp, xp, vista. Было бы неплохо иметь одну папку со ВСЕМИ файлоами настроек, которую я бы смог синхронизировать через svn. Спасибо!
Автор: mozers
Дата сообщения: 27.09.2009 15:17
megli
С первым постом!
Можно, конечно, переназначить папку для хранения пользовательских настроек (параметр scite.userhome). Но, фактически, и все остальные файлы (properties, abbrev, api и скрипты) - тоже настроечные. Тогда правь пути и к ним...
Таким образом остается только ядро (SciTE.exe и SciLexer.dll) которое, кстати, так же модернизируется и не факт что новые настройки будут корректно работать со старым ядром. Поэтому, чтобы на всех компах иметь актуальную версию надо модифицировать все файлы.
Автор: megli
Дата сообщения: 27.09.2009 16:12
Выходит, необходимо синхронизировать всю установочную папку?
Автор: mozers
Дата сообщения: 27.09.2009 17:29
megli
По уму - ДА. Только я бы не перетирал SciTEUser.properties, поскольку там хранятся личные настройки, индивидуальные для каждого пользователя.
Автор: oldBob
Дата сообщения: 28.09.2009 10:22
mozers,
Старый FuncProcList заработал, только не нашел ничего:

Цитата:

> List of Functions / Procedures:
> nothing found!


взял я FuncProcList is SideBar, да только он требует

Цитата:

/home/bob/private/scite_tools/FuncProcList.lua:10: attempt to index global 'lpeg' (a nil value)
>Lua: error occurred while processing command


и еще: попытался добавить функцию IsComment из COMMON.lua, а в ответ:

Цитата:

COMMON.lua:73: Pane function / readable property / indexed writable property name expected
local lexer = editor.LexerLanguage


можно обойти?
Автор: Real Root
Дата сообщения: 28.09.2009 15:04
Хотел еще поинтересоваться, существует ли в SciTE возможность подсветки не только текущей строки, но и вертикальной линии тоже. А то иногда хочется чтобы везде в документе отступы были одинаковыми, тогда это было бы очень удобно. Конечно можно TAB-ом пользоваться, но когда текст изначально не мой, а его нужно подкорректировать - это не пройдет, нужен вертикальный указатель.
Спасибо
Автор: oldBob
Дата сообщения: 28.09.2009 15:47
Real Root
Не это?

Цитата:

view.indentation.whitespace=1
view.indentation.guides=1



Автор: mozers
Дата сообщения: 28.09.2009 20:43
oldBob
Чет очень много пустяковых затыков разбор которых вряд ли интересен участникам треда. Давай пиши на mozers(собака)mail.ru - поковыряемся, а сюда выложим полностью отлаженный вариант.

Real Root
Цитата:
существует ли в SciTE возможность подсветки не только текущей строки, но и вертикальной линии тоже
Нет. indentation.guides - это немножко не то...

Цитата:
иногда хочется чтобы везде в документе отступы были одинаковыми, тогда это было бы очень удобно. Конечно можно TAB-ом пользоваться, но когда текст изначально не мой, а его нужно подкорректировать - это не пройдет
Почему??? Размер табуляции - устанавливается (Ctrl+Shift+I)... Tab-ы можно заменять на пробелы... Можно "Передвинуть выделенные строки"... В общем - куча вариантов.
Автор: vladvro
Дата сообщения: 28.09.2009 23:24
Real Root

Цитата:
Хотел еще поинтересоваться, существует ли в SciTE возможность подсветки не только текущей строки, но и вертикальной линии тоже.

есть одна возможность, правда предназначена она для другого, но можно попробовать:
edge.mode=1
и добавить в меню что-нибудь типа:
SciTEUser.properties [строка 19] :
Код: command.name.201.*=полоса тут
command.201.*=dostring props['edge.column']=editor.Column[editor.CurrentPos]
command.mode.201.*=subsystem:lua,savebefore:no
Автор: Real Root
Дата сообщения: 30.09.2009 11:02
mozers

Цитата:
Размер табуляции - устанавливается

Я честно говоря табуляцию лишь для примера привел.
Вобщем, как я понял живую вертикальную полосу в SciTE не получить?

vladvro
Спасибо большое. Оригинально. Вы меня поняли правильно, но статичная полоса как-то не нужна. Вот если бы она вместе с кареткой двигалась...
Автор: vladvro
Дата сообщения: 30.09.2009 11:07
Real Root

Цитата:
Вот если бы она вместе с кареткой двигалась...

я полагаю, что знающие люди смогут быстро сваять на основе этой идеи и динамично двигающуюся линию.
Автор: mozers
Дата сообщения: 30.09.2009 12:41
vladvro
Было бы че "ваять"... Ты же уже 90% сам написал
Код: local old_OnKey = OnKey
function OnKey(key, shift, ctrl, alt, char)
local result
if old_OnKey then result = old_OnKey(key, shift, ctrl, alt, char) end
if
(editor.Focus) then
editor.EdgeColumn = editor.Column[editor.CurrentPos]-1
end
return
result
end
Автор: Real Root
Дата сообщения: 01.10.2009 00:21

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

Прошу не обижаться. Знаете такой редактор Bred3 называется? Очень популярен был в свое время. Так вот - там это изначально реализовано. И когда привыкаешь - очень не хватает.

Теперь еще вопрос, можно ли теперь эту саму красную линию сделать шириной во весь столбец и дать ей такой же (голубоватый) цвет как и у горизонтального выделителя.
Мне честно говоря уже что-то просить не удобно. Но если привыкните к этому, то уж очень сложно потом без радимой полосочки.
Автор: mozers
Дата сообщения: 01.10.2009 15:30
Real Root
Цитата:
можно ли теперь эту саму красную линию сделать шириной во весь столбец и дать ей такой же (голубоватый) цвет как и у горизонтального выделителя
Читаем справку то
Цитата:
edge.mode edge.column edge.colour Эти параметры определяют способ отображения "слишком" длинных строк. Параметр edge.column определяет максимальную длину "нормальной" строки.
Если значение переменной edge.mode равно 0 (по умолчанию), длинные строки никак не помечаются. Если значение равно 1, отображается специальная вертикальная линия, которая показывает границу строки "нормальной" длины. При значении 2 изменяется цвет фона символов той части строки, которая превышает заданную максимальную длину.
Параметр edge.colour определяет цвет фона символов той части строки, которая превышает заданную максимальную длину, или цвет вертикальной линии, которая показывает границу (в зависимости от значения параметра edge.mode).


Цитата:
Мне честно говоря уже что-то просить не удобно
Это ты - зря. Каждый просящий за себя в конечном счете становится двигателем всеобщего прогресса
Автор: Psorokin
Дата сообщения: 07.10.2009 20:00
Как отключить нумерацию вкладок?
И зачем они вообще пронумерованы, если после 9 идёт 0, а затем номеров нет?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

Предыдущая тема: Universal Share Downloader


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.