где удобно хранить куски кода
10 простых бесплатных сервисов для хранения кода
Каждому программисту рано или поздно приходится стыкаться с проблемой, когда нужно где-то сохранить свой код, а на своем компьютере это по какой-то причине сделать невозможно. Или же нужно показать код другому программисту, который находится за тысячи километров, или заказчику. Для фрилансеров это очень актуальная проблема, и Freelance.Today решил подсказать вам, куда можно «закинуть» свой код на хранение.
Все веб-сервисы, которые позволяют сохранять полезный код, называются одним термином — «pastebins». Эти сервисы используют не только программисты-фрилансеры, но и продвинутые пользователи социальных сетей (например, когда нужно сохранить HTML-код видео, которым потом нужно будет поделиться). Тут можно хранить код, а потом давать ссылки на него другим пользователям.
В сети таких сервисов – хоть пруд пруди. Мы подскажем вам несколько бесплатных и с оптимальным набором функций.
Это больше, чем просто сервис для хранения кода. Он позволяет компилировать код, а также находить и исправлять ошибки. Скомпилированный код можно запустить в сети. Ideone поддерживает около 40 языков программирования. Но при всех своих плюсах сервис имеет один недостаток – зашифровать паролем код тут нельзя.
Дает возможность не только размещать текст или коды, но и указывать «срок годности» каждого отрывка, архивировать отдельные отрывки, подсвечивать строки, назначать суб-домены. Но скрыть код с помощью пароля тут тоже нельзя.
Тут можно легко сохранить код и потом делиться ссылкой на него с друзьями. Также есть возможность запаролить свой код, если вы хотите, чтобы он был доступен кому-то одному. Уже созданные отрывки можно архивировать и задавать порядок.
TinyPaste позволяет путем сохранения кода еще и немного заработать на бонусах, которые выдает система за каждое посещение сервиса.
Какие еще возможности дает TinyPaste:
1. Архивация фрагментов кода;
2. Шифрование кода паролем;
3. Подсвечивание отдельных фрагментов по желанию;
4. Назначение суб-доменов;
Разработан специально для хранения HTML страниц и разметки. Также тут можно хранить простой текст. Его можно также использовать в качестве анонимного веб-хостинга для HTML-страниц.
Это онлайн-компилятор, который поддерживает 13 самых популярных языков программирования. Тут можно не только хранить свой код, но и запускать его в сети. Один минус – защитить свой код паролем тут нельзя.
Довольно легкий и простой сервис для хранения кода. Среди полезных функций пастебина – подсвечивание кода, использование пароля. Сервис автоматически задает каждому новому отрывку версию.
Dpaste поддерживает всего несколько языков, но это один из простейших инструментов для размещения и сохранения кода в сети. Позволяет выделять отдельные фрагменты кода, а также архивировать отрывки.
Это один из самых мощных и функциональных сервисов для хранения кода. Среди возможностей, которые он предоставляет, и защита кода паролем, и возможность добавления вкладок, установка срока действия и подсвечивание отдельных фрагментов кода.
Pastebin.ca
Дает возможность размещать код, делиться им, защищать паролем, устанавливать срок истечения действия, архивировать отрывки и даже оставлять к ним комментарии. Простой, функциональный и очень удобный сервис.
Это далеко не все сервисы для хранения кода, но мы постарались собрать для вас самые удобные, простые и функциональные, для которых не требуется регистрация или оплата. Пользуйтесь на здоровье!
Сверхбыстрое копирование\вставка фрагментов кода
Постоянно программируя на C++/Qt, я заметил, что было бы удобнее хранить где-нибудь свои отрывки кода и иметь к ним быстрый доступ. Конечно же, я принялся искать и нашёл множество готовых программ-органайзеров и сайтов. Я перепробовал их, но меня всё это не устроило.
Хотелось именно быстрого доступа — а значит по глобальным хоткеям. Чтобы нажал — ввёл слова в поиск — получил код. Но такими функциями обладали всего две программы, а они были платными и не кроссплатформенными.
Поэтому я взялся написать свою программу на Qt. Она оказалась настолько удобной, что я уже не представляю свой кодинг без неё и конечно же решил её опубликовать — вдруг кому ещё пригодится? Под катом расскажу о проблемах и задачах, которые пришлось решить, выложу свой опыт, а также обзор самой программы и её исходного кода.
История разработки
Для начала я решил — программа должна быть, маленькой, удобной и шустрой. А значит — следует поместить программу в трее, чтобы не мешалась на панели задач. Благо что Qt предоставляет для этого удобное кроссплатформенное решение в виде класса QSystemTrayIcon. Также программа должна обязательно работать на глобальных хоткеях. Вот тут возникла проблема! Дело в том, что Qt, к сожалению, из коробки не поддерживает их. На то есть библиотека libqxt, которую я весьма успешно использовал почти год под Qt 4.8. Однако под Qt 5 её по неясной мне причине ещё нормально не доработали (на тот момент) и под Win7 она собираться ну никак не хотела — и я бросил эту затею. Вместо этого вставил самую капельку нативного кода — вызов winApi функции RegisterHotKey. Это единственная нативная вставка в программе — и я думаю что будет совсем легко доработать её под Linux или Mac.
Сами куски кода я решил сохранять в XML-базе данных. Может это и не лучшее решение, но оно пока вполне справляется с задачей. Да и вообще привык я к нему.
В качестве основы для редактора я взял, конечно же, QTextEdit. Тут меня ждал приятный сюрприз — код, скопированный из QtCreator — копируется как HTML с разметкой, а следовательно — с подсветкой синтаксиса. Тут же необходимость писать встроенную подсветку синтаксиса для C++\Qt отпала сама по себе. QtCreator имеет очень крутую подсветку синтаксиса, особенно если её настроить под себя.
Далее, когда уже была возможность вставить в окошко код и он уходил в базу, а затем в файл xml, встал вопрос о том, как его удобно и быстро получить. Для этого я написал маленький поисковик, который ищет куски кода, где встречаются все слова, указанные через пробел. Пока его вполне хватает. В моей личной базе уже около 100 фрагментов кода и всё равно среди них я отлично ориентируюсь.
Также сделал кейворды. Ну как же без них? Поиск идёт не только по основному коду, но и по ним тоже. В кеях можно указать языки программирования, к которым относится данная паста, например «c++,qt» или «qml,js». Если в результате поиска появились фрагменты кода из нескольких языков, можно дифференцировать их, добавив ключевое слово-язык.
Дорабатывая программу, нарисовал в GIMPe логотип — фигурные скобочки. Просто и понятно.
Обзор программы
Можете скачать Windows-дистрибутив программы здесь или собрать её из исходников, скачав их с github. Только распаковывайте их не на рабочий стол, как это делают многие. Дистрибутив вместе со всеми dll весит 16 МБ в запакованном виде и 40 в распакованном — Qt5 значительно разжирел и даже простейшая программа требует тащить за собой целую массу библиотек. Но я думаю что это не проблема, тем более что оно никак не сказывается на скорости работы программы.
Распакуйте программу в любую папку на диске и запустите. Она создаст в своей папке файл конфигурации config.xml, а потом, при сохранении, чистую базу данных для вашего кода base.xml. Собственно как выглядит главное меню — вы можете увидеть на скрине в заголовке статьи. Интерфейс программы пока что весь на английском, чтобы не было проблем со сборкой на некоторых системах — сообщения и подписи пока-что в исходниках.
Добавление нового фрагмента кода осуществляется по глобальному хоткею ctrl+D, а поиск — по win + V. Вы можете бросить в меня камень за такие «глобальные» хоткеи, но эксперименты показали что они самые удобные. Да, возможно вы привыкли по ctrl+D отправлять код из QtCreator куда-либо. Если это так критично, можете зайти в конструктор класса CodePaster и поменять там хоткеи на те, которые вам угодны. В дальнейшем это можно будет сделать через GUI.
Продолжим. Допустим, вы написали какой-то удобный алгоритм, или освоили новую конструкцию языка, которую нет желания печатать каждый раз. Вы просто выделяете ваш блок кода в вашей любимой IDE (например в креэйторе) — и копируете как обычно через ctrl+C. Тут же будет удобно и совсем рядом — не отпуская ctrl — нажать на D. Вылезет окно поверх вашей IDE — и код уже сам прыгнет в него! Программа в автоматическом режиме читает буфер обмена, вставляя из него код. Ещё тут есть ещё 2 небольшие фичи — вставляется подпись перед кодом в виде комментария «//», а также у самого кода убираются лишние отступы. Т.е. если вы скопировали его из середины программы, то он сдвинется влево до упора.
Вы просто нажимаете «OK» — и ваш код уже в базе! Более того, она тут же сохранилась на жёсткий диск, чтобы не потерять данные в случае какого-либо сбоя.
Далее — когда вам захотелось быстро скопировать этот код — нажимаете win + ctrl. Почему именно его? Мне он кажется удобным вариантом и нигде не задействован. Вы увидите маленький поисковик по коду, и уже оттуда сможете скопировать нужные вам фрагменты. Что касается самого поисковика — то у каждого куска кода есть контекстное меню. Вы можете удалить его из базы, можете отредактировать, а можете посмотреть его свойства.
Как видите, фрагменты кода разделяются через «—«, у каждого есть свой id, а также мелкие плюшки — программа запоминает дату добавления и сколько раз он был скопирован.
Пришлось немного потрудиться, чтобы сопоставить некоторый блок текста внутри QTextEdit некоторому объекту Code — при обновлении поиска формируется «карта» — лист из специальных объектов, каждый из которых хранит начальную и конечную позицию в QTextEdit и указатель на объект кода, который этой области соответствует.
Между прочим — прогу можно использовать не только для кода, а вообще для любого текста. Например я весьма успешно забил туда свои почтовые ящики и телефон, копирую их когда надо. Получается что-то типа блокнота с быстрым доступом и поиском.
Примеры
Приведём простой пример использования программы — если вам вдруг понадобилось кинуть в вашей программе мессаджбокс для отладки (именно его, а не вывод qDebug) — заранее подготовив код, вы просто набираете win + V и вбиваете «mes» — этого достаточно, чтобы найти нужный кусок кода и скопировать его. Вы потратите одно нажатие хоткеев, набор 3 символов, Enter (который в дальнейшем можно будет убрать), и выделение-копирование. А теперь дайте сравним — сколько времени вы потратите, чтобы скопировать его из того же ассистанта? Даже если он на глобальном хоткее — вам придётся через выделение или клавиш получить фокус для строки поиска, ввести туда «mess», выбрать нужный класс мышкой (!), промотать вниз до того места где есть пример (если он есть) и только тогда скопировать его. Это как минимум в 2 раза дольше. Qt Assistant — это просто идеальная документация, однако для копирования-вставки постоянно используемых кусков кода он не подходит.
Какие варианты вы ещё предложите? Заходить каждый раз на сайт pastebin и искать там? Это тоже лишние задержки. Вводить в гугле по 100 раз одни и те же запросы? А ведь большинство программистов, с которыми я общался на эту тему — так и делали — они каждый раз всё гуглили. Но ведь один раз нашёл — можно сохранить в какой-нибудь «кэш» для быстрого доступа, изменив если надо — и использовать на здоровье! Этим кэшем и должна быть программа, хорошо интегрированная с системой для большего удобства.
Приведём другой пример. Я часто сижу на форуме prog.org.ru и постоянно нахожу или получаю много хороших решений разных небольших задач. Например, как с помощью QSettings добавить программу в автозагрузку Windows. Или как динамически подгрузить ui-форму. Там целые алгоритмы. Каждый раз искать то нашёл один раз — это не комфортно. Хорошие и красивые решения приятно сохранять для себя для будущего использования.
Ещё один пример — я один раз сохранил код для bat-файла, который добавляет переменную в windows environment variables. Когда он бывает нужен — просто копирую его в командную строку вместо использования неудобного GUI.
Вы конечно также можете предложить сохранять фрагменты кода в файлы, однако как только встанет вопрос о быстром доступе и поиске, а также об удобной организации таких файлов — вы увидите, что это не самое лучшее решение. Большие куски кода — целые библиотеки и классы — конечно же стоит хранить именно так, но речь идёт о маленьких фрагментах, которые мы часто используем.
Если вы работаете сразу с несколькими языками программирования — преимущества использования такой программы станут ещё более существенными. Вы можете забыть как выглядит та или иная конструкция на определённом языке — и через поиск легко вспомнить.
Обзор исходного кода
Исходный код я писал жёстко по стандарту Qt Coding Style. Временами использовал конструкции С++11. Я думаю при его чтении проблем не возникнет. Все окна построены на основе виджетов, однако потом планирую перевести их на QML.
Вообще — не судите строго. Это мой первый публичный проект и я надеюсь что хоть кому-то пригодится если не прога, то те моменты, которые я изложил здесь. Если прога окажется реально полезной и вы плюсуете — то могу её доработать. В планах — сделать её ещё удобнее (идеи есть), подсветку синтаксиса для других языков и поддержку хоткеев для Linux\Mac.
Также не исключаю, то что где-то в статье или в коде есть опечатки и\или ошибки. Рад буду принять здавую критику.
6 приложений, в которых удобно хранить QR-код
С 30 октября по 7 ноября объявлены нерабочие дни по всей России, но в некоторых регионах они начались раньше — уже с 28 октября.
Курс о больших делах
Госуслуги СТОП Коронавирус
Это официальное приложение Минцифры: в нем можно хранить сертификат о вакцинации от коронавируса на русском и английском языке, заполнить анкету прибывающего и держать в одном месте все результаты ПЦР-тестов и тестов на антитела.
Чтобы войти в приложение, нужен отпечаток пальца или пин-код. На главной странице можно одним кликом добраться до QR-кода.
Apple Wallet
Где скачать: в iOS приложение предустановлено
Системное приложение Apple для хранения банковских карт, билетов, проездных, посадочных талонов и скидочных карт поддерживает и QR-код ы вакцинированных или переболевших. Wallet можно легко открыть двойным нажатием на кнопку блокировки Айфона.
Google Pay
Google Pay — это аналог Apple Wallet для смартфонов на Android: в этом приложении тоже можно хранить банковские и скидочные карты, посадочные талоны, проездные и QR-код ы.
Тинькофф Мобильный банк
Яндекс
Это главное приложение «Яндекса» с поисковиком, «Дзеном» и Алисой. QR-код можно найти в том числе и с помощью голосовой команды «Алиса, найди QR-код ».
EMIAS.INFO
Это приложение подойдет только москвичам, которые прикреплены к одной из столичных поликлиник. С помощью него можно посмотреть свою электронную медкарту и записаться к нужным врачам, а также быстро открыть QR-код при необходимости.
Хранение кода в бд или собираем код по кирпичикам
Данная статья написана Napolsky. По известным причина он не смог ее опубликовать. Если статья вам понравилась — поощрите автора известным способом.
Как все начиналось
Для того чтобы понять, а «зачем оно собственно надо» быстренько пройдем тот путь, который и привел меня к хранению кода в бд. Так сложилось, что свой путь в веб программировании я начинал не с написания каких-либо скриптов или модулей для существующих систем, а сразу с написания собственного движка сайта с абсолютного нуля. К этому моменту я имел двухлетний опыт программирования на C++ и, конечно же, по накатанной пытался строить свой веб движок на ООП (правда в то время в PHP от ООП было одно название 🙂 ). В пределах разумного, я очень люблю свои «велосипеды». Особенно большие. И прежде чем воспользоваться готовым решением, всегда задаюсь вопросом «а нельзя ли написать получше?».
Вообще написание своих велосипедов очень полезно, особенно для начинающих разработчиков (когда на первом месте стоит поднятие профессионализма, а не написание кода в отведенный срок и бюджет). Только написание собственных решений дает понимание того, как что-то устроено изнутри на самом низком уровне. А это в свою очередь дает понимание сложности, ресурсоемкости, скорости тех или иных подходов, что, в конечном счете, выливается в выбор правильного инструментария для решения задачи. Например, в университете нас заставляли писать свои pushback’и для массивов, чтобы мы не забывали, что за казалось бы простыми и тривиальными вещами может скрываться что-то гораздо большее.
В итоге получился движок, построенной по довольно таки классической схеме: папки с классами, модулями, шаблонами и прочим. Ну и соответственно бесконечные инклуды всего этого при генерации страниц. А так как во мне, как и во многих программистах живет рационализатор, то меня стали беспокоить издержки такого подхода. В частности, больше всего мне не нравился тот факт, что приходилось подключать много «ненужного» кода («мертвого» кода, который заведомо не будет выполнен на странице) для страниц (например всю библиотеку, когда на данной странице нужна будет лишь одна функция из нее).
Не задумывались ли вы над количеством «мертвого» кода на странице? На самом деле его количество как правило в 7-15 раз превышает количество кода, который действительно будет выполнен при обращении к странице. Возьмите к примеру класс комментариев. В нем будут методы render(), delete(), edit(), add(), compress(), answer() и т д. При этом за 1 выполнение скрипта как правило будет вызван всего 1 из этих методов (delete — при удалении, edit — при редактировании и т д), а остальные заведомо не будут вызываться. Вот и считайте, сколько такого лишнего кода набежит на странице.
По началу я пытался проводить оптимизацию, «разрезая» и «склеивая» большие библиотеки или классы под нужды различных страниц, уменьшая таким образом количество инклудов и «мертвого» кода. Но это, конечно же, тупиковый путь. Шло время. Проекты, написанные на этом движке (царство им небесное 🙂 ) становились все больше. Вместе с этим росло количество и размеры подключаемого кода, а вместе с ними и время генерации страниц. Я начал все чаще думать о том, как избавиться от «мертвого» кода. И тут меня посетила смелая, показавшайся даже бредовой мысль. А что если…
Рождение идеи
А что если разделить код на максимально мелкие независимые части, чтобы иметь возможность собирать на странице только то, что действительно нужно? То есть разделить все функции, классы (в идеале и методы классов) и прочее. Таким образом, мы получим много много маленьких «кирпичиков», из которых потом будем складывать страницу. Тем самым появится возможность полностью избавиться от «мертвого» кода и инклудов. Меня по-настоящему взбудоражила эта идея, но вопросов было больше чем, ответов: как это сделать, будет ли это работать, какие подводные камни ожидают в реализации, насколько быстра такая система? Короче пока я не имел ни малейшего представления о том, как это реализовать и как оно будет работать. Но попробовать, конечно же, стоило.
Путь воина
Идеология заключается в том, что разбив всё на максимально малые кусочки кода, мы сможем собрать из них что угодно.Вопроса о том, как хранить «кирпичики» кода не возникало — так как они уже были не кодом, а являлись по сути данными с набором атрибутов, то единственным возможным вариантом было использование бд. Постараюсь показать принцип работы подобной системы максимально просто и абстрактно, только передав суть.
1 Хранение кирпичиков
Тут все просто и понятно: каждая отдельная функция, класс (а лучше даже метод класса), контроллер модуля, представление модуля и т д — это отдельная строка в бд. Например в простейшем случае таблица может иметь вид id|code|name|componentType (где componentType — тип кирпичика(функция, класс, модуль..))
2 Хранение зависимостей
Так как код одного кирпичика может вызывать другой кирпичик (например зависимости типа функция-функция, модуль-функция или даже страница-модуль), то нужно хранить репликации. Сделать это можно с помощью таблицы репликаций, которая, в простейшем случае, имеет вид id|parentId|childId. Таким образом мы решаем проблему правильного сбора «кирпичиков» для вложенных конструкций:
В этом случае в таблице репликаций будет запись, что А «нуждается» в B. Следовательно при подключении А автоматом будет подключена B.
3 генерация кода страниц
Хорошо, у нас есть все кирпичики, но как из них собрать код страницы? Для этого, конечно же, нужен отдельный скрипт, который будет собирать из наших бесполезных самих по себе «кирпичиков» работоспособный код страницы. Назовем этот скрипт Codegen. Каким он будет зависит от того, что и как вы хотите собрать из своих «кирпичиков». В этом заключается одна из сильных сторон подхода: из одних и тех же кирпичиков вы можете собирать принципиально разные коды страниц. Можете даже собрать «классическую» архитектуру. Во избежание недопониманий: генерация кода страницы годегеном происходит 1 раз, а не при каждом обращении к странице.
На выходе получаем монолитный сгенерированный код для каждой страницы. При этом, в зависимости от Codegen, возможно как сразу получать весь необходимый код для страницы, так и подгружать некоторые части во время выполнения страницы (посредством eval из базы).
Пожинаем плоды
Таким образом мы можем достичь следущих главных результатов:
— полное отсутствие инклудов на странице
— сведение «мертвого» кода к нулю
600%. Напоминаю, что это без кеша в классике. с кешом цифра будет поменьше)
За и против
Рассмотрим подробно плюсы и минусы идеологии хранения кода в бд.
Минусы
—Невозможность полноценно использовать IDE.Как следствие.Так как код хранится в бд, то для его редактирование/написание должен быть свой интерфейс(я например использую веб интерфейс). Как это примерно выглядит, можно посмотреть здесь. Вообще для меня особых неудобств это никогда не представляло. Все необходимые мне инструменты (подсветка кода, горячие клавиши..) могу быть легко реализованы на веб интерфейсе. Для тех, кому нужно большее, полноценной замены IDE все же нет.
—Сложность отладки. Вытекает из первого пункта. Осложняется тем, что если вы захотите какой-то код динамически загружать из бд и выполнять его функцией eval, то найти ошибку может быть действительно непросто.
—Поддержка. Как и у всего, что не распространено поддержки вашего проекта другими разработчиками не будет никакой. Действительно проблема, которая решается только популяризацией.
В этом топике так же были указаны еще минусы с которыми я попробую поспорить:
исходники это файлы, в итоге с ними можно делать любые файловые операции
Безопасность, прямой код инжекшн в случае проблем
Бекап, представляете, бывает так, что их не делают, и тогда любые ваши «кастомизации» on site коту под хвост если сломаеться база
Для работы движка (после того как сработает кодеген) бд уже не нужна. То есть сайт может работать и при выключенной бд.
Плюсы
— Скорость. Для меня это стало решающим фактором. Впервые, когда я сравнил скорость на старом «классическом» движке и на новом, я был потрясен результатом.
— Гибкость на макроуровне. Чем из наиболее мелких и простых частей состоит конструктор, тем более сложные вещи можно из него собрать.
— Атрибуты у частей кода. Так как наши кирпичики хранятся в таблице, то каждому из них мы можем задавать какие либо атрибуты, посредством добавления соответствующего поля. Это действительно очень важная особенность, открывающая новые просторы в разработке.
— Возможность проводить любую обработку исполняемого кода перед его выполнением. Как вы помните, весь код у нас проходит через codegen, а следовательно в нем мы можем его модифицировать произвольным образом. Например, применять языковые пакеты на стадии генерации кода страниц. Или еще таким образом: если в коде часто встречается какая-нибудь строка, например
А на стадии генерации просто заменять его на нужный вам код. Так что предварительная обработка кода тоже дает простор для фантазии программиста.
Заключение
В этой статье я хотел показать, что идеология хранения кода в бд не такая безнадежная, как может показаться на первый взгляд. На ряду с очевидными минусами, есть и уникальные плюсы, которые раздвигают рамки возможностей в веб программировании. И, что немаловажно, не только в теории, но и на практике: я использую этот подход уже на протяжении трех лет. А это по-моему, достаточный срок для проверки его «выживаемости» в реальных условиях. Я ни коим образом не утверждаю, что хранение кода в бд лучше, чем использование классического подхода. Но я верю, что это вполне конкурентоспособная концепция, и работа в этой области может дать толчок для появления принципиально новых фреймворков и CMS, с уникальными возможностями.