(upd) Иван Корюков, Эмммм. Я не очень люблю, когда окружающие лучше меня знают, чего я хочу, ну да ладно. Иногда они даже угадывают (хотя бы потому, что они уже бегали по граблям, а я - нет!) :)
Попробую пояснить, что не так в данном случае.
Очень абстрактный пример:
задача: получить на вход два числа, вычислить их сумму, вывести результат
что предполагают окружающие: наверное ему нужен интерпретатор, а то вдруг ему не только сложение понадобиться, точно, расскажу ка я ему про yacc...
В результате исходная задача разрастается из одного scanf и одного printf в ахапку модулей, которые могут абсолютно всё, но абсолютно не используются. А потом оказывается, что это ещё и поддерживать нужно.
Я не против общих решений. Но иногда нужно что-то мелкое и примитивное. И совсем не нужен over engineering.
Итого: я понимаю, что есть регулярки. Но моя задача слегка иная: найти готовое решение, которое умеет сравнить шаблон со строкой. И чтобы это шаблон читался. Мной. Не компом :)
Сравни пару строк: Антон Б: p = '<{}="{}">'
твоя: /<([\w-_]+)\s+src="([^"]+)">/
Какая читабельней?
(upd) Владимир Куц, Спасибо, конвертер %s в регулярку - кажется достаточно красивым решением.
Про etree - я от него сознательно отказался. Потому что он лажает.
Например, у меня он отдаёт пустую строку, если внутри xml тега встретился какой-то другой тег О_О
Эммм. Я точно знаю, что мои входные строки будут состоять из знаков препинания и подстрок. Зачем мне использовать невнятные регулярки там, где достаточно просто написать %s??
Можно и так. Но. Есть подозрение, что с очередным обновлением wordpress-а может что-нибудь отвалиться. А чинить некому, ибо автор забросил плагин. И придётся искать новый, после чего бегать по всем заметкам и править синтаксис на новый.
Эммм. Спасибо, но я не уверен, что хочу снести одну CMS и поставить другую :)
А у wordpress.com используется какой-то кастомизированный wordpress?
Я всегда думал, что CMS имени wordpress везде одинаковый, но на wordpress.com ещё и хостинг дают :)
longclaps: Си. Это значит, что остаётся только процедурное программирование. А жаль.
Там пониже в ответах ссылка была на design patterns ("банда четырёх"). Вот она как раз про проектирование. И ещё можно глянуть в "Объектно-ориентированный анализ и проектирование с примерами приложений. Гради Буч".
Но обе эти книжки они ближе к теории, а не к практике, ИМХО. Хотя и очень увлекательны.
А ещё есть книжка про Рефакторинг, Фаулера. ИМХО, книжка типа must read. Она намекает на то, что код можно сделать лучше. И, кажется, из этого следует простой вывод: можно немного поговнокодить. А потом, вооружившись полученными знаниями, спокойно порефакторить код. Правда с юнит-тестами на микроконтроллерах не понятно что делать.
Прочитал твой ответ, прифигел, и забыл о нём на месяц.
Постфактум могу сказать следующее: проблема не в том, чтобы собрать данные, а в том, чтобы их проанализировать. Я умею пользоваться пингом и прокмоном, и даже немножко фиддлером. Но легче от этого не становится. Ибо не понятно, что и как в полученных гигабайтах потом искать. По хорошему, даже если точно знать, что в данной проблеме виноват каспер и именно он зависает, то процесс поиска "вот тут у него случился дедлок" несколько нетривиален.
Виталий: "думал на счет указателей на функцию, но не разу не "осмелился" так поступить." - ну, можно поштурмить, как _чисто технически_ прикрутить к библиотеке немножко своего кода. (Не замахиваясь на архитектуру и всё такое).
Мне в голову приходит:
указатель на функцию - пользователь библиотеки пишет нужную функцию и передаёт указатель на неё библиотеке
базовый класс с виртуальными функциями - пользователь библиотеки пишет класс наследник, который переопределяет пару виртуальных функций, которые и реализую всё что нужно
наверное со статической линковкой можно что-то придумать - пользователь пишет функции, на которые ссылается библиотека, и которые втягиваются линковщиком в конечный бинарь
Какой хоть язык программирования в итоге будет использоваться? C/C++?
Кхм. Я не готов дать полноценный ответ на твой вопрос, но могу озвучить два соображения:
1. Может быть задача решается банальным указателем на функцию? Делаешь либу, в ней функцию init, которая принимает пару указателей. Кажется, что при приходе запроса либа может просто вызвать пользовательскую функцию, которая всё и разгребёт. Кажется, что даже для микроконтроллеров (МК) это не дорого (icall в AVR вроде был).
2. Ты точно уверен, что универсальность нужна? Вряд ли ты будешь перетаскивать свою либу на 100500 микроконтроллеров. Ну устареет твой МК, снимут его с производства. Разово перетащишь на другой. (Вполне допускаю, что я не вижу проблему в целом, и ни разу не прав, да).
ЗЫ: МК я ковыряю в качестве хобби, в рабочее время фигачу на win32 api.
nirvimel: Потому что он может нормально работать неделями с включенным каспером и еметом. И ломается неожиданно. Нет очевидной причины вида "включил - сломалось". Есть только "наблюдения" вида "выключил - заработало".
Иван Корюков, Эмммм. Я не очень люблю, когда окружающие лучше меня знают, чего я хочу, ну да ладно. Иногда они даже угадывают (хотя бы потому, что они уже бегали по граблям, а я - нет!) :)
Попробую пояснить, что не так в данном случае.
Очень абстрактный пример:
задача: получить на вход два числа, вычислить их сумму, вывести результат
что предполагают окружающие: наверное ему нужен интерпретатор, а то вдруг ему не только сложение понадобиться, точно, расскажу ка я ему про yacc...
В результате исходная задача разрастается из одного scanf и одного printf в ахапку модулей, которые могут абсолютно всё, но абсолютно не используются. А потом оказывается, что это ещё и поддерживать нужно.
Я не против общих решений. Но иногда нужно что-то мелкое и примитивное. И совсем не нужен over engineering.
Итого: я понимаю, что есть регулярки. Но моя задача слегка иная: найти готовое решение, которое умеет сравнить шаблон со строкой. И чтобы это шаблон читался. Мной. Не компом :)
Сравни пару строк:
Антон Б:
p = '<{}="{}">'
твоя:
/<([\w-_]+)\s+src="([^"]+)">/
Какая читабельней?