К основному контенту

Сообщения

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. Результат применения этого расширения: Цвета вкладок подсвечены в зависимости от проекта.

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

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

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="" /> ... <...

Чем отличаются 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")

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);    ...

Как определить с помощью 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, то перенаправл...

Мониторинг нагрузки на сайт под управлением IIS средствами Windows Server. Показатели посещаемости.

Как мониторить нагрузку на сайт? Если мы хотим добиться бесперебойной работы сайта, то мы должны быть постоянно в курсе, что происходит с сайтом в данный момент времени. Чтобы в случае возникновения проблем быстро среагировать на них. В компании, где я сейчас работаю, в кабинете программистов висит ЖК телевизор-монитор, подключенный к компьютеру. На мониторе отображаются графики нагрузки на сервера, список  всех работающих сайтов со статусом доступности, а также онлайн статистика посещаемости из Google Analytics (в режиме реального времени отображается количество текущих пользователей на основном сайте в разрезе географии). Итак, какие показатели Веб-сервера мы считаем полезными для отображения на мониторе. Их четыре: % загрузки процессора, % использования выделенной памяти, всего запросов методов в секунду (Веб-служба), запросов в секунду (ASP.NET Apps). С первыми двумя все понятно. Счетчик В сего запросов методов в секунду (Веб-служба) - это  частота запросов HTTP,...

IIS (Internet Information Services) и applicationHost.config. Изменение доменных привязок.

Сегодня затронем тему настроек IIS (Internet Information Services). Речь пойдет о версии IIS 7.0 (7.5). Допустим у вас есть  большое количество поддоменов, которые нужно привязать к сайту или быстро исправить на уже существующих привязках IP адрес. Стандартный интерфейс IIS позволяет редактировать привязки по одной, что в нашем случае не очень-то удобно. См. картинку Чтобы ускорить процесс, нужно вспомнить, что все доменные привязки (и не только, а и другие настройки) хранятся в конфигурационном файле applicationHost.config. Данный файл находится по адресу C:\Windows\System32\inetsrv\config\ В файле отредактировать привязки можно очень быстро.

Мобильное приложение (интернет магазин) для iPhone на C# (Monotouch + Monodevelop)

Итак, замкнулся первый цикл разработки нашего приложения для iPhone.  Долгая дорога от идеи до реализации. Сегодня ночью наше приложение добавили в  AppStore Ссылка itunes.apple.com Если есть возможность, установите и напишите свою оценку: что понравилось, а что нет. Заранее спасибо. В предыдущих сериях: Monotouch и Monodevelop. Программируем для iOS на C# на примере нашего проекта. Часть I. Monotouch и Monodevelop. Программируем для iOS на C# на примере нашего проекта. Часть II. Monotouch и Monodevelop. Программируем для iOS на C# на примере нашего проекта. Часть III.

Пример записи методов (функций) в языке Razor MVC

Пример записи функций в языке Razor. Все методы всегда реализовывал в контроллерах, а недавно нужно было добавить простенький метод во View. Оказывается сделать это можно так: @functions {     static int MySimpleMethod(int id)     {          return id*5;     } } @* Вызов самого метода в теле View *@ @MySimpleMethod(5)

Представление обычного текста и html кода с помощью разметки Razor MVC C#

Для новичков в MVC хочу дать пару советов как записывать обычный текст и html код в разметке Razor если на странице используются блоки кода. Этот вопрос возник у меня самого, когда я приступил к изучению MVC. Например, текст находится в теле оператора if.  В этом случае перед отображаемым текстом нужно поставить   @:   @if (Condition) { @:Отображаемый текст <br/> }   Если отображаемый текст заключен в html теги, то дополнительных символов ставить не нужно. Пример: @if (Condition) { <div>Отображаемый текст</div> } Если текста много и он перемешан с    html тегами, то весь блок можно заключить в тег разметки  Razor  <text> @if (Condition) { <text> <div>Отображаемый текст</div> Отображаемый текст <div>Отображаемый текст</div> Отображаемый текст </text> } Если мы хотим отобразить строковую переменную с html кодом, то при обычном выводе теги html кодируют...

C# и API Facebook. Пример размещения записи на стене пользователя с помощью API.

В связи с пользующимися повышенной популярностью статьями  C# и API ВКонтакте. Обращение к адресу API-сервиса путем создания HTTP-запроса (POST)  и  Пример взаимодействия с Odnoklassniki Rest API на C#   продолжаю эту серию публикаций статьей по работе  с API Facebook. Задача: добавлять на стену пользователя сообщение через API Facebook. Решение: Первое, что мы сделаем - это р егистрируем наше приложение на  https://developers.facebook.com После регистрации нам будут доступны AppID и AppSecret приложения. Чтобы отправлять данные от лица пользователя необходимо предложить ему авторизоваться на сайте  Facebook. Для этого предлагаем ему перейти по следующей ссылке: string.Format( "https://www.facebook.com/dialog/oauth?client_id={0}&redirect_uri=1}&response_type=code&scope=publish_stream",   AppID   , RedirectUri); где  AppID  - ID нашего приложения. А  RedirectUri - это адрес куда вернется п...

Монетизация блога. Партнерская программа от интернет-магазина обуви Sapato.ru

Может ли реклама в блоге приносить хоть сколько-нибудь значимый доход - вот вопрос, который на днях задал себе  я.  Думаю, что каждый блоггер рано или поздно подымавает над тем: "Не разместить ли мне рекламу в своем дневнике?". Конечно, не скрою, навязчивая реклама, да и реклама в общем, раздражает многих и меня в том числе. Поэтому я решил не ляпать на каждом клочке свободного места пестрый баннер, а выбрал одного более менее крупного игрока на рынке интернет торговли и решил поработать с их партнерской программой. Итак, это интернет-магазин обуви  Sapato.ru  Ссылка на партнерскую программу магазина нашлась в футере главной страницы. Пройдя нехитрую систему регистрации, я получил доступ к личному партнерскому коду и списку различных инструментов для рекламы данного магазина:  ссылка с партнерским кодом, баннеры, xml-каталог. В процессе регистрации потребовались сканированные копии документов: паспорт, ИНН, страховое свидетельство. Сразу хочу о...

Авторизация Membership пользователей сквозь сайты с разными суб доменами. Membership Cross Sub Domain Authorization.

Задача:  Есть несколько серверов, на которых размещены сайты с доменами вида: domain.ru, sub1 .domain.ru,  sub2 .domain.ru,  sub3 .domain.ru  и тп. То есть эти сайты  объединяет    единый корневой домен. Необходимо настроить авторизацию на этих сайтах таким образом, чтобы пользователь осуществляя вход на одном сайте, автоматически считался авторизованным на другом. Авторизация на сайтах реализована через Membership Provider. Пользователи хранятся в одной базе данных. Решение: Конечно же для решения этой задачи не обойтись без Cookies. Поэтому первое, что мы сделаем -  это в web.config включим использование  Cookie. Здесь небольшое отступление. Для того, чтобы  Cookie читалась на всех суб доменах верхнего уровня необходимо в качестве домена для  Cookie  указать корневой домен с точкой (для нашего примера . domain.ru ) Смотрим как сделать эти действия с помощью одной строчки в  web.config <authenticati...

Monotouch и Monodevelop. Программируем для iOS на C# на примере нашего проекта. Часть III.

Всем привет, я снова с вами! Прошел достаточно длинный промежуток времени c момента моего последнего сообщения.  Жизненные перипетии, неопределенность с работой... Но это все лирика. Сегодня хочу рассказать больше о нашем приложении, которое мы сделали для iPhone. Напоминаю, что приложение мы сделали на C# не написав ни одной строчки кода в Objective-C. Этот пост предназначается тем, кто мучается с выбором платформы для разработки приложений под iPhone. Ниже я привожу описание приложения разработанного с помощью Monotouch на C#. Итак, это приложение для интернет магазина ЗАКАЖИ. Вкратце описание функционала. Приложение  интернет магазина  ЗАКАЖИ для iPhone предоставляет пользователям возможность находить товар в каталоге через меню, осуществлять поиск по всему ассортименту. Пользователь может просматривать карточку товара: цены на товар, фотографии товара, характеристики товара, варианты доставки. Товары можно добавлять в корзину для последующей покупки. После о...

Monotouch и Monodevelop. Программируем для iOS на C# на примере нашего проекта. Часть II.

И снова здравствуйте! Продолжаю серию публикаций про разработку приложения под iOS с использованием Monotouch и Monodevelop. В прошлом сообщении я остановился на этапе получения лицензии. Для завершения квеста нам требовалось отправить в Apple документы о компании (выписку из ЕГРЮЛ) в двух вариантах: по-русски и заверенный перевод на английском. С этой задачей мы справились. Перевод оформили и заверили у нотариуса. Отправили по факсу. Потом нам пришло письмо с просьбой перезвонить по указанному номеру. Из Apple по какой-то причине до нас не дозвонились. Я внес на счет Скайпа 5 долларов и мой коллега позвонил по указанному номеру(почему-то Ирландскому). Он поговорил с девушкой на том конце провода минут пять(естественно по-английски), и нас допустили к следующему этапу. Следующий этап  - это оплата. Как я уже писал, для оплаты нужно было отправить по факсу все данные кредитной карты. Делать нечего, отправили данные и стали ждать.  Через два дня с карты списали де...

MVC. Sharing Controllers and Views.

Задача . Есть повторяющиеся блоки в связке Contoller+View, которые одинаковы для нескольких сайтов и хочется добавить их для этих сайтов как ссылку на библиотеку, так сказать 'расшарить'. А редактировать уже в одном проекте. Решение . Для решения этой задачи будем использовать библиотеку  Razor Generator . Razor Generator позволяет делать прекомпиляцию наших View. Мы можем вынести файлы в отдельную библиотеку, скомпилировать их и они станут доступными в других проектах. Посмотрим на примере. Создадим пустой проект. Назовем его Shared Views. В проекте повторим структуру MVC приложения: создадим папки Controllers, Models и Views и перенесем в папки файлы, которые мы хотим расшарить. Добавим необходимые ссылки на библиотеки MVC.  Через NuGet добавим библиотеку RazorGenerator. В  свойствах каждого Представления(View) укажем: Теперь можно проверить прекомпиляцию с помощью команды RunCustomTool. Для этого необходимо выбрать файл представ...

Индексация блога на платформе blogger (blogspot) в Яндексе за неделю.

Прошу прощения за долгое молчание. Впредь обещаю писать чаще. Сегодня отвлечемся от программирования и затронем тему SEO (Search Engine Optimization). Могу предположить, что любой начинающий и не только блоггер хочет, чтобы его статьи были  донесены до целевой аудитории. Не секрет, что большинство посетителей переходят на блоги через поисковые системы Яндекс, Google и др. Выбрав блог на платформе blogpost я сначала не задумывался о том, как он будет индексироваться поисковыми системами и будет ли вообще. Но со временем, обратившись к этому вопросу, я понял, что Google индексирует мой блог на ура, а Яндекс и знать о нем ничего не знает. В интернете подсказали, что о новом сайте (в данном случае блоге) нужно сообщить Яндексу. Для этих целей существует  сервис "Сообщить о новом сайте'  Я добавил свой блог и начал ждать. Прошло 2 недели - результат нулевой. Тогда я добавил свой сайт в  Вебмастер  Яндекса с целью отслеживать посещения моего блога поисковым р...

Monotouch и Monodevelop. Программируем для iOS на C# на примере нашего проекта. Часть I.

Сегодня я начинаю серию публикаций, посвященных разработке нашего первого приложения под iOS на C#. Так как это проект новый для нас, то статьи будут появляться по мере нашего продвижения в этом вопросе. Предыстория . Руководство поставило задачу своими силами сделать приложение Интернет-магазина для iPhon-ов и iPad-ов. А в дальнейшем и под Android. Как разработчики на C# мы стали изучать варианты реализации. И остановились на  Monotouch . Monotouch - это надстройка к Monodevelop, которая позволяет писать приложения под iOS на C#. Код компилируется в нативный objective C и прекрасно работает под iOS. Причем Monotouch позволяет писать не только для iOS, но и для Android. Как раз то, что нужно. Вы спросите, что такое Monodevelop? Это среда разработки на C#, работающая под Mac OS. Так сказать аналог VisualStudio для Mac-ов. И все же почему Monotouch? Ответ прост - низкий порог вхождения. Зная C# можно сразу начинать работу над приложением не тратя время на и...