Можно просто выйти из пространства с \
RewriteRule ^article/with\ spaces.html$ /article/without_spaces.html [R=301,L]
Хорошая документация ДОЛЖНА иметь:
Я знаю, как нарисовать произвольную фигуру произвольного цвета в GTK+. Я до сих пор не знаю, почему для изменения цвета рисунка требуется три довольно длинных строки очень непонятного, совершенно неинтуитивного кода. Вспоминая setcolorRGB(r,g,b); draw(x1,y1,x2,y2);
из SVGAlib, мне трудно понять, что заставило авторов GTK+ так все усложнить. Может быть, если бы они объяснили основные концепции вместо того, чтобы просто документировать функции, которые их используют, я бы понял...
Другой пример: вчера я получил ответ, который позволил мне понять SQLite. Я понял, что функция, извлекающая данные из столбца, возвращает signed long long
. Я понял, что целочисленные колонки могут быть длиной 1,2,4,6 и 8 байт. Я понял, что могу определить столбец как "UNSIGNED INT8" или "TINYINT". Я не совсем понял, что означает "сродство", я просто знал, что оба имеют сродство "INTEGER". Я потратил часы на поиски того, должны ли временные метки быть UNSIGNED INTEGER или INT8, является ли INT8 8-разрядным или 8-байтовым, и как называется этот эзотерический 6-байтовый int?
Я упустил из виду, что "UNSIGNED INT8", "TINYINT" и тому подобное - это синтаксический сахар, синонимы типа "INTEGER" (который всегда signed long long
), а приведенные длины предназначены только для внутреннего дискового хранения, автоматически и прозрачно подгоняются под любое значение по наименьшему количеству бит и совершенно невидимы и недоступны со стороны API.
Мне очень нравится Документация Qt4 , она сначала предоставляет вам только важную информацию, необходимую для работы, а если вы хотите копнуть глубже, она раскрывает все кровавые подробности в подразделах.
Что мне действительно очень нравится, так это то, что они встроили всю документацию в Qt Creator, который предоставляет контекстно-зависимую справку и короткие примеры, когда они вам нужны.
На самом деле документация для iPhone (на самом деле Mac Cocoa / framework) стала довольно хорошей. Мне нравятся следующие функции:
Очень простой переход к документации из API.
Хорошее форматирование и фрагменты кода. вы хотите скопировать и вставить (например, сигнатуры методов).
Ссылки на проекты с образцами кода прямо из документации.
Механизм автоматического обновления документа, но по умолчанию все документы локальны для начало (чтобы можно было жить с ненадежным подключение к Интернету).
Простой способ переключения между вариантами документации (чтобы увидеть разные версии ОС), а также выберите какие комплекты документации запустить выполняет поиск.
В обзорном разделе объясняется, что класс для, за которым следует раздел методы выделения, сгруппированные по цель (методы создания и объект, методы для запроса данных, методы работы с шрифтом конверсии и т. д.), а затем подробные объяснения методов.
Мне также лично очень понравился Javadoc и документация по системе Java (я использовал это много лет), я обнаружил, что преимущество в том, что было немного проще создавать собственные пользовательские документы для ваших собственных классов, которые текут хорошо с системной документацией. XCode позволяет вам также использовать Doxygen для создания документации для ваших собственных классов, но потребуется немного больше работы, чтобы отформатировать ее, а также документы системного класса, отчасти потому, что к документам системной инфраструктуры применяется большее форматирование.
Go to the Doxygen site and look at the examples of the HTML that it generates. Those are good:
My main criteria is - tell me everything I need to know and everything I'll ever want to know.
QT has pretty decent docs: http://doc.qt.digia.com/4.5/index.html
Win32 MSDN is also pretty good although it didn't age well.
The java docs are horrible to me. They constantly tell me everything I don't want to know and nothing of what I do want to know. The .NET docs has a similar tendency although the problem there is mostly the extreme wordyness, overflow of so much superfluous details and so much god damn pages. Why can't I see both the summary and the methods of a class in the same page?
Хороший API-интерфейс будет обладать следующими характеристиками:
Самая распространенная ошибка, которую я вижу в дизайне API, - когда разработчики считают, что автоматически сгенерированного XML-комментария достаточно, а затем предшествовать для автоматического создания своего API на основе комментариев XML. Вот о чем я говорю:
///<summary>
/// Performs ObscureFunction to ObscureClass using ObscureArgument
///</summary>
void ObscureClass.ObscureFunction(ObscureArgument) { ... }
API, подобные приведенному выше, только контрпродуктивны и расстраивают разработчика, использующего API. Хорошая документация по API должна давать разработчикам подсказки относительно того, как использовать API, и давать им представление об определенных аспектах API, которые в противном случае они бы не заметили.
Хорошая документация должна содержать как минимум следующее:
Кроме того, полезно следующее:
На основании этого:
Мне нравится документация Twitter . На мой взгляд, хороший API обновлен, легко читается и содержит примеры.
Я лично считаю, что прекрасным примером хорошей документации является документация PHP:
Например: http://www.php.net/manual/en/function.fopen.php
Я думаю, что эффективная документация включает:
Необязательно :
Всякий раз, когда я ищу что-нибудь в документации PHP, я почти точно знаю, как это использовать, без необходимости рыскать по Интернету в поисках «лучших» примеров. Обычно единственный раз, когда мне нужно искать в Интернете, когда мне нужно найти, как использовать набор функций для определенной цели. В остальном, я считаю, что документация PHP - лучший пример отличной документации.
То, что считается примером хорошей документации, - это Python: http://docs.python.org/py3k/library/array.html
В нем перечислены методы, но он не очень хорошо объясняет, что это такое и как его использовать. Особенно если сравнивать с документами PHP.
Первое, что нужно для хорошей документации по API, - это хорошее название самого API. Названия методов и параметров должны быть понятны всем. Если рассматриваемый язык является статически типизированным, используйте перечисления вместо констант String или int в качестве параметров, чтобы выбрать между ограниченным набором вариантов. Какие варианты возможны, теперь можно увидеть в типе параметра.
«Программная часть» документации (текст, а не код) должна охватывать пограничные случаи (что произойдет, если я укажу null в качестве параметра), а документация класса должна содержать пример использования.
Единственным критерием качества документации является то, что она ускоряет разработку. Если вам нужно узнать, как что-то работает, вы идете читать документы. Один документ лучше другого, если вы все поняли из первого документа быстрее, чем из второго.
Любые другие качества субъективны. Стили, перекрестные ссылки, описания… Я знаю людей, которые любят читать книги. Документ в стиле книги (с содержанием / указателем / и т. Д.) Ему подойдет. Другой мой друг любит документировать все внутри кода. Когда он скачивает новую библиотеку, он получает исходники и «читает» их вместо документов.
Мне лично нравится JavaDocs. Как и документация разработчиков Apple, за исключением частей нижнего уровня, например, среда выполнения Obj-C (справочная часть) описана ужасно. Мне также нравятся некоторые API-интерфейсы веб-сайтов.
Не нравится MSDN (в целом это хорошо, но существует слишком много вариантов одного и того же документа, я часто теряюсь).
Мне нравится, когда документация имеет краткий обзор вверху, полнофункциональные примеры внизу и обсуждения под ними! Я удивлен, что мало кто включает простые аргументы функций с их необходимыми типами переменных и значениями по умолчанию, особенно в php!
Боюсь, что я не могу привести пример, потому что я не просмотрел все, чтобы найти мои любимые, однако я знаю, что это, вероятно, не считается, потому что это неофициальная вики, но Kohana 3.0's Unofficial Wiki By Kerkness просто великолепна! и Kohana 2.34 documentation тоже довольно хорошо изложена, по крайней мере, для меня. Что вы думаете, ребята?
Я думаю, что хороший документ по API должен четко объяснять:
Не совсем документация по API, но тем не менее весьма полезная - это документация по базе данных Oracle, например, для оператора SELECT. Мне нравится включение диаграмм, которые помогают прояснить использование, например.
Большинство людей перечислили пункты, составляющие хорошую документацию по API, поэтому я не собираюсь их повторять (спецификации типов данных, примеры и т. Д.). Я просто приведу пример, который, как мне кажется, иллюстрирует, как это должно быть сделано:
Блок приложения Unity (перейдите в раздел загрузки для CHM)
Все люди, участвующие в этом проекте, сделали отличная работа по документированию этого и того, как его следует использовать. Помимо справочника по API и подробного описания метода, есть много статей и примеров, которые дадут вам общую картину, почему и как.Проекты с такой хорошей документацией редки, по крайней мере, те, которые я использую и о которых знаю.
Несколько мыслей ...
Примеры - документация Win32 API лучше, чем у iPhone, потому что:
Я голосую за любой документ API с небольшими и понятными примерами
Никогда не показывайте «Form1», «asdf», «тестирование пользователей» на снимках экрана или образцах кода
Запрещается автоматическое создание документа
Избегайте ___V2 версии API
Документация - это только часть общей картины, дизайна API. И можно утверждать, что последнее гораздо важнее, чем просто именование. Подумайте о значимых, не дублирующих друг друга именах методов и т.д.
Я бы определенно рекомендовал посмотреть презентацию Джоша Блоха об этом: http://www.infoq.com/presentations/effective-api-design ИЛИ http://www.youtube.com/watch?v=aAb7hSCtvGw
Это охватывает не только то, что вы ищете, но и многое другое.
Вот очень плохая документация: Диспетчер данных . Dispatch - это библиотека Scala для HTTP, которая абстрагируется от библиотеки HTTP (Java) Apache Commons.
Он использует много функционально-синтаксической магии, с которой не все будут хорошо разбираться, но не дает четкого объяснения ни этого, ни стоящих за ним дизайнерских решений. Scaladocs бесполезен, потому что это не традиционная библиотека в стиле Java. Чтобы действительно понять, что происходит, вам в основном нужно прочитать исходный код и прочитать множество сообщений в блогах с примерами.
Документация заставляет меня чувствовать себя глупо и неполноценно, и уж точно не помогает мне делать то, что мне нужно. Оборотная сторона - это большая часть документации, которую я вижу в сообществе Ruby - как в RDoc, так и в FAQ / сайтах / и т. Д. Не делайте просто Javadoc - вам нужно предоставить более полную документацию.
Ответьте на вопрос: «как мне сделать X с Y?» Возможно, вы знаете ответ. Я не.
Я считаю API Google прекрасным примером API хорошей документации.
У них есть:
Вот и все! Когда я играю с сайтом документации API Google, я чувствую себя как дома.
Обязательно наличие множества практических примеров из реальной жизни. Недавняя переработка документации API jQuery является хорошим примером, как и легендарные документы Django.
В общем, расскажите историю класса на уровне класса. Почему это здесь? Что он должен делать? Что здесь должно быть? Кто его написал?
Расскажите историю методов на уровне методов. Что это делает? Неважно, насколько точны названия ваших методов, 20-30 символов не всегда достаточно для описательности.
@author:
Документация уровня интерфейса говорит мне:
Документация уровня реализации говорит мне:
Документация уровня класса говорит мне:
@Deprecated говорит мне:
Если что-то окончательное:
Если что-то статическое:
В общем: вы пишете это для следующего разработчика, который будет использовать это, если и когда вы выиграете в лотерею. Вы же не хотите чувствовать себя виноватым за то, что уволились и купили яхту, поэтому уделите немного внимания ясности и не думайте, что вы пишете для себя.
В качестве побочного эффекта, когда кто-то попросит вас поработать с тем же кодом через два года, а вы все забудете, вы получите огромную пользу от хорошей документации в коде.
Одна вещь, которую я всегда хотел видеть в документации: абзац с «обоснованием» для каждой функции или класса.Зачем нужна эта функция? Для чего это было построено? Что из этого не может быть достигнуто другим способом? Если ответ «ничего» (а так бывает на удивление часто), то что это за сокращение и почему эта вещь достаточно важна, чтобы иметь свою собственную функцию?
Этот абзац должен быть легким в написании - если это не так, это наверное признак сомнительного интерфейса.
Лучшая документация, которую я нашел, - это Python . Вы можете использовать sphinx для создания исходной документации в HTML, LaTeX и других форматах, а также для создания документов из исходных файлов; Документ API, который вы ищете.
Документация API - это не только качество окончательной документации, но и то, насколько легко разработчикам и / или техническим писателям действительно ее написать, поэтому выберите инструмент, который упростит работу.
Недавно я обнаружил это документация (библиотека Lift JSON), которая кажется хорошим примером того, о чем просили многие: хороший обзор, хороший пример, варианты использования, намерения и т. Д.