Принятие Вас делает CI, в заголовке действительно говорится все это: Какие инструменты Вы используете?
В нашем случае мы - магазин разработки.NET и используем
Однако мы поражаем некоторые проблемы производительности с Подверсией и количеством агентов сборки Круиза и конвейеров, которые мы выполняем, так смотрят на использование Мерзавца в бэкенде для облегчения этого. Однако версия Windows Мерзавца дает нам проблемы (кажется немногим также "бета"), таким образом, мы думаем, что должны пойти с версией Linux.
Оборотная сторона этого - то, что это далее увеличивает набор навыков, требуемый любого, кто собирается администрировать эту установку.
Так, какой инструмент (инструменты) Вы используете для своего управления версиями и автоматизированной сборки/развертывания? Также упомяните, какова Ваша платформа разработки.
Можно использовать трансформатор (обработка ошибок и дополнительная заводская конфигурация опущены для ясности):
Node node = ...;
StringWriter writer = new StringWriter();
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(new DOMSource(node), new StreamResult(writer));
String xml = writer.toString();
// Use xml ...
-121--1385077- Вместо написания вспомогательных методов, таких как выборка
, которые возвращают значение, заставьте их принять другую функцию, «приемник», чтобы передать их результат:
function fetch(receiver) {
$.getJSON("blah...", function(data) {
receiver(data);
});
}
Очевидно, что это избыточно, потому что именно так уже работает getJSON
, но в более реалистичном примере функция fetch
будет каким-то образом обрабатывать или фильтровать результат перед его передачей.
Тогда вместо:
document.write(fetch());
Вы бы сделали:
fetch(function(result) { document.write(result); });
Генераторы можно использовать, чтобы сделать асинхронный код гораздо более линейным по стилю. Каждый раз, когда вам требовался какой-то асинхронный результат, вы давали функцию для его запуска, и генератор возобновлял работу, когда результат был доступен. Было бы немного кода управления, чтобы держать генератор в рабочем состоянии. Но это не очень помогает, потому что генераторы не являются стандартными во всех браузерах.
Если вы заинтересованы, вот запись в блоге об использовании генераторов для приведения в порядок асинхронного кода .
-121--3842604-Командный город в качестве сервера CI - бесплатно для ограниченного количества проектов.
Нет неприятной конфигурации XML, вместо этого хороший веб-GUI. Командный город также может быть сконфигурирован с различными системами сборки, NAnt, MSBuild et al. Также можно настроить другие инструменты для работы с TC, такие как выполнение модульных тестов через литник.
Они ортогональны.
TDD - это подход к разработке программного обеспечения, который фокусируется на обеспечении правильности путем разработки тестов по спецификациям до написания производственного кода. Функциональное программирование является парадигмой для того , чтобы намереваться и внедрения программного обеспечения.
-121--4090497- Кроме статических классов
и структуры
, почему бы не использовать файлы ресурсов
для постоянных последовательностей? Доступ к ним очень прост в виде SomeNamespace.ResoureName.KeyName
, и в зависимости от того, где они находятся в проекте, ими можно управлять извне без повторной компиляции при необходимости...
На моей текущей работе (контракт для очень большой компании. О 90% Microsoft/.NET dev), моя группа автоматизирует сборки и модульное тестирование с помощью StartCity на наших новых приложениях.
Я установил это и начал с MSBuild на TC, но я пытаюсь подтолкнуть к Nant файлы сборки и некоторые другие стандарты на новых проектах. (используя шаблоны в VS2008, чтобы создать столько настроек построения при создании нового проекта)
Система управления версиями здесь страшна. Многие группы по-прежнему используют VSS (включая мой, что не весело) с корпоративным толчком к TFS в этом году. Я бы предпочел пойти на DVCS (git или что-то в этом роде), но это не произойдет в этой среде. На самом деле, я не уверен, что StartCity останется, как только компания перейдет на 100% TFS. Но, как я думаю, мы будем настолько продвинуты с CI к тому времени, когда это произойдет, что TFS может не покрыть наши потребности. Но, возвращаясь к StartCity, он поддерживает VSS просто прекрасно, и это сработало.
Что касается развертывания, я путаюсь с надстройкой Microsoft Web Deployment Project , а также с конфигурацией в Nant. Подход Нанта, очевидно, более гибок, но пытаться научить разработчиков connect-the-dot скриптам Нанта иногда бывает немного.
Надеюсь, что это немного поможет. «Демо» (demo), представляющее собой StartCity, бесплатно предоставит вам 20 конфигураций для сборки.
Должен отметить, что пробовал CruiseControl.net и Хадсона. Оба являются прекрасными приложениями (и бесплатными), но я знал, что простота настройки новой сборки в StartCity потребуется для остальных в моей группе. В противном случае люди просто не будут делать CI, как только я уйду.
Мой магазин - это Java / Windows, с использованием программного обеспечения IBM; ClearCase, WAS, WMB, WPS. Мы пошли с Хадсоном, и он сделал несколько замечательных вещей для повышения производительности.
Мы также используем небольшую мягкую игрушку, в данном случае поющего Морозного Снеговика высотой около 12 дюймов.Каждый раз, когда разработчик нарушает сборку, как определил Хадсон, у него есть 15 минут, чтобы навести порядок, или Фрости оказывается на своем столе. Фрости остается там, пока кто-нибудь не облажается таким же образом.
У меня был Frosty один или два раза, как и вся команда; это помогает мысленно поощрять более совершенные методы кодирования или, по крайней мере, методы кодирования, которые не мешают вашим товарищам по команде.
Я лично использую AddModelError («»
- Я не знаю, откуда _FORM берется? - и ValidationSummary ()
не является черной магией - вместо этого я использую собственный помощник, который, например, включает в выходные данные конкретные (пользовательские) сообщения об исключениях. Помощник очень прост в написании - простой цикл foreach над ModelState - так что вы можете рассмотреть возможность написания собственного. Там вы можете показывать на уровне формы, собственности или что угодно.
Ваш вопрос немного неясен. Под колпаком инструкции процессора носят императивный характер. Если предполагается, что ваш код будет выполняться на машине фон Неймана, он в конечном итоге должен быть запущен как императивный код.
Возможно создание машины (с определенной архитектурой), которая поддерживает эти операции. Фактически, LispM был разработан, чтобы помочь запускать программы Lisp. Хотя я не знаком с аппаратными характеристиками LispM, это, вероятно, квалифицируется как предоставление некоторых примитивных операций на более декларативном уровне.
-121--4690758-Я использовал круизные control.net, nunit, fxcop, Ncover, xmlpreprocess, nant и несколько других перед переходом на TFS, где я делаю много развития sharepoint. Я не инвестировал в процесс CI для разработки sharepoint для ограничения нашего проекта, но я разработал задачи msbuild и подписался на события TFS для моделирования процесса CI с TFS 2k5. Я вообще не рассматривал его для TFS 2k8, но он определенно поддерживается.
Мы используем инструмент с открытым исходным кодом Hudson. Это действительно хороший инструмент для автоматической сборки. Однако он предназначен не только для сборки. Вы можете использовать его для запуска тестов, предоставления отчетов о покрытии кода, рассылки уведомлений по электронной почте и т.д.
(Наша платформа разработки - это в основном linux+java)