Типичный рефакторинг

30 мар. 2012 г. | | |

Под катом gif на 2.3Мб

LocalDB

27 мар. 2012 г. | | |

Вместе с новым  MS SQL Server 2012 под кодовым именем Denali разработчики представили нам отпрыска линейки SQL Server Express – LocalDB, который ориентирован на single-user приложения и не требует установки, предварительной конфигурации и запуска сервиса сервера (в отличие от полноценного MS SQL Server) и. Напоминает MS SQL Server CE?

Где разница?


А разница в том, что LocalDB – это полноценный SQL Express, который поддерживает все возможности MS SQL Server, в отличие от SQL CE, который предоставляет очень урезанный T-SQL и другие возможности (различия см. тут http://msdn.microsoft.com/en-us/library/bb896140.aspx). К тому же, LocalDB работает как дочерний процесс приложения, используя тот же sqlservr.exe, что и обычный SQL Express: приложения могут использовать стандартные провайдеры (ADO.NET, ODBC, PDO и др.) для работы с БД. А Sql Server CE – это inproc dll.

Хорошо, в чем же тогда отличие от   SQL Express? Во-первых, как уже было сказано, для LocalDB не требуется создание сервиса. Процесс LocalDB стартует при подключении приложения к нему и завершается автоматически, если подключений больше нет. Кроме того, есть такая фича, как  AttachDbFileName, которая позволяет разработчику указывать расположение файла БД, к которому нужно подключиться.

Что же выбрать? 

Очевидно, что для небольшого portable-приложения LocalDB - это слишком. Но если важна совместимость с MS SQL Server и в дальнейшем планируете переходить на полноценный MS SQL Server, только не хочется устанавливать еще один сервис, то LocalDB – ваш выбор. MS Sql CE выигрывает, если важно:

1) Размер БД (например, приложения для мобильных девайсов): 18 Мб на диске (Sql CE 4.0) против 160 Мб (LocalDB). (хорошая таблица сравнения параметров http://erikej.blogspot.com/2011/01/comparison-of-sql-server-compact-4-and.html)

2) Возможность распространения приложения через XCOPY: LocalDB требует установки через msi, SQL Server CE работает, если скопированы нужные файлы


Есть ли жизнь после сдачи проекта?

21 мар. 2012 г. | | |


History of Software Testing

16 мар. 2012 г. | | |

Visual Studio 11: запуск xUnit.Net без боли

14 мар. 2012 г. | | |

Бета-версия одиннадцатой cтудии вызвала много охов и ахов. Чтобы там ни говорили, работать в ней приятно, хоть по началу немного необычно. На несколько шагов впёред продвинулась поддержка юнит тестирования. Чего только стоит новый Unit Test Explorer. Но я хочу рассказать о новой фиче, которая меня особо порадовала: Visual Studio 11 beta поддерживает сторонние фреймворки для тестирования! Ура! Ура! Ура! Теперь Unit Test Explorer можно сконфигурировать для запуска тестов xUnit.NET, MbUnit и NUnit. И даже не стоит расстраиваться, если фреймворка, который вы используете для тестирования, нет среди вышеперечисленных - ведь всего-то нужно написать свой адаптер (Unit Test adapter). Список существующих адаптеров можно посмотреть тут.
А пока, не откладывая в долгий ящик, запустим xUnit.net-тесты без TestDriven.Net.

MySql, даты и WTF

| | |

Тянуть не буду, сразу в бой:
SELECT TO_DAYS('05.03.2012') as `05.03.2012`,TO_DAYS('01.02.2012') as `01.02.2012`, TO_DAYS('28.02.2012')  as `28.02.2012`
Результат:

Опаньки. Нужно отформатировать даты:
SELECT TO_DAYS('2012-03-05') as `05.03.2012`,TO_DAYS('2012-02-01') as `01.02.2012`, TO_DAYS('2012-02-28')  as `28.02.2012`
Результат:

Это уже похоже на правду. Заюзаем DATE_FORMAT т.к. даты приходят от клиента:
SELECT TO_DAYS(DATE_FORMAT('05.03.2012', '%Y-%m-%d')) as `05.03.2012`,
TO_DAYS(DATE_FORMAT('01.02.2012', '%Y-%m-%d')) as `01.02.2012`,
TO_DAYS(DATE_FORMAT('28.02.2012', '%Y-%m-%d')) as `28.02.2012`
Результат:

WTF? Как из даты в феврале получилось дней больше, чем из даты в марте? И вобще, что за удивительная разница в 9861 день между 1-м и 28-м февраля? Как он это делает?
Интуиция подсказывает проверить DATE_FORMAT:
SELECT DATE_FORMAT('05.03.2012', '%Y-%m-%d') as `05.03.2012`,
DATE_FORMAT('01.02.2012', '%Y-%m-%d') as `01.02.2012`,
DATE_FORMAT('28.02.2012', '%Y-%m-%d') as `28.02.2012`
Результат:
А потому что
Although MySQL tries to interpret values in several formats, date parts must always be given in year-month-day order (for example, '98-09-04'), rather than in the month-day-year or day-month-year orders commonly used elsewhere (for example, '09-04-98', '04-09-98'). [мануал]
и даты форматировать надо на клиенте, не за чем лишний раз мускул качать!