Delphi Zen. Wordpress и delphi
Delphi | Delphi Zen
Если не запускать тесты регулярно — они бесполезны. Частота запусков тестов обратно пропорциональна сложности этой процедуры — чем больше кнопочек надо нажать, тем реже будут запускаться тесты. А если для этого еще надо поднимать IDE…
Сегодня немного обновил свой пример на GitHub, добавил небольшой shell-скрипт build.cmd который:
- Компилирует набор тестов
- Запускает тесты в консольном окружении
- Если все ОК — собирает главный проект
(Обратите внимание, что для того, что бы в пункте 3 проверить, успешно ли выполнились тесты, надо немного подправить dpr файл. Я не знаю почему Embarcadero не сделала rxbHaltOnFailures параметром по умолчанию).
Но можно пойти еще дальше. На текущем месте работы у меня есть скрипты, которые запускают тесты как только содержимое соответствующего файла поменялось на диске. Не успел сохранить файл — уже видишь что поломал.
В любом случае, потратить немного времени на build/test скрипт — очень выгодная инвестиция.
Posted by alexfrantic on Июль 13, 2013
https://delphizen.wordpress.com/2013/07/13/build-script/
Вот она — возможность попробовать Test Driven Development в Delphi. Для этого не надо много времени.
Алгоритм очень простой — вы подписываетесь на рассылку, я отправляю вам 2-3 письма в неделю с небольшими заданиями. Так как TDD — это практика, теории много не будет. А точнее ее вообще не будет. Выполняя задания вы будете отправлять код в облако, где я смогу его смотреть и комментировать. Если вы не выполняете задания, я убираю ваш email из рассылки и продолжаю работать с теми, кому интересно.
Требования: желание прокачать свой programming level, 60-90 мин. времени в неделю, Delphi 2010+
Знать путь и пройти его — не одно и тоже.
Подписаться К сожалению, подписка временно закрыта. Т.к. курс практический, я буду активно работать с подписавшимися. Если все пройдет как я задумал (или лучше) — можно будет повторить. Stay tuned!
Posted by alexfrantic on Январь 7, 2013
https://delphizen.wordpress.com/2013/01/07/try-tdd/
Все началось с проекта по захвату и обработке изображения с камеры. Специфика предметной области требовала задания кучи разных параметров, в итоге окно настроек разрослось множеством табов с десятками TTrackBar’ов, TEdit’ов, TUpDown’ов и т.д. Самое плохое в том, что разобраться во всех этих опциях с каждым днем ставало все труднее.
Недавно подсмотрел способ, как можно более эффективно/красиво/функционально, а главное — просто, сделать окно настроек. Подсмотрел здесь.
Разработка через тестирование (TDD) и Delphi
No matter how slow you are writing clean code, you will always be slower if you make a mess.— Uncle Bob Martin
Большое спасибо всем, кто принял участие в голосовании! Судя по результатам и комментариям — тема актуальна, и многие не используют автоматическое тестирование потому, что в Интернете очень мало информации по этому вопросу. Недостаток вводных статей по тестированию кода, на мой взгляд, в том, что они очень поверхностны. Читателю предлагают сферический пример калькулятора в вакууме, который с реальными проектами никак не связан.
В своей статье я постараюсь исправить ситуацию. Она разбита на несколько частей. В первой я расскажу об автоматическом тестировании и о главной ошибке на пути его внедрения, а также об очень мощном инструменте — разработке через тестирование. Вторая часть будет живым примером такой разработки, я поставлю небольшую реальную задачу и создам проект (с открытым кодом), описывая каждый шаг разработки. Т.к. чаще всего у многих из вас уже есть проекты, которые, естественно, вы не будете переписывать с нуля, я расскажу о том, как внедрять юнит-тесты на существующих проектах и как бороться с сопротивлением начальства и коллег. В завершение — несколько советов и рекомендаций.
Приятного чтения!
Юнит-тест — это код, который тестирует код в автоматическом режиме (т.е. без участия пользователя). Unit в этом слово-сочетании означает то, что тест проверяет только одну, выделенную часть программы (например, функцию, процедуру или метод класса) в изоляции.
Самый простой пример: Вы пишете функцию, которая из XML достает нужные Вам данные. Можно создать новый проект с одной формой и одной кнопкой, по нажатию на которую Вы загрузите XML и передадите его в свою ф-ю, после чего проверите правильность результатов (которые увидите в MessageBox’е). Или напишете процедуру, в которой заранее подготовленный XML передадите своей функции и там же, в коде, проверите ожидаемый результат. Второй способ и будет юнит-тестом.
А теперь развенчаем немного мифов, которые у Вас могли сложиться о юнит-тестах из других статей и рассказов.
Беда вводных статей по тестированию кода в том, что они описывают правила написания тестов как догму: «делайте так, только так и никак иначе, потому что так над
delphizen.wordpress.com
Delphi Zen | Food for thoughts / delphi.frantic.im backup
Если не запускать тесты регулярно — они бесполезны. Частота запусков тестов обратно пропорциональна сложности этой процедуры — чем больше кнопочек надо нажать, тем реже будут запускаться тесты. А если для этого еще надо поднимать IDE…
Сегодня немного обновил свой пример на GitHub, добавил небольшой shell-скрипт build.cmd который:
- Компилирует набор тестов
- Запускает тесты в консольном окружении
- Если все ОК — собирает главный проект
(Обратите внимание, что для того, что бы в пункте 3 проверить, успешно ли выполнились тесты, надо немного подправить dpr файл. Я не знаю почему Embarcadero не сделала rxbHaltOnFailures параметром по умолчанию).
Но можно пойти еще дальше. На текущем месте работы у меня есть скрипты, которые запускают тесты как только содержимое соответствующего файла поменялось на диске. Не успел сохранить файл — уже видишь что поломал.
В любом случае, потратить немного времени на build/test скрипт — очень выгодная инвестиция.
Posted by alexfrantic on Июль 13, 2013
https://delphizen.wordpress.com/2013/07/13/build-script/
Прошло 2 месяца с начала моего экспериментального курса по TDD в Delphi. Он состоял с 2-х частей:
- Введение в DUnit и базовые принципы TDD
- Написание кода, который легко тестировать
Мне кажется, первая часть получилась намного интересней. Она была намного проще и не требовала много времени, фокусировалась на основном наборе навыков. Вторая часть более серьезная, особенно трудно было «заставить» участников писать код по-другому, не так как они привыкли. Вот одна из цитат из переписки:
Это у меня привычка такая, думать наперёд… тесты я выполнял последовательно.. и в конце уже начал понимать, что действительно, в тестах есть такой плюс. Ведь думая, а как оно будет в будущем: а) отвлекаешься б) чем больше объём, тем тяжелее это удержать в голове. Тесты рулят.
Участники использовали Git и приватные репозитории на BitBucket для отправки кода, там же я давал им задания (через Issues) и мы обсуждали код (через комментарии к коммитам). В целом это был очень богатый и позитивный опыт.
На курс подписалось 14 человек, все задания выполнили только 5. Сейчас в свободное время я работаю над DUnit Exercises. Это будет автоматизированая первая часть курса. Подписаться можно здесь.
Posted by alexfrantic on Март 30, 2013
https://delphizen.wordpress.com/2013/03/30/delphi-tdd-results/
Вот она — возможность по
delphizen.wordpress.com
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, System.JSON, IPPeerClient, System.Rtti, System.Bindings.Outputs, Vcl.Bind.Editors, Data.Bind.EngExt, Vcl.Bind.DBEngExt, Vcl.StdCtrls, Data.Bind.Components, REST.Client, Data.Bind.ObjectScope, REST.Authenticator.OAuth, REST.Authenticator.Basic, REST.Authenticator.Simple, REST.Types, REST.JSON, IdHMACSHA1, EncdDecd, HTTPApp, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; RESTClient1: TRESTClient; RESTRequest1: TRESTRequest; RESTResponse1: TRESTResponse; HTTPBasicAuthenticator1: THTTPBasicAuthenticator; Button2: TButton; Button3: TButton; Memo2: TMemo; Edit1: TEdit; IdHTTP1: TIdHTTP; Memo3: TMemo; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var jValue: TJSONValue; str: String; begin str := '{' +'"email": "[email protected]",' +'"first_name": "John",' +'"last_name": "Doe",' +'"username": "john.doe",' +'"billing": {' +'"first_name": "John",' +'"last_name": "Doe",' +'"company": "",' +'"address_1": "969 Market",' +'"address_2": "",' +'"city": "San Francisco",' +'"state": "CA",' +'"postcode": "94103",' +'"country": "US",' +'"email": "[email protected]",' +'"phone": "(555) 555-5555"' +'},' +'"shipping": {' +'"first_name": "John",' +'"last_name": "Doe",' +'"company": "",' +'"address_1": "969 Market",' +'"address_2": "",' +'"city": "San Francisco",' +'"state": "CA",' +'"postcode": "94103",' +'"country": "US"' +'}' +'}'; HTTPBasicAuthenticator1.Username := 'ck_6f28f594097d674abf96ebb6b68****18b9b1f6b'; HTTPBasicAuthenticator1.Password := 'cs_1eede52f328af091dca5d6c7e0b****bc559f1a7'; RESTClient1.Params.Clear; RESTClient1.AddParameter('consumer_key', HTTPBasicAuthenticator1.Username, TRESTRequestParameterKind.pkGETorPOST); RESTClient1.AddParameter('consumer_secret', HTTPBasicAuthenticator1.Password, TRESTRequestParameterKind.pkGETorPOST); RESTRequest1.Resource := 'products'; RESTRequest1.Execute; jValue := RESTResponse1.JSONValue; Memo1.Lines.Add(jValue.ToString); Memo1.Lines.Add(RESTRequest1.GetFullRequestURL(True)); end; |
XML-RPC в Delphi. Первое знакомство с WordPress изнутри. | Grabr
Вот наконец-то и сподобился я на тему работы с XML-RPC в Delphi. Ещё с того самого момента, как испробовал для постинга в блог программу Zoundary Raven, заглядывался на этот протокол, но всё как-то было лень разбираться как и что писать, куда отправлять и т.д. А сегодня получил письмо от читателя блога с просьбой осветить этот вопрос, посоветовались с Altmer’ом и решили “Попытка – не пытка”. Попробуем поведать Вам о первом знакомстве с этим протоколом
121.10.2009
« КомментарииПохожие анонсы
Программирование в Delphi - Интересный ресурс... @ 21.01.2010 16:39На сегодняшний день Delphi является одним из наиболее понятных языков программирования (за исключением Small Basic). Я занимаюсь программированием более 7 лет и начинал, конечно же, с Паскаля и Delphi. Сейчас я уже мало работаю с Delphi, в основном только по учебе, большинство своих проектов пишу на C#. Но все же delphi является востребованным языком, особенно после появления RAD Studio.
Деловое предложение для блогов в которых часто публикуются посты по Delphi. С вас - ссылка на свой блог, с меня - наращивание популярности Вашего блога
5 мелочей из-за которых я использую Delphi 2010 | Delphi в Internet @ 21.09.2009 17:56Вообще вплоть до середины 2009 года я использовал для работы старую добрую Delphi 7. Были, конечно, попытки “спрыгнуть” на Delphi 8, RAD Studio 2005, но попытки эти были безуспешны. Буквально через час-полтора программирования в этих системах компьютер в лучшем случае вставал колом и переставал реагировать на команды. C RAD Studio 2010 все по-другому. Рассмотрим всего лишь 5 мелочей, которые сподвигли меня на использование новой версии
Эксперты для Delphi: Обзор CnWizards, часть 1 - дизайнер форм. @ 29.05.2010 15:02CnPack Wizards - набор инструментов для Delphi, написанный группой разработчиков из Китая, на данный момент является наиболее мощным и удобным бесплатным инструментом для Delphi. Функционал этого набора просто огромен и способен фантастически упростить работу программиста. В этом посте я расскажу о том, как cnWizards расширяют дизайнер форм Delphi.
Первое знакомство с wordpress. @ 14.11.2012 18:07В сегодняшнем уроке давайте проведем первое знакомство с wordpress. Итак, наше знакомство с wordpress начнем с административной панели блога wordpress. Также познакомимся с устройством темы wordpress. Переходим в админку, далее выбираем самый первый пункт. Это главная страница консоли панели управления админки.
Записываем звук в wav в Delphi @ 08.04.2011 18:19Приветсвую читателей блога! Сегодня мы будем записывать звук и сохранять его в wav файл. Делать это с помощью компонентов слишком банально и скучно, поэтому я решил писать всё на WinApi. В этот раз нам понадобится 3 компонента Button и подключение файла mmSystem:
Модуль FeedBurner API для Delphi 2010. | Delphi в Internet @ 09.11.2009 23:04Хотите создать без проблем свою собственную программу по анализу фидов Google FeedBurner? Нет ничего проще. Сегодня я хочу представить Вам небольшую разработку – модуль, реализующий в полной мере API FeedBurner. При разработке FeedAPI я постарался, на сколько это возможно, сделать работу с модулем простой и понятной.
Delphi – Дельфин? Или программа для создания программ @ 15.12.2010 21:53Вот поверите или нет – тупо возникло желание написать про Delphi! Большинство людей (я бы сказал огромное большинство :) ) – даже понятия не имеют что это такое, и с чем его едят. Хочу открыть Вам глаза чуть шире, да и просто пописать :) . Ну в первый раз я познакомился с Delphi еще в школе на уроке информатики...
Административная панель WordPress: первое знакомство @ 23.08.2012 20:09Если главную страницу любого блога можно назвать лицом, то админпанель блога – его сердце. Ну а вебмастеру достается роль мозга. Для того, чтобы лицо было всегда умным и приятным, мозг должен хорошо знать и понимать свое сердце. То есть вебмастер должен хорошо ориентироваться в административной панели. В полной мере это относится и к админпанели Wordpress. Статья – первое знакомство с админкой WP.
grabr.ru
Программирование на Delphi и не только Программирование на Delphi и не только |
Пополнение Delphi FAQ
08.05.2010 от Иван ШиркоНаш Delphi FAQ постоянно пополняется новыми готовыми функциями, каждая из которых отлично решает свою маленькую задачу. Вот список новинок:
Заглядывайте к нам в Delphi FAQ - вы всегда найдете то, что вам нужно.
Читать полностью »
Рубрики: Delphi, Новости | Комментарии (6) »
Новая исправленная версия All in One SEO Pack 1.4.6.14
19.09.2008 от Иван ШиркоДоступна к загрузке новая версия популярного плагина с исправленной поддержкой UTF-8. В этой версии кажется проблемы с ключевыми словами были исправлены изначально, но русские заголовки рубрик так и остались "без первых букв. Так что качайте исправленный русский плагин на форуме:
Исправленный плагин, если найдете какие-нибудь баги, пишите.
Читать полностью »
Рубрики: Wordpress, Новости | Комментарии (8) »
Обновился раздел FAQ — Internet
29.06.2008 от Иван ШиркоВ разделе Internet Delphi-FAQ опубликованы вопросы связанные с созданием программ для работы в сети Интернет:
Рубрики: Delphi, Новости | Комментарии (10) »
Сделай сам на Delphi: Установка и удаление программ
06.05.2008 от Иван ШиркоСкачать программу Установка и удаление программi (исходники на Delphi + exe)
В Панели управления Windows находится апплет "Установка и удаление программ". Название говорит само за себя: с помощью этого апплета мы удаляем и устанавливаем программы. Давайте посмотрим, как он работает. При загрузке апплет читает все ключи из раздела реестра HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall (именно в этот раздел прописываются сведения об разинсталлировании программ). Из каждого ключа читается параметр DisplayName (для системных приложений – QuietDisplayName) и отображается его значение. Если пользователь нажал "Добавить/удалить...", то из параметра UninstallString считывается и выполняется командная строка.
А теперь реализуем нечто подобное в Delphi, но с некоторыми отличиями: добавим возможность удаления сведений о программе из реестра (если она была удалена "вручную") и удаления компонентов Windows (в "Удаление и установка программ" для этого нужно перейти на закладку "Установка Windows").
Создайте новый проект и разместите на форме три кнопки (TButton) и ListBox: TListBox как показано на рисунке 1:
Читать полностью »
Рубрики: Delphi, Сделай сам | Комментарии (30) »
Сделай сам на Delphi: Визуализационный плагин к Winamp
30.03.2008 от Иван Ширкоскачать примеры к статье (плагины + исходники на Delphi)
Работать с плеером Winamp мы научились в статье Управление Winamp. Теперь перейдем к разработке плагинов для него.Плагины к Winamp бывают пяти видов:
- Input – плагины для проигрывания различных форматов;
- Output – для записи музыки в различных форматах;
- General Purpose – плагины общего назначения;
- DSP/Effect – для обработки звука;
- Visualization – плагины, которые делают что-нибудь в такт музыке.
Плагин к Winamp представляет из себя обычную динамическую библиотеку (DLL – Dynamic Link Library), которая должна экспортировать необходимую для данного плагина информацию. Шаблон библиотеки для любого типа плагинов можно взять на сайте Winamp'a – http://www.winamp.com. В этой статье мы рассмотрим процесс создания самого впечатляющего, на мой взгляд, типа плагинов – визуализационного.В составе визуализационного плагина можно выделить заголовок и модули. Вот формат этих частей:
Читать полностью »
Рубрики: Delphi, Winamp, Сделай сам | Комментарии (16) »
Исправление багов плагина All in One SEO Pack 1.4.6.3
23.03.2008 от Иван ШиркоСкачать исправленный плагин
Работать с WordPress я начал совсем недавно. Но, честно говоря, видя его огромную популярность, думал, что проблем у меня с ним больш их не будет. Но сначала я наткнулся на проблему с редиректом, из-за которой сайт начисто выпал из индекса русских поисковиков, потом обнаружил, что плагин All in One SEO Pack, который существенно упрощает поисковую оптимизацию блога, не совсем корректно работает с UTF-8. В результате русские ключевые слова (keywords) отображались в виде "кракозябр" (исключение было только для главной страницы). А в заголовке страницы русские названия категорий отображались с неправильной первой буквой. Поиск в Интернете показал лишь то, что такие проблемы были не только у меня, хоть и встречались достаточно редко. Исправление нашлось лишь для второй проблемы, для русских ключевиков фикса я не нашел. Так что предлагаю вам исправленный All in One SEO Pack 1.4.6.3, который решает обе указанные проблемы. Единственное, оригинальный плагин делает у названий категорий первую букву каждого слова заглавной, я же оставил принудительную "капитализацию" только для первого слова. По-моему так более логично.
Исправленный плагин я выложил на форуме (надо же его как-то раскручивать:), так что если найдете какие-нибудь баги, пишите.
Иван Ширко[email protected]
Рубрики: Wordpress | Комментарии (12) »
Проблема с 301 редиректом и WordPress или Почему не индексирует Яндекс
16.03.2008 от Иван ШиркоПосле переезда на свой хостинг и на новый движок WordPress, я стал ждать индексации в поисковиках. Через пару дней некоторые страницы уже были в индексе Google и почти все страницы в Яндексе, через который в первые же дни начали приходить первые посетители. Прошла неделя и сайт выпал из Яндекса. Намертво. Осталась только главная страница, и то в поиске она была «проиндексирована по ссылке», и вместо заголовка отображался url. Я задумался, не помогло. Тогда, решив, что просто сначала сайт был проиндексирован «быстроботом» Яндекса, я успокоился и стал ждать, пока попаду в основной индекс… Через пару дней абсолютно случайно я заметил, что при обращении к сайту возвращается ответ не 200, типа все OK, а 301, который означает, что сайт переехал. Причем, если обратиться к http://delphiblog.ru/, то новое место сайта оказывается тоже http://delphiblog.ru/. Я сразу обратился в саппорт хостинга. Мне оперативно подтвердили, что да, возвращается 301, смотрите скрипты на сайте.Я провел маленький эксперимент: проверил, какой ответ возвращается при обращении к статичному файлу на сайте, delphi.jpg. Ответ был 200. Оказалось, что дело в WordPress: при обращении к любому разделу блога выдавало 301, как с www, так и без. После скармливания признаков гуглю, выяснилось, что такая проблема не только у меня, и, судя по всему, проявлялась она только в некоторых случаях при использовании WordPress 2.3 с включенными ЧПУ. Причем Google без проблем индексировал сайт, но для русских поисковиков нужно было как то исправлять ситуацию.
Читать полностью »
Рубрики: Wordpress | Комментарии (65) »
Новый раздел — Форум
12.03.2008 от Иван ШиркоРаз уж мы теперь на нормальном хостинге, то не будем останавливаться на достигнутом. Вслед за разделом Delphi FAQ, на сайте появился Форум. Прошу любить и жаловать;). По первоначальным планам там будет обсуждаться все что связано с Delphi и с WordPress. Но время покажет.
Пока на сайте нет раздела для примеров к публикуемым статьям, эти примеры будут храниться на форуме. После настройки всех параметров форума будут выложены примеры к опубликованным ранее статьям. Также вскоре появится пост о том как сайт переезжал с блогера на WordPress и какие проблемы при этом возникли.
Рубрики: Новости | Комментарии (6) »
Создан раздел Delphi FAQ
08.03.2008 от Иван ШиркоСайт уже полность приспособился к новому хостингу и движку и теперь продолжает развиваться. Сегодня создан раздел Delphi FAQ. Вот несколько вопросов, рассмотренных в новом разделе:
Рубрики: Delphi, Новости | Комментарии (3) »
Переезд)
28.02.2008 от Иван ШиркоИтак, свершилось:) Начался переезд на новый хостинг, т.е. сюда. А заодно и на новый движок блогов - WordPress. Пока еще кипит работа по обновлению материала, но скоро блог заработает в полную силу)
Рубрики: Новости | Комментарии (13) »
delphiblog.ru