Подлипенский Павел

Блог о технологиях и деньгах

Что нового в Subversion 1.5?

clock June 24, 2008 10:28 by author Подлипенский Павел

Subversion всегда был удобен такими фичами как, атомарные commits, версионированные директорий, хорошая поддержка бинарных файлов, быстрое создание бранчей и тагов, поддержка нескольких сетевых протоколов, в том числе и HTTP. Но, чего действительно раньше не хватало в subversion, так это возможности найти какой код был смержен, откуда он мержился и когда это произошло. Отсутствие такой возможности приводило раньше к трудностям при мерже:

 

К примеру, пользователь не сможет смержить изменения с 11 по 17 ревизию в бранч, если он уже мержил 11 и 13 ревизии в бранч ранее. В новом subversion мержи логируются и нет больше необходимости записывать на листик, какой код, когда и откуда мержился.

Разработчики subversion как будто услышали мои мольбы и добавли change lists –функционал, позволяющий ассоциировать произвольные файлы с неким человекочитаемым именем. К примеру вы работаете над несколькими багами одновременно, и по окончании одного из них хотите залить его в репозиторий. А файлы, относящиеся к другому фиксу – оставить в локальном репозитории. Раньше приходилось прибегать к помощи листика, чтобы разделить эти два набора файлов и залить только нужные файлы. Теперь проассоциировав первый набор файлов с неким именем, вы можете по окончанию работ просто указать имя этой группы файлов и они немедленно попадут в основной репозиторий.

Еще одна полезность, появившаяся в 1.5 subversion – это sparse checkouts, позволяющий выполнять основные операции только над указанными уровнями дерева каталогов. Это удобно, если вы не хотите “слить” только текущий каталог со всеми файлами в нем, но не хотите “сливать” все его поддиректории. 

Также было добавлено интерактивное разрешение конфликтов – теперь svn сам предлагает варианты решения конфликта. Лично для меня эта фича никакой погоды не делает, так как я давно пользуюсь Araxis Merge, чего и вам советую.

Не знаю почему, но большинство GIT’овцев кричат: SVN sucks, попробуйте GIT – у нас проект в жите 2.5 гига и ничего не тормозит. У меня, я вам скажу, есть проект около 4 гигабайтов в архиве. То есть сжатый RAR’ом. И я никаких тормозов не наблюдал еще с версии 1.4.6. А в версии 1.5 ускорена работа из-за простого трюка – они сделали более многовложенную файловую систему, т.е. в одной директории такого дикого количества файлов уже не будет. И это важно, особенно, если ваш сервер хранит репозиторий на Network Attach Storage с не самой продвинутой файловой системой, которая тормозит при 10 000 файлов. Из-за того что в subversion файлы readonly, это позволяет улучшить стратегию кэширования на стороне NAS’ов и других умных файловых систем. Теперь неизменяемые файлы сгруппированны в каталоги, и вашей файловой системе можно сказать: вот эти каталоги неизменяемы (после появления файлов в ней) и ты пожалуйста это учти.

Разработчики клянуться, что теперь заработает CTRL+C!

Появилась возможность задавать относительные пути, которые могут быть полезны, если вы не хотите плодить какие-то сторонние библиотеки в нескольких проектах, но хотите иметь их локально.

Как мы видим, управлять репозиторием теперь станет легче, работать он будет быстрее, а разработчики перестанут записывать на листике, что и когда они мережили ;)

Ссылки по теме

Subversion 1.5 Release Notes

Subversion: чеклист по правильным коммитам

Слияние: Руководство по ежедневному использованию

Merging and branching in Subversion 1.5

Subversion or CVS, Bazaar or Mercurial?

Currently rated 4.0 by 7 people

  • Currently 4/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Что нового в Resharper 4.0?

clock June 16, 2008 09:30 by author Подлипенский Павел

Ребята из JetBrains выпустили новый решарпер и теперь он доступен для "покупки" и скачивания с их официального сайта.

Пожалуй самая интересная фича нового решарпера - поддержка C# 3.0 и LINQ. Но первая вещь которую я заметил, это "Reformat" переименовали в "Cleanup Code", и поначалу, это сбивало с толку. Зато сейчас эта фича поддерживает профайлы, т.е. различные профайлы могут делать различные "очистки кода": переход к авто-свойствам, использование анонимных типов, формирование readonly полей, если это возможно и многое другое.

 

Но единственное, что у меня пока не получилось - это редактирование стандартных профайлов.

Следующее, на что я обратил внимание это инициализация объектов, к примеру если я напишу

Task t = new Task(); t.Name = "Test";

То решарпер мне предложит поступить следующим образом:

Task t = new Task {Name = "Test"};

Аналогичным образом решарпер предлагает использовать implicit type variable:

Решарпер советует использовать var везде, где это возможно. Такое решение далеко не всегда оправдано, поэтому я отключил этот функционал.



Зачатки JetBrains.Annotation были еще в решарпере версии 2.5. Если помните был такой "Null Reference Analysis", который оповещал разработчика о возможных NullReferenceException в коде. Чтобы избежать такого анализа разработчики добавляли к свойствам, атрибуты NotNull или CanBeNull, которые решарпер позже использовал для инициализации состояния переменных. В новой же версии количество таких атрибутов значительно увеличилось. Скажем, если вы хотите явно указать, что ваш строковый параметр будет обрабатываться с помощью string.Format, то можете написать следующее

[StringFormatMethod("key")] public void Put(string key, params object[] args) { ... }

После чего вызвав эту функцию

Put("testing {0}, {1}, {2}", 1, 2);

решарпер подскажет, что переменная для аргумента {2} отсутствует. Но использования этой фичи требует включения нескольких JetBrain библиотек в ваш проект, что несколько смущает...

Довольно удобным стал CamelHumps Completion, позоволяющий писать лишь заглавные буквы ключевых слов, названий классов, переменных:

if(CVM.I.SV(SCV.FU

После нажатия магического сочетания клавиш <Ctrl-Shift-Enter>, получаем

if (CodeViewManager.Instance.SupportsView(StandardCodeViews.FindUsages)) { }

Как я уже упоминал, теперь решарпер полностью поддерживает C# 3.0 и LINQ, что не может не радовать.

 

Recent Edits позволяет быстро получить доступ к недавно редактируемым участкам кода (CTRL + "-" уже просто достал!):

 


И в заключение, хочу добавить, что создатели решарпера клянутся, что он стал быстрее, особенно в обработке ASP.NET кода.

Полезные ссылки:

Официальный сайт решарпера

Новые фичи четвертого решарпера 

Скачать Resharper 4.0 

Купить Resharper 4.0 

Блог Ильи Рыженкова, продукт-менеджера компании JetBrains 

Currently rated 4.5 by 4 people

  • Currently 4.5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Как упростить доступ к значениям в словаре?

clock June 12, 2008 09:32 by author Подлипенский Павел

Речь пойдет о коллекциях IDictionary. Не знаю как вам, но мне надоела постоянная проверка .ContainsKey(), каждый раз, когда я хотел получить значение из словаря.

Dictionary<string, string> dict;
if (dict.ContainsKey("key"))
	value = dict["key"];
else
	value = "defaultValue";

Поэтому мне пришлось реализовать такую вот нехитрую обертку:

public static class MyExtensions
{
	public static TValue GetValue<TKey, TValue>(
	this IDictionary<TKey, TValue> source, TKey key, TValue defaultValue)
	{
		if (source.ContainsKey(key))
			return source[key];
		else
		return defaultValue;
	}
}

И теперь получить значение стало намного проще:

value = dict.GetValue("key", "defaultValue");

Currently rated 4.3 by 3 people

  • Currently 4.333333/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


How To: Вызвать Javascript функцию после обновления UpdatePanel

clock April 7, 2008 16:45 by author paul

UpdatePanel - это контрол Microsoft ASP.NET AJAX, который позволяет довольно удобно интегрировать AJAX в ваше приложение. Но именно ввиду его удобства и простоты использования со стороны разработчика, некоторые вещи далеко не очевидны. К примеру как вызвать клиентский JavaScript по завершению очередного обновления этой панели?

Трюк заключается в том, чтобы добавить EndRequestHandler в request manager:

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);

Вот пример формы с двумя TextBox, куда вы вводите текст, а сервер возвращает длину текста и отображает ее во втором TextBox:

<%@ page language="C#" autoeventwireup="true" codebehind="DemoJScriptUpdate.aspx.cs" inherits="CharterWeb.DemoJScriptUpdate" %>
 
 <script runat
="server">
 protected void txtDataOnChange(object sender, EventArgs e) {
 txtLength.Text = txtData.Text.Length.ToString();
 }
 </script>
 <html xmlns="<a href="http://www.w3.org/1999/xhtml">http://www.w3.org/1999/xhtml</a>">
 <head id="Head1" runat
="server">
 
 
 <script type="text/javascript">
 function EndRequestHandler(sender, args) {
 if (args.get_error() == undefined)
 alert("Your text has: " + document.getElementById("txtLength").value + " character(s)");
 else
 alert("There was an error" + args.get_error().message);
 }
 function load() {
 Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
 }
 </script>
 
 <form id="form1" runat
="server">
 <?xml:namespace prefix ="" asp /></asp:scriptmanager id="_scriptManager" runat="server">
 
 <asp:updatepanel id="UpdatePanel1" runat
="server">
 <contenttemplate>
 Write something: </asp:textbox id="txtData" runat="server" autopostback="true" ontextchanged="txtDataOnChange">
 <br />
 Server says the length is: </asp:textbox id="txtLength" runat="server" autopostback="true">
 </contenttemplate>
 </asp:updatepanel>
 
 </form> 

Currently rated 5.0 by 6 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Search


LinkedIn Profile

Calendar

<<  July 2008  >>
SuMoTuWeThFrSa
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

Archive

Tags

Categories


Recent Posts

Disclaimer

The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

© Copyright 2008

Sign in

Ó÷àñòíèê ïëàíåòû Developers.org.ua

Bookmark and Share

Web Developement Blogs - Blog Catalog Blog Directory

Êàòàëîã óêðà¿íñüêèõ áëîã³â