Мой велосипед для сниппетов

    Сниппет — это небольшой кусок кода, который программист многократно использует в своей практике.
    Сам я сниппетами пользуюсь не так давно, но на практике оценил их пользу. Бывали ситуации, когда нужен был фрагмент кода который я писал недавно, но вспомнить где он находится я не мог. Выручал Интернет, но у меня же должны быть собственные наработки. Да и не зря же я так долго их собирал. После недолгих поисков нашлось несколько интересных специализированных сервисов как раз для сниппетов. И так эти сайты мне понравились, что я решил сделать что-то похожее или даже лучше :)

    В качестве главного приоритета я выбрал скорость. Пусть он будет быстрым настолько, насколько хватит моих знаний и умений. И сайт получился действительно быстрым (мое мнение). На остальное: подсветка синтаксиса, группировка сниппетов, поиск, избранное, комментирование и черновик.

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

    Сайт я собирал в свободное от работы время. Товарищи по работе встретили мое начиние прохладно. Хотя были люди готовые помочь и даже по-участвовать в микро-проекте.
    Идея сервиса для сниппетов мне нравится и реализация мне тоже нравится. Я же делал =) Вот только понять бы, а нужно ли это людям? Многие фишки я еще не успел реализовать. Но я могу их допиливать бесконечно, а сайт окажется людям не нужным и бесполезным. Дайте совет, нужно ли мне продолжать развивать свое детище или забросить и не тратить время? Нужны ли вообще такие инструменты разработчикам и пользовались бы ВЫ этим помощником?
    snippets.su — тот самый сайт
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 95

      +1
      >>> Нужны ли вообще такие инструменты разработчикам и пользовались бы вы сами этим помощником?

      Нет, потому что все мои куски кода уже оформлены в библиотеки и классы и лежат в личном репозитории, откуда я могу их просто переносить и сразу же использовать.
      Не вижу смысла в том, чтобы многократно дублировать один и тот же кусок кода в разных местах.
        +1
        Спасибо. Хороший способ.
          +7
          В отличии от предыдущего коментатора, мы в работе используем именно дублирование кода повсеместно с маленькими самописными библиотеками. И людей поступающих аналогично довольно много, но далеко не все. Да и новички часто пользуются вставкой именно готового кода и по нему учатся. Поэтому считаю нужное дело.
            +1
            Спасибо =)
              0
              вы наверное про шорткоды хотели сказать
                0
                Не знаю, что такое шорткод, но мне кажется это то же самое по сути.
                –5
                действительно, зачем объекты, зачем библиотеки, когда платят за строчку кода?
                  0
                  Это ваши догадки только за что платят.
                    +2
                    А есть ещё какой-то повод повсеместно использовать дублирование кода?
                      0
                      Опять не угадали. Дублирование используется там, где есть необходимость (частый вызов функции тоже «стоит»), либо просто копируются файлы с исходниками, в которых лежат функции и включаются. Это тоже дублирование.
                        0
                        А что вам мешает это оформить это в библиотеки и классы?
                          0
                          А зачем, объясните? Всё делается по мере необходимости. Создавать сплошь и рядом всё объектно-ориентированно не нужно для текущих задач.
                            0
                            Ну, наверное, затем, что когда/если в тонне копипаста обнаружится ошибка, либо изменятся условия применения (стороннее апи) и тд и тп, то вам придётся долго и мучительно шерстить всю тонну копипаста во всех стопиццот местах и проектах. И не факт, что вспомните все стопицот мест, может в паре-тройке останется. Антипаттерн хорошо известен и описан под именем, — «фальшивая черепица».
                              0
                              Вы так говорите будто знаете всё про мою работу. Бросьте. Там, где нужны шаблоны проектирования типа самого используемого «замещение зависимостей», они там используются.
                                0
                                Обана! Так вы же сами это написали!

                                Первый комментатор написал, что повторяющиеся куски оформил в классы-библиотеки и аля-улю. Вы тут же заметили, что вы _в_отличии_ от него, широко используете индусский метод копипасты. Очевидно, в тех самых случаях, где он использует библиотеки. Иначе стОило ли делать такое замечание, не?
                                  0
                                  Про индусский метод вы глубоко заблуждаетесь, видно не знаете вообще что это такое.
                                  Извините, не имею желания продолжать эту бесполезную дискуссию.
                                    0
                                    Почему же не знаю? Было дело, заменял собой целую индийскую контору. Те мегатонны копипаста, что они дружно наплодили оказалось проще переписать (в одиночку) заново, чем по десяткам файлов исправлять одну и ту же кривость, многократно заботливо скопированную трудолюбивыми сынами и дочерьми дружественного индийского народа. Вас — извиняю, раз просите, тем более, с вашим кодом мы, скорее всего, не встретимся никогда, так что мне, в общем-то, всё-равно, просто вздрогнул, вспоминая печальный опыт встречи с работами копипастеров…
                                0
                                А зачем бездумно копировать пару строчек кода в кучу мест проекта? Оформлять пару строк в библиотеку/класс так же смысла не имеет. Вообще ни в чем нету смысла, если подумать.
                                  0
                                  Пару строк проще заново написать. Иногда даже получается то же самое, как в том самом судебном случае оракел против гугла :)
                                    0
                                    Согласен. Посему вопрос, в чем смысл? Человеку, который в состоянии эти пару строк написать самостоятельно — сборник готовых «снипетов» в том понимании, в котором они представлены на сайте, ненужен. А человеку который не в состоянии это сделать, лучше бы попытаться все же самому написать, ибо учиться как?
                      +2
                      Вы в теме разберитесь для начала. Сниппеты это фактически промежуточная стадия между автогенерацией кода, которая предоставляет болванки в рамках архитектуры и автокомплитом, который подсказывает возможные значения по месту. Хотя о чем это я, продолжайте намекать на то, что автор индус / китаец / и далее по списку. Oppa russianforumsyle )
                        0
                        Платят за результат.
                    0
                    Было бы интересно узнать, как именно этот репозиторий оформлен, какие средства используются, как выглядит сценарии работы с ним.
                      +1
                      До банальности просто всё это устроено. Алгоритмы собраны в функции, функции собраны в классы. Некоторые вещи представляют собой несколько файлов. Что-то является модулем (например, штука для заливки файлов с предпросмотром), что-то простым файлом, содержащим класс (например, универсальный генератор превьюшек на все случаи жизни). Никакой автоматики (например, контроллера зависимостей) пока нет.
                      Если мне нужно что-то — я копирую соответствующие файлы/папки в проект, и ядро это подхватывает.

                      0
                      Согласен, к тому-же когда я пишу код то незнаю какой кусок мне понадобится потом. я использую поиск по проектам в редакторе
                        0
                        я использую сниппеты, только я их так не называл. Складываю в свою вики
                          0
                          аналогично, я использую dokuwiki. И храню там не только сниппеты, но и различные конфиги, инструкции, инфу о багах и вообще все, что надо где-то хранить. Даже рецепты некоторых блюд :) Способ автора интересен, но я думаю идеального способа нет
                          –1
                          Жаль, что не хватает кармы, чтобы поставить плюс.
                          0
                          Интересный проект. Но есть несколько интересных нюансов.
                          Снипеты могут добавлять все, правильно? Какие приоритеты (кроме скорости — но это для вас) и правила добавления? Не отправляйте читать на сайт, лучше в коменте ответить. Дальше. Кто будет проверять корректность работы снипетов, что были добавлены людьми?
                          Что касается сайта: мне кажется, на главной не стоит делать кучу новых поступлений. Ну и может как-то более детально категоризировать, сделать обязательные теги.
                            +5
                            мм, Github Gist, не?
                              0
                              Отличный ресурс. Сам им хотел пользоваться. Но мне ближе идея большого хранилища, где можно хранить не только свои но и найти сторонние решения.
                                +1
                                ну а чем вас тут гист не устроил?
                                  0
                                  навигация меня смутила (неудобная как по мне)
                            0
                            Спасибо за конкретный ответ.
                            По поводу приоритетов: здесь заложена но пока не реализована возможность модерирования.
                            С тегами тоже согласен.
                              +2
                              Мне лично сервис понравился, спасибо, буду пользоваться
                                +1
                                Спасибо и Вам за отзыв.
                                0
                                Отличный сервис!
                                Рекомендую поставить на главной странице в блоке «о проекте» социальные кнопки. Хотел ретвитнуть — а кнопки нету…

                                  0
                                  Спасибо, кнопкам быть.
                                    0
                                    И заодно комментарии авторизованных через социалки прикрутить. Такие комментарии, доступные широкому кругу лиц, в каком-то смысле заменят проверку сниппетов на «рабочесть».

                                    Уже использовал оттуда один кусочек кода, спасибо :)
                                      0
                                      Резонно. Спасибо. Сделаю.
                                  +1
                                  Да, отличный сервис.
                                  Только зачем вы CSS и JS прямо в код включаете, а не отдельными файлами?
                                    0
                                    Спасибо. Это и есть отдельные файлы. Это я пробовал один из вариантов оптимизации.
                                  • UFO just landed and posted this here
                                      0
                                      Спасибо за помощь. Исправляю.
                                        0
                                        Я вам ещё два бага отправил в личку. И отпишитесь пожалуйста по предыдущему, что вы хотя бы видели сообщение
                                          0
                                          Да, спасибо. Увидел.
                                      0
                                      Для скорости помогает включение gzip в nginx и Cache-Control (тогда нужно к js, картинкам и css приписывать ?v=… чтобы после деплоя новые загружались) вот пример конфига gist.github.com/be54db5f7063a804e5e6

                                      Так-же приятно когда страницы менются без перезагрузки, это делается просто (например на Github когда ходим по директориям в проекте)

                                      Ну и размер главной страницы у вас неприлично большой (200кб)

                                      developers.google.com/speed/pagespeed/insights
                                        0
                                        Спасибо. Не ожидал получить столько конкретных предложений. Учту.
                                        0
                                        Я свои наработки и заметки держу в собственной wiki.
                                          +2
                                          API для ресурса планируется? Хотелось бы получать список, искать в списке сниипетов.
                                          Для чего это? Было бы хорошо иметь быстрый доступ к сниппетам непосредственно из редактора кода в СMS, либо в любой другой оболочке, работающей со сниппетами.

                                          Методы API:
                                          snippet.search (name, [limit])
                                          snippet.getList ([limit])
                                          snippet.getSource (id)

                                          Очень хорошо было бы наличие в каждом сниппете (конкретно для PHP) PHPDoc комментария.

                                          Так же совсем замечательно было бы наличие мультиязычных названий у сниппетов.

                                          Спасибо!
                                            0
                                            Да, конечно. API будет.
                                            0
                                            Быстренько пробежался по этим снипетам, половина слишком проста что бы это не знать, вторая половина написана так, что я бы это никогда не использовал бы.
                                              0
                                              Хороший сервис. Пожалуйста, укажите в статье, что сервис предназначен не только для PHP-сниппетов, а то указанные хабы несколько сбивают с толку.
                                              +1
                                              >И сайт получился действительно быстрым (мое мнение)
                                              Сейчас сайт жутко тормозной, страница со снипетом 160Kb.
                                              CSS и JS прямо в теле страницы, не кэшируются браузером, а постоянно грузятся снова.
                                                0
                                                спасибо, исправил.
                                                +1
                                                Я гляжу эти сервисы вам настолько понравились, что вы решили и внешний вид у них позаимствовать — snipplr.com :) А так прикольно, что сам недавно хотел запилить такой сервис, но взгляную на snipplr отказался от этой затеи — не хочу лишних сущностей плодить.
                                                  0
                                                  Да, сайт классный. И именно он меня вдохновил. + еще один www.codesphp.com
                                                  0
                                                  Надо добавить вторизацию через соц. сети
                                                    0
                                                    Будет =)
                                                    0
                                                    Постраничную навигацию бы доделать, а то после просмотра сниппета возвращаешься всегда на первую страницу.
                                                      0
                                                      есть такой баг. Спасибо
                                                      0
                                                      А вы используете фреймворки? Просто сейчас во всех фреймворках очень жесткая привязка, один класс — один файл, и ваши функциональные сниппеты не впишутся в их среду. Уж лучше писать небольшие классы, которые могут действительно многократно использоваться или, скажем, разбить по фреймворкам и писать код, зависящий от конкретного ядра.
                                                        +1
                                                        Хотел выложить сниппет, а регистрации через FB или TW нет. Исправляйтесь ;-)
                                                        Сервис интересный, понравилось все, единственное что я бы подключил на вашем месте History API, не слишком это трудно, но для пользователя очень удобно
                                                          0
                                                          Спасибо за наводку. Займусь.
                                                          0
                                                          Мне нравится реализация cнипетов в Sublime Text 2. Они работают так, что пользователь начинает набирать функцию или часть конструкции, затем нажимает tab и, на основанииь того что он начал набирать (паттерн находится в сниппете), выводится сниппет или список. По нажатию enter, в случае списка, выводится весь сниппет причем курсор или курсоры находятся уже в нужных местах.
                                                          Эти сниппеты есть уже готовые, для основных фреймворков, а можно создавать свои, как локально, так и на github, причем рекомендуется заводить отдельный аккаунт на github для сниппетов.
                                                            +1
                                                            Отлично. Рад за ваш проект, надеюсь он получит поддержку и развитие. Сам планировал писать в точности такой же.
                                                            Хотелось бы, чтобы у вас появилось какое-то API и более удобный интерфейс.
                                                            Критика по пунктам.
                                                            — Сейчас категории видны в только подвале, хотя это один из важных элементов поиска сниппетов, который стоило бы оформить тегами в боковой колонке.
                                                            — Необходимы ключевые слова на сниппет и динамический поиск, к примеру, искать отключение выделения user-select можно как по запросу «select», так и по запросу «выделение», но сделать это быстро и удобно через ваш поиск совершенно невозможно.
                                                            — Третье, самое важное — размещайте код сниппета прямо в блоке с заголовком. Очень неудобно переходить на страницу сниппета ради какого-то мелочного куска кода. Заголовок сниппета вообще почти никогда ни о чем не говорит, а вот код можно почти всегда сразу узнать. В идеале, конечно, вообще отказаться от заголовков и оперировать прокомментированными кусками кода, как это сделано к примеру в Backbone annotated source. Заголовок и описание сниппета в отрыве от кода — самая бессмысленная и досадная вещь.
                                                              0
                                                              > В идеале, конечно, вообще отказаться от заголовков и оперировать прокомментированными кусками кода, как это сделано к примеру

                                                              Нереально и непонятно нафиг это надо, логичнее позволить автору снипета внятно описать по-русски назначение снипета, чем извлекать сводную информацию каким-то алгоритмом написанным на коленке. В куче сниппетов вообще комментариев не будет, особенно в «каком-то мелком кусочке кода» :)
                                                                0
                                                                Это надо для того, чтобы не плодить бессмысленные мета-сущности типа названий и описаний, а использовать распространенные практики документирования кода, типа javadoc. В сто раз удобнее писать док к коду прямо в коде, а не где-то на другой планете.
                                                                  0
                                                                  Мне нечего добавить к моему предыдущему комментарию :)
                                                                0
                                                                3. Не согласен, т.к. сниппет может и из десятка строк состоять. Лучше писать понятный заголовок.
                                                                  0
                                                                  Этот код может быть свернут, но он не дожен быть на другой странице. Мне заголовки ничто не говорят, это — субъективная точка зрения автора на его код, в то время как код скажет все.
                                                                    –1
                                                                    > Мне заголовки ничто не говорят

                                                                    — У меня для вас две новости плохая и хорошая.
                                                                    — Давайте плохую.
                                                                    — Медицина доселе не сталкивалась с таким заболеванием, оно неизлечимо
                                                                    — А хорошая?
                                                                    — Болезнь назовут вашим именем.
                                                                  0
                                                                  По поводу поиска — это да. Планирую сделать расширенный поиск. Так удобнее.
                                                                  По поводу неудобства просмотра кода — справа под каждым заголовком сниппета есть иконка глаз, нажимая на которую раскрывается сниппет. И вам не обязательно переходить на эту страницу.
                                                                  Спасибо за конструктивные замечания =)
                                                                    +1
                                                                    Оу, понятно. Видимо стоило тогда глаз поместить рядом с заголовком или как -то отдельно оформить в виде filded code. Сейчас в блоке метаинформации совсем не понятно, что если кликнуть на глаз — откроется код.
                                                                      0
                                                                      А вот это мысль! Спасибо. Так и сделаю
                                                                  +2
                                                                  Норм идея, для сайта. Тока дизайн неудобный

                                                                  1) Нет кнопки «поиск» в форме поиска.
                                                                  2) Куча серых бейджеров смотрятся… как куча серых бейджев, надо цвет или что-то ещё, может убрать фон серый у них )
                                                                  3) Тултипы категория, дата создания, пользователь и т.д. — это для совсем тупых пользователей? :)
                                                                  4) Я бы вызуально разделил последние снипеты на две колонки на морде сайта
                                                                  5) Кому вообще нужны последние снипеты? Выводите популярные снипеты. Если нет рейтинга популярности можно просто счётчтик просмотров вести
                                                                  6) Пункт меню «страницы» очень странный, может всё таки информация или там помощь, не? :)
                                                                  7) Что такое сниппет и для чего вообще этот сайт? — я бы вынес это на самый верх. Уж точно полезнее чем последние снипеты.
                                                                  8) Категории снипетов в подвале — fail. Надо наверх или в сайдбар.
                                                                  9) snippets.su/topic/141/a/ snippets.su/topic/141/aaaaa/ snippets.su/topic/141/aasdfalskdjflkasj/ — только по адресу с правильным адресом должен быть http 200, остальные должны редиректить на правильный урл 301-редиректом
                                                                  10) Нельзя запостить снипет без регистрации — неудобно.

                                                                  имхо :)
                                                                    0
                                                                    Вот это подборочка! Не обещаю что все, но что-то из этого списка я поправлю по вашей наводке. Спасибо.
                                                                    +2
                                                                    1. Если говорить о личной коллекции сниппетов, то самое главное — возможность быстро найти нужный сниппет. А значит нужна фильтрация по языкам и тегам. Кроме того, некоторые предпочитают вместо тегов использовать древовидные папки.
                                                                    2. Как искать только по своим сниппетам? Можно ли делать сниппеты приватными? (черновик — это не совсем оно)
                                                                    3. Пример верстки, состоящий из html+css+javascript — это какой язык (категория)? Так же сниппет может и из нескольких «файлов» с кодом состоять, написанных на разных языках.
                                                                    4. Если говорить о публичной библиотеке сниппетов, то надо заботиться о качестве сниппетов:
                                                                    4.1. Код должен быть с документацией, примерами использования.
                                                                    4.2. Код должен быть с тестами, причем определять покрытие кода и запускать тесты можно автоматически.
                                                                    4.3. Для этого любой человек должен иметь возможность изменить любой сниппет или хотя бы форкнуть его и предложить свой патч. (Кто может изменять сниппеты можно определять на основе репутации, как на stackoverflow.)
                                                                    4.4. Если код будет меняться, то нужна система контроля версий.
                                                                    4.5. Сниппеты должны быть организованы как по тегам, так и в древовидной структуре. Причем пользователи с репутацией должны иметь возможность изменять это.
                                                                    4.6. Для сниппетов верстки\фронтэнда нужно что-то типа jsfiddle.net

                                                                    И т.д. Получается довольно сложно…
                                                                      0
                                                                      да не надо это всё :) Вот пример простого сайта снипетов, он работает и там нет ничего сложного: djangosnippets.org/, раньше там поиска даже не было, кажется :)
                                                                        0
                                                                        Там есть поиск, теги, рейтинг сниппетов, популярность сниппетов, версия django, комменты… Сомневаюсь, что кому-то реально нужен сайт сниппетов без поиска и вообще без всего.
                                                                          0
                                                                          У обсуждаемого сайта, кажется, уже есть часть этого функционала. Оставшийся прикрутить не сложно. Я писал, что не нужны сложные вещи, о которых вы писали выше. Вообще сложность не в фичах, а в маркетинге. Где взять трафик на сайт.
                                                                            0
                                                                            Оригинальный подход. Мне нравится =)
                                                                              0
                                                                              Как понять оригинальный? Единственный подход. Вот вы пост опубликовали на хабре зачем? Маркетинг, привлекаете пользователей :)
                                                                        0
                                                                        Спасибо. Я не все продумал и не все реализовал из задуманного. Это пока прототип. Я не претендую на первое место. Но с такими отзывами можно действительно сделать что-то стоящие. Еще раз спасибо.
                                                                        0
                                                                        Считаю ваш сайт невероятно полезным для меня, в закладки.
                                                                          +1
                                                                          чем больше таких сервисов и чем лучше они будут индексироваться поисковиками тем лучше. При программировании часто необходимые куски кода мне выдает гугл. Судя по отзывам у всех требования разные и универсального удобного инструмента здесь сделать не получится. Но как раз гугл в итоге и становится таким универсальным инструментом. Еще бы он позволял добавлять свой ответ на вопрос на который ответ не найден. И, например, сохранял бы его в аккаунте пользователя. И вообще никаких инструментов больше не надо было. А еще бы в этом же аккаунте хранить закладки и иметь возможность расставлять теги и разбивать на категории…
                                                                            0
                                                                            Обычно примеров исходников в документации по интересующей сфере более чем достаточно. Возможно новичкам было бы полезно такой вот сборник, но опять же встает вопрос качества этих кусков кода.

                                                                            А вообще для новичков такого рода сервисы могут быть даже и опасны, перестанут думать…
                                                                              +1
                                                                              C точки зрения сервисов — коллекторов кода мне больше импонируют такие сервисы как phpclasses.org. В нём собраны не просто хаотичные куски программ, выдранные откуда ни возьмись, а оформленные в классы законченные функциональные модули, выполняющие конкретные задачи. Как правило они снабжены описаниями или example'ами. Можно скачать модуль себе, включить в свой код и ничего не исправлять внутри.
                                                                            +1
                                                                            Начинание правильное, сервис мог бы быть полезным для меня, ЕСЛИ БЫ:
                                                                            1. Была возможность интеграция в среду разработки. Без этого — проще пользоваться сторонними средствами.
                                                                            2. Была возможность подстановки значений. Я использую сниппеты не столько как сокровенное знание об алгоритмахх, сколько уменьшение рутинной писанины. Часто случается, когда одну и ту же строчку нужно написать много раз(например название свойства — его использует геттер, сеттер и поле для хранения значения)
                                                                              +1
                                                                              Подправьте обработку строки поиска. Вот резльтат на запрос «c++»:
                                                                              A Database Error Occurred Error Number: 1139 Got error 'repetition-operator operand invalid' from regexp SELECT COUNT(*) AS `count` FROM `topics` WHERE (`topic_text` REGEXP 'c++' AND `topic_status` = 1 ) OR (`topic_title` REGEXP 'c++' AND `topic_status` = 1 ) Filename: /var/www/cdsnipp5841/data/www/snippets.su/modules/user/models/search_model.php Line Number: 19

                                                                              Only users with full accounts can post comments. Log in, please.