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

Сообщения

Показаны сообщения с ярлыком "C#"

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

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

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

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

Представление обычного текста и 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 кодируют...

Авторизация 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# на примере нашего проекта. Часть 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# можно сразу начинать работу над приложением не тратя время на и...

Получение MD5Hash строки на C#

Внешние Web API зачастую требуют цифровую подпись запросов в виде MD5Hash-а передаваемых параметров. Ниже приведу метод, который я использую для получения MD5Hash. public static string GetMD5Hash(string input) { var x = new System.Security.Cryptography.MD5CryptoServiceProvider(); var bs = Encoding.UTF8.GetBytes(input); bs = x.ComputeHash(bs); var s = new StringBuilder(); foreach (var b in bs) { s.Append(b.ToString("x2").ToLower()); } return s.ToString(); } В скором времени приведу пример, где я использую этот метод в работе с Rest API Одноклассников.

C# десериализация xml.

Недавно я писал о том, как десериализовать json строку в класс . Сегодня я напишу как десериализовать в объект xml файл. Итак, допустим, что мы хотим десериализовать xml файл со следующей структурой: <order id="1234"> <items> <item price="0123"/> <item price="1234"/> <item price="2345"/> </items> </order> Создаем 2 класса: [XmlRoot("order")] public class OrderModel { [XmlArray("items")] [XmlArrayItem("item", typeof(OrderItem))] public List<OrderItem> Items { get; set; } [XmlAttribute("id")] public int Id { get; set; } } public class OrderItem { [XmlAttribute("price")] public int Price { get; set; } } Для класса OrderModel указываем атрибут XmlRoot, который говорит о том, что элемент order является корневым элементом xml файла. Для вложенных элементов указываем атрибуты: XmlAttribute - если речь идет о...

C# и Json.NET. Десериализация JSON строки в объект.

В статье  C# и API ВКонтакте. Обращение к адресу API-сервиса путем создания HTTP-запроса (POST)  я писал о том, что возвращаемую от API json строку  я десериализую в класс. Для десериализации я использую библиотеку  Json.NET . Тесты показали, что эта библиотека  позволяет выполнять сериализацию / десериализацию гораздо быстрее чем DataContractJsonSerializer и JavaScriptSerializer. Использование библиотеки очень простое. Например, мы хотим десериализовать json строку в класс Person. Создаем класс: public class Person { [JsonProperty(PropertyName = "firstname")] public string FirstName { get; set;} [JsonProperty(PropertyName = "secondname")] public string SecondName { get; set;} } Для полей указываем аттрибут JsonProperty, где указываем название поля в строке, которую хотим  десериализовать. Для десериализации вызываем следующий метод: var  Person  = JsonConvert.DeserializeObject<Person>(jsonString);  ...

Зависимость кеша от изменений в базе данных. CacheDependency на примере нашего проекта.

В предыдущей записи в блоге  я писал, что в  своем проекте мы используем CacheDependency для  динамического обновления кеша в зависимости от изменений в базе данных. Теперь пишу об этом более подробно. Итак, CacheDependency позволяет нам устанавливать зависимость между объектом в кеше и строкой в базе данных. Как только строка меняется, обнуляется кеш, идет новый запрос в базу, а в кеш записывается новое значение.Таким образом, мы имеем всегда актуальные данные. При этом данные закешированы, и обновляются только при необходимости. Так как в своем проекте мы используем SQL Server 2008, то для мониторинга изменений мы будем использовать Service Broker. Включается он в базе следующим образом: ALTER DATABASE [База данных] SET ENABLE_BROKER Тут есть одна сложность. Включить брокер можно только в том случае, если база находится в режиме SINGLE_USER. То есть для рабочего проекта придется отключать пользователей. Следующим шагом является программное создание...

Изменение размера картинок на c#. Проблемы с качеством итогового изображения.

Сегодня расскажу о схеме работы с картинками, которая используется сейчас у меня на работе. Картинки хранятся в базе в максимальном разрешении. Для вывода на сайте картинка  в зависимости от страницы или блока сжимается до нужного в пикселях размера. Размер пикселей передается в параметрах запроса. На итоговое изображение накладывается watermark, затем картинка кешируется и при повторном обращении уже берется из кеша. В момент отправки клиенту картинке присваивается уникальный Etag и параметры кеширования в браузере. То есть при повторном обращении браузер уже не запрашивает картинку, а берет из дискового кеша. Недавно мы столкнулись с такой проблемой: при изменении gif картинки, качество ее заметно ухудшалось и те решения, которые успешно работали c jpeg, с gif картинками не давали результатов. Решение оказалось достаточно простым. После изменения размера для gif картинок нужно устанавливать: ImageFormat  format = ImageFormat.Png; context.Response.ContentTy...