Пока ходил на базар за картошкой — сформулировал, как это могло бы выглядеть. Решил поделиться — авось кому польза будет Дисклямер: в нижеследующем тексте я не учитываю возможных технических ограничений; исхожу из того, что сервер ориентирован на 1 язык (из мейнстримовых).
Цель сайта — собрать большую библиотеку полезных code snippets (кусочков кода), могущих легко быть re-used.
Единица хранения
Один snippet — это некий набор единиц языка (классов, функций), не зависящий от сторонних библиотек (кроме стандартной библиотеки данного языка), служащий однозначно формулируемой цели, и могущий быть использованным "как есть", без переделки.
Поскольку однозначного имени (по которому любой программист его найдет) snippet'у дать нельзя, ему дается краткое описание и набор тегов (соответственно, поиск сниппета на сайте — отбор по тегам).
Редактирование snippets
Редактировать сниппет может кто угодно.
Для редактирования сниппета сайт должен предоставлять полноценный редактор кода (подсветка, автоотступ, сворачивание веток, autocomplete стандартной библиотеки).
Необходимо ввести сниппет и юнит-тест на него (код выполняющий проверку корректности сниппета и одновременно — демонстрацию его возможностей).
После этого сервер выполняет проверку.
Проверяется: синтаксис и компилируемость кода, стиль (на сервере существуют некоторые правила, типа длины имен переменных и прочая); выполняется юнит-тест. Результатом выполнения юнит-теста является список тестов, которые код прошел/не прошел, а так же (в идеале) покрытие кода тестами (какие классы/функции в выполнении юнит-теста задействованы не были).
Код, не прошедший проверку на компилируемость, запостить нельзя. Код, не прошедший критические тесты, запостить нельзя. Код, не прошедший некритические тесты, запостить можно, в каталоге он будет показан как "сниппет такой-то — проходит 80% тестов".
Поиск и выбор snippets
Поиск идет по тегам и просто через поисковую систему. В списке отображается сниппет, его краткое описание, покрытие юнит-тестами (рейтинг?). При просмотре сниппета можно посмотреть его код, юнит-тест, результат выполнения юнит-теста, автоматически сгененрированное summary (только definitions). При этом сайт должен поддерживать простой рефакторинг — единожды задав в своем профайле свои соглашения по кодированию (отступы, переносы, case переменных и прочая), дальше все сниппеты вижу отформатированными по этим соглашениям. Просматриваемый сниппет можно загрузить (в смысле, соответствующий исходник без html'я), отредактировать, отредактировать только юнит-тест (к примеру, добавить еще один тест, демонстрирующий некорректность кода, или нехватающие в нем фичи).
Административное устройство
По всей видимости, кроме модераторов (чья функция — как всегда — пресекать хулиганство и вандализм) нужны maintainers (добровольцы-энтузиасты), которые станут более-менее регулярно просматривать новые и измененные сниппеты, выбрасывать никому-не-нужные, рефакторить плохо-написанные и т.п.
На закуску — проблемы реализации
Крутейшая среда с рефакторингом и веб-интерфейсом, серверная, выдерживающая дикие нагрузки — это не шубу в трусы заправить. Других проблем не видать Возможно, нагрузку можно каким-то образом перенести на клиента (скачивается программа, в которую уже встроен редактор; каким-то образом полагаться на установленный у клиента компилятор, и т.п.). JetBrains, ау?!
Сразу хочется сказать:
1. Языков до фигищи, и как запускать и оценивать?
2. Не на все можно настроить Unit тесты. А тем-более описать.
3. Оценивать по результатом тестов? Это не очень хорошо. Нужно оценивать КПД библиотеки. А тут все слишком субъективно. Реакция пользователей, вот должна быть оценка. А это уже есть, форум "Исходники".
4. Мне иногда значительно полезнее идеи, чем работающие исходники. Даже я бы сказал более полезны и нужны. А тут не все полезные идеи можно запихнуть(по п1,2) При этом, я могу субъективно оценить идею по данной оценке(п3).
Единственное что не хватает в форуме исходников, это система поиска и тегов. Это действительно так. И лучше всего, чтобы они были редактируемыми(пользователь мог оценить направленность), и модерируемыми(модераторы оценивали вменяемость направленности).
ну и под конец...
когда сниппетов наберется под несколько миллионов — это через несколько лет полноценной работы сайта, и стоимость места на жестком диске и оперативной паямяти клентских компбютеров станут равны фактически 0 (!), а процессорные мощности станут фактически безграничными....
то встанет вопрос о созлании клиентского приложения, которое после ввода описания задачи на уже упоминавшемся языке тэгов для описаний снипеттов, будет загружать эти сниппеты и компоновать и компилить их в произвольном порядке, за несколько минут/часов создавая гигантские многофункцональные приложения...
и наступит рай на земле...
[offtop]
Нет, ну действительно нечто типа "незримого поля" идей существует — неделю назад мимо меня пробегала такая идея, улыбнулась, сделала книксен и побежала дальше
[/offtop]
...добивая ногами психиатра: "Это кто нервный?! Это я нервный?!!"
Если снипет и компонент — это примерно одно и тоже, то как будут решаться проблемы, которые характерны при использование компонентов:
1. Избыточность
2. Монолитность
3. Различие в терминах
4. Различие в моделях
5. Различие в подходах
SR>[offtop] SR>Нет, ну действительно нечто типа "незримого поля" идей существует — неделю назад мимо меня пробегала такая идея, улыбнулась, сделала книксен и побежала дальше SR>[/offtop]
Здравствуйте, DarkGray, Вы писали:
ЗХ>>Для всех остальных скопом: вопрос — почему Википедия настолько хороша?
DG>Хороша — по сравнению с чем?
По сравнению (а) с офлайновыми энциклопедиями, (б) с другими источниками энциклопедической информации в интернете.
DG>ps DG>Один из ответов — потому, что это первая реальная реализация hyper-текстовой энциклопедии,
Правильный ответ — потому что она редактируема всеми в любой момент времени. Т.е. реализует итеративный процесс создания информации "всем миром".
DG>но при этом я бы не сказал, что wikipedia-ей реально удобно пользоваться.
Зверёк Харьковский,
> DG>Хороша — по сравнению с чем? > > По сравнению (а) с офлайновыми энциклопедиями, (б) с другими источниками энциклопедической информации в интернете.
Она далеко не так уж универсально хороша в этом сравнении. Все зависит от критериев. Например, у меня ко многим другим источникам справочной информации намного выше доверие в смысле достоверности информации.
> Правильный ответ — потому что она редактируема всеми в любой момент времени. Т.е. реализует итеративный процесс создания информации "всем миром".
Именно поэтому.
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Зверёк Харьковский,
>> DG>Хороша — по сравнению с чем? >> >> По сравнению (а) с офлайновыми энциклопедиями, (б) с другими источниками энциклопедической информации в интернете.
ПК>Она далеко не так уж универсально хороша в этом сравнении. Все зависит от критериев. Например, у меня ко многим другим источникам справочной информации намного выше доверие в смысле достоверности информации.
Подчеркиваю — энциклопедической. Как правило, Википедия представляет собой великолепный starting point для ознакомления с незнакомым понятием. При этом подробнее, чем любая офлайновая энциклопедия, и достовернее, чем набрать в гугле "искомое понятие" и перейти по паре перво-попавшихся ссылок. Я имел в виду уименно это.
Здравствуйте, DarkGray, Вы писали:
DG>>>но при этом я бы не сказал, что wikipedia-ей реально удобно пользоваться.
ЗХ>>???
DG>Структуризации — нет,
Ну, вообще-то категории там есть.
DG>поддержки нескольких точек зрения — нет,
Мммм... Мне кажется, для энциклопедии правильный подход — именно используемый в Википедии NPOV (Neutral Point Of View)
DG>поддержки выборок, фильтров и т.д. — нет, DG>фрактализации — нет. DG>и т.д.
Хотелось бы заметить, что это все-таки энциклопедия, а не "путеводитель по миру". Цель энциклопедии — отвечать на вопрос "что такое <понятие>", а не организовывать весь мир в логическую структуру.
Господа, я возможно не вполне точно выразил намерения и цели.
Хотелось бы репозиторий кода, основанный на принципах Wikipedia.
А конкретно, на важнейшем ее принципе: любой кусочек информации может править любой человек.
Мне кажется, что это дало бы (по аналогии с той же Wikipedia) итеративно улучшаемые (в пределе — идеальные) самостоятельные тематические кусочки кода.
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>Здравствуйте, GlebZ, Вы писали:
GZ>>Сразу хочется сказать...
ЗХ>В общем, из всего этого можно сделать вывод, что по крайней мере тебе Codepedia не нужна
В том виде который ты предложил нет. Хотя я сообщение написал не подумавши. Мне очень не понравилось направленность на Unit тесты. Я делал вещи, которые unit тестами и не опишешь. И есть вещи, в которых оценка unit тестами ничего не даст. Ну например реализации языка. Его покрытие unit тестами — процесс бесконечный.
Что мне не нравится. В wikipedia будут готовые классы. Они написаны не языком который предпочитаю я. Они будут не в форме, которую предпочитаю я. Это будут чужие классы, которые мне нужно будет встраивать. Иногда на адаптацию уходит больше времени чем на написание. Я лучше напишу сам. К тому-же, часто для функциональности пишут громадные классы. И в них придется искать нужную тебе функциональность? Мне же нужны how-to. MSDN в плане поиска информации меня неудовлетворяет ни по навигации, ни по содержанию. Фиг вспомнишь в какой ветке contents лежит интересующий тебя материал. Иногда материал по одной и той же библиотеке лежит в разных разделах. Поиск, дурацкий. Среди 500 ответов попробуй найти свой. И он не полон, потому как библиотек значительно больше чем в MSDN. Но ведь нет ничего более полезного чем пример использования библиотеки.
Что бы мне хотелось. Мне хотелось иметь сборник примеров использования. Мне бы хотелось иметь ясный сборник особенностей тех или иных библиотек. И не в форме статей, в которых будешь искать нужный параграф на сотне прокруток экрана, а в форме заметок и экзамплов. Мне не нужно чтобы этот код работал, мне нужно чтобы он был правильным. Правильность, как и в wiki, определяет общественность. И я смогу адаптировать под свое решение так как я хочу.
И самое главное, интуитивное нахождение информации. То есть, правильная навигация. Она тоже должна быть обсуждаемая(до определенных пределов, конечно).
С уважением, Gleb.
PS ну вот, сейчас более правильно высказался.
DG>>Структуризации — нет, ЗХ>Ну, вообще-то категории там есть.
категории — это лишь один из инструментов структуризации
DG>>поддержки нескольких точек зрения — нет, ЗХ>Мммм... Мне кажется, для энциклопедии правильный подход — именно используемый в Википедии NPOV (Neutral Point Of View)
В идеале — да.
но на горячие (на flame-овые) темы — обычно NPOV не бывает.
ЗХ>Хотелось бы заметить, что это все-таки энциклопедия, а не "путеводитель по миру". Цель энциклопедии — отвечать на вопрос "что такое <понятие>", а не организовывать весь мир в логическую структуру.
"что такое понятие" — это скорее роль толкового словаря, а не энциклопедии.
роль энциклопедии — это уже именно структурирование информации.
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>Хотелось бы заметить, что это все-таки энциклопедия, а не "путеводитель по миру". Цель энциклопедии — отвечать на вопрос "что такое <понятие>", а не организовывать весь мир в логическую структуру.
Приведи примеры понятия в контексте описанной системы. И каким образом пользователь сможет понять, что именно это понятие ему нужно.