AdSense

понедельник, 3 декабря 2012 г.

Visual Studio 2012 Extension - вертикальные вкладки

Не так давно перебрался с 2010 Visual Studio (далее VS) на 2012. Дольше всего от перехода на новую версию меня останавливало отсутствие вертикальных вкладок для открытых файлов. Поработав с вертикальными вкладками в 2010 студии я уже не мог продолжать работать без них. Настолько с ними удобнее. И поэтому решил поделиться своим знанием. Вдруг кто-то еще не попробовал их?

Чтобы установить вертикальные вкладки нужно скачать Extension(расширение для VS) по ссылке Productivity Power Tools. Установив расширение, нужно в VS перейти в Tools/Options/Productivity Power Tools и выбрать Place tabs on the Left.



Результат применения этого расширения:


Цвета вкладок подсвечены в зависимости от проекта.

среда, 28 ноября 2012 г.

Работа для Web - программиста.


Сегодня я хочу поговорить о работе или скорее о тех, кто эту работу нам предоставляет. Так сказать об идеальной работе для программиста, а может и не только программиста. Бывает, что спрашиваешь себя: "Нравится ли тебе место в котором ты работаешь, твоя должность, круг задач, условия труда, отношения в коллективе? Этого ли ты хотел или нужно идти дальше?" И особенно часто эти мысли начинают посещать тебя, если на работе все последние действия руководства вызывают у тебя удивление, недоумение, но никак не способствуют повышению мотивации и желания работать. И ты сидишь, думаешь и взвешиваешь: да здесь меня все устраивает, а здесь я бы хотел лучших условий.

Вот и я задумался и решил оформить все свои мысли на бумаге, чтобы, прежде всего для себя самого, определить какие условия работы были бы для меня близки к идеальным.

С высоты своего опыта (а я успел поработать в разных компаниях крупных и не очень) могу сказать совершенно точно, что сейчас хотел бы выбрать компанию, которая прежде всего думает о своих сотрудниках. Такие моменты как удобное рабочее место, кафе, обеды, абонемент в спортзал, медицинская страховка, белая зарплата,  возможность отдохнуть в стенах компании должны быть по умолчанию. Но это даже не главное. А главное это отношение руководства к тебе. Ты должен ощущать, что ты не станок для производства кода. Руководитель должен не только ставить задачи, но и следить чтобы тебе эти задачи было бы комфортно выполнять. Это, как мне кажется, создает благоприятную атмосферу.

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

Обучение. Жалко смотреть, когда компания пытается на всем экономить, в том числе и на обучении сотрудников. Я считаю, что самообучение, конечно, хорошо. Но посещать курсы, семинары по специализации - это все тоже необходимо. Вот мне, например, очень хочется подтянуть английский язык, так как зачастую информация по программированию идет на английском языке, но дома я этого сделать не могу. И курсы английского языка, например, на обеденном перерыве или рано утром на работе были бы выходом для меня.

Идем дальше. Круг задач. Безусловно хочется, чтобы круг задач был бы интересен и не превращался в рутину. Новые сложные и амбициозные задачи. Но и кидаться из технологии в технологию тоже не стоило бы. Сегодня ты специалист Ruby, а завтра Silverlight. Это не по мне.

В таких условиях ты начинаешь работать, как мне кажется, с большей охотой и КПД твое резко увеличивается. Разве не это то, чего хочет работодатель?

Есть такие компании у нас в России? Понимаю, что есть. Но тут сразу встает вопрос, о том, что они тоже не возьмут к себе всех. Есть четкие правила отбора.

И вот ты сидишь и думаешь, а соответствуешь ли ты им и насколько. Начинаешь просматривать сайты и сравнивать свои skills.

Что есть в багажнике у меня? Так, посмотрим:


Технологии, языки программирования: ASP.NET(WebForms), MVC, Html, Css, JavaScript, Jquery, Ajax, WebServices, WinServices, MS SQL, T-SQL, Linq.
Среды разработки: VisualStudio 2008/10/12, MonoDevelop (Monotouch).
Системы контроля версий: TFS, Git.


Английский - читаю, но говорю слабо. Ну и остальное по мелочи.

Осталось найти хорошую компанию? Или может она сама найдет меня =)

вторник, 13 ноября 2012 г.

MVC. Как передавать в Controller коллекцию объектов.

Когда мы передаем в Controller один объект, то все просто и понятно.
А что если нам нужно принимать коллекцию объектов? Для примера возьмем следующую модель сотрудников:

public class Employee()
{
  public string FirstName {get;set;}
  public string SecondName {get;set;}
}

На сервере нам нужно получить коллекцию пользователей

public ActionResult ActionName(List<Employee> employees)
{
 ...
}

Для передачи коллекции в контроллер нужно сформировать такую разметку (сотрудников у нас будет n+1):

<form method="post" action="/ControllerName/ActionName">
 <input type="text" name="employees[0].FirstName" value="" />
 <input type="text" name="employees[0].SecondName" value="" />
 <input type="text" name="employees[1].FirstName" value="" />
 <input type="text" name="employees[1].SecondName" value="" />
 ...
 <input type="text" name="employees[n].FirstName" value="" />
 <input type="text" name="employees[n].SecondName" value="" />
 <input type="submit" value="submit"/>
 </form>

Есть еще решение о передачи коллекции через JavaScript, но об этом в следующий раз.

вторник, 30 октября 2012 г.

Чем отличаются RenderPartial и Partial, RenderAction и Action

Чем отличаются RenderPartial и Partial, RenderAction и Action?

На этот вопрос попытаюсь ответить так: если мы используем приставку Render, то результаты выполнения сразу встраиваются в выходной поток. С приставкой Render - это void метод, поэтому в коде мы должны закрывать строку точкой с запятой и не можем использовать @ перед вызовом. Правильный вызов RenderPartial(RenderAction  аналогично):

@{
     Html.RenderPartial("View");
}

Без приставки Render Html.Partial (как и Html.Action) - возвращает html разметку. Разметка хранится в буфере, а потом также встраивается в выходной поток. Поэтому первый способ немного эффективнее.

Правильный синтаксис (без точки с запятой):

@Html.Partial("View")

четверг, 25 октября 2012 г.

C# GET. Пишем Generic метод.

Я уже писал о том, как отправлять запросы на сторонний сервер с помощью POST.

Сегодня напишу как сформировать GET запрос. Зачастую я использую GET запрос  для получения ответа в виде JSON и сразу десериализую JSON строку в объект. Поэтому метод у меня будет универсальный. Для универсальности будем использовать Generics.

Итак, смотрим:

/// <summary>
/// Generic GET Метод
/// </summary>
/// <param name="url">Адрес, по которому мы обращаемся с параметрами для GET запроса</param>
//Здесь T - это объект, в который мы будем десериализовать JSON ответ
public static T GetMethod<T>(string url)
{
   object value = null;
   var reqGet = WebRequest.Create(url);
   var resp = reqGet.GetResponse();
   var stream = resp.GetResponseStream();

   if (stream != null)
   {
      //читаем поток в строку
      StreamReader sr = new StreamReader(stream);
      var srToString = sr.ReadToEnd();
      //десериализуем JSON строку в объект
      return JsonConvert.DeserializeObject<T>(srToString);
    }

  //Возвращаем объект
  return (T)value;
}
 
Для десериализации я использую библиотеку Json.NET. Об этом писал здесь. Также метод можно дополнить обработчиком ошибок.

вторник, 23 октября 2012 г.

Как определить с помощью jquery (javascript), что к вам на сайт зашел пользователь с iPhone.

Наша задача - перенаправлять пользователя, который зашел на сайт с iPhone на приложение в AppStore.

Для определения платформы будем использовать свойство userAgent, которое поддерживается всеми основными браузерами.


//Если userAgent содержит слово iPhone, то перенаправляем в AppStore
var isiPhone = navigator.userAgent.toLowerCase().indexOf("iphone");
if (isiPhone > -1) {
   if (confirm("Перейти к приложению для iPhone?")) {
      window.location = "http://itunes.apple.com/ru/app/ourapp";
   }
}
Если мы не хотим быть назойливыми и не хотим показывать сообщение каждый раз, когда пользователь заходит на сайт, то можно хранить информацию о просмотре сообщения в cookie пользователя. Для записи и чтения cookie я использую удобный плагин jquery.cookie.js. С плагином код будет выглядеть так:

var cookieName = "PhonePopUp";
var appstore = $.cookie(cookieName);
//Если userAgent содержит слово iPhone и нет coookie PhonePopUp, то перенаправляем в AppStore
var isiPhone = navigator.userAgent.toLowerCase().indexOf("iphone");
if (isiPhone > -1 && appstore == undefined) {
   $.cookie(cookieName, "hide");
   if (confirm("Перейти к приложению для iPhone?")) {
      window.location = "http://itunes.apple.com/ru/app/ourapp";
   }
}