Обновить
100.87

C# *

Объектно-ориентированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Полуавтоматическое инкрементирование версии проекта при работе с GIT в Visual Studio

Время на прочтение5 мин
Охват и читатели22K
В Интернетах написано немало статей об инкрементировании версий своих приложений и каждый использует свой метод. У кого-то ревизии используются в качестве «билдов», у кого-то это количество секунд текущих суток (например, Microsoft), у кого-то что-то другое.

В моем проекте используются 4 определяющие версии.

Например, 1.2.34.56, где:
1 — Major version: Критические изменения проекта (введен новый функционал, в корне переработан существующий и пр.). Устанавливается вручную;
2 — Minor version: Изменение функциональных частей приложения, значительное улучшение кода и пр. Устанавливается вручную;
24 — Build: номер релиза, попадающего в общество. Назначается автоматически;
56 — Revision: номер ревизии, полученный с GIT. Назначается автоматически.

Я не буду рассматривать кто какими методами пользуется, поэтому напишу как достиг данного результата.

Читать дальше →

Улучшаем LINQ для работы с IReadOnly-коллекциями

Время на прочтение7 мин
Охват и читатели17K
Как известно, при использовании интерфейса IEnumerable<> там, где подразумевается коллекция, могут случаться проблемы (см. например Проблемы использования IEnumerable и LINQ против LSP). К счастью, в .NET v4.5 в 2012-м году (немного поздновато, но лучше поздно, чем никогда), появились интерфейсы IReadOnlyCollection<>, IReadOnlyList<>, IReadOnlyDictionary<> (далее буду их обобщённо называть IReadOnly-интерфейсы). В отличие от IEnumerable<>, IReadOnly-интерфейсы дают возможность достаточно и без лишних требований обозначать функциональность коллекции, что и позволяет их рекомендовать для использования вместо IEnumerable<> везде, где подразумевается чтение коллекции. Но тут встречается одно затруднение. Одним из важных компонентов, потребляющим и создающим коллекции, является LINQ и, особенно, его часть «LINQ к объектам». К сожалению, IReadOnly-интерфейсы появились через 5 лет после LINQ, и в нём не используются. Все входные и выходные коллекции LINQ-операций имеют базовый тип IEnumerable<>, исходя из ограниченных возможностей которого, многие операции подразумевают лишние затраты: полный последовательный перебор или даже создание промежуточных копий входных коллекций. Более того, возвращая из операций тот же IEnumerable<>, LINQ требует при дальнейшем использовании результата опять использовать полный перебор и создание промежуточных копий. В связи с этим, у меня давно зрела мысль «подружить» LINQ с IReadOnly-интерфейсами.
Читать дальше →

Эти занимательные региональные настройки

Время на прочтение8 мин
Охват и читатели32K
Сегодня мы поговорим о региональных настройках. Но сперва — небольшая задачка: что выведет нижеприведённый код? (Код приведён на языке C#, но рассматривается достаточно общая проблематика, так что вы можете представить на его месте какой-нибудь другой язык.)

Console.WriteLine((-42).ToString() == "-42");
Console.WriteLine(double.NaN.ToString() == "NaN");
Console.WriteLine(int.Parse("-42") == -42);
Console.WriteLine(1.1.ToString().Contains("?") == false);
Console.WriteLine(new DateTime(2014, 1, 1).ToString().Contains("2014"));
Console.WriteLine("i".ToUpper() == "I" || "I".ToLower() == "i");

Сколько значений true у вас получилось? Если больше 0, то вам не мешает узнать больше про региональные настройки, т. к. правильный ответ: «зависит». К сожалению, многие программисты вообще не задумываются о том, что настройки эти в различных окружениях могут отличаться. А выставлять для всего кода InvariantCulture этим программистом лениво, в результате чего их прекрасные приложения ведут себя очень странно, попадая к пользователям из других стран.Ошибки бывают самые разные, но чаще всего связаны они с форматированием и парсингом строк — достаточно частыми задачами для многих программистов. В статье приведена краткая подборка некоторых важных моментов, на которые влияют региональные настройки.

CultureInfoExplorer Sceenshot
Читать дальше →

Подбор книг по C#

Время на прочтение4 мин
Охват и читатели282K
image

Мы решили собрать в одну подборку самые, по нашему мнению, интересные книги нашего издательства, посвященные языку программирования C#. В посте собраны хорошие книги от пособий для начинающих (например, примелькавшаяся книга серии Head First) до изданий Джеффри Рихтера и Чарли Петцольда для практикующих программистов, в общем – на любой вкус по самым лучшим ценам в интернете.
Читать дальше →

Das Experiment, или несколько дней жизни без Resharper'a

Время на прочтение4 мин
Охват и читатели6.3K

Вступление


image

Здравствуйте, меня зовут Vba и я resharper-о зависимый разработчик. Я использую студию(на данный момент 2013.3) в моей профессиональной деятельности для разработки ASP .NET MVC / JavaScript / HTML5 приложений. Неделю назад на «исходе*» моей resharper-лицензии я задался вопросом, а смогу ли я жить и работать без него? Вдохновленный вот этим и этим постами и тем фактом что меня задолбали постоянные подвисания студии и ее прожорливость** я решился на эксперимент.
Далее

Клиент-серверная работа с табличными данными для начинающих

Время на прочтение8 мин
Охват и читатели15K
Вместо начала.

Недавно пришлось заняться написанием приложения по работе. Раньше работал исключительно с PHP и web-мордами, однако быо требование сделать полноценное windows-приложение с авторизацией, использованием forms и прочей «петрушки». Эту статью я пишу на отвлеченном абстрактном примере с целью сделать ман доступным и простым. Собственно, здесь важен сам ход действий, нежели само приложение.

Задача была без веб-интерфейса работать с табличными данными, получаемыми с сервера. Доступные инструменты: web-сервер Apache + PHP + MySQL и C#-приложение на стороне клиента.

Профессионалам вряд ли будет интересно. А вот новичкам, мне кажется, может пригодиться. Очень надеюсь, что я не перемудрил с воплощением идеи.
Кому интересна реализация связки — прошу под кат.
Читать дальше →

«My way» с MS Excel

Время на прочтение9 мин
Охват и читатели35K
В компании, где я работаю, пользователи работают с данными с помощью MS Excel. Основным хранилищем информации является БД Oracle. Отсюда требуется:

  • Представление отчетов из базы данных в формате Excel
  • Забирать информацию в виде Excel файлов и заливать её в Oracle

Проблематика:


Работа с Excel, довольно сильно отличается от работы с обычным текстовым файлом. В его ячейках помимо значений могут храниться сложные формулы и данные, загруженные по ссылкам. Так же в колонке с одним типом данных могут встречаться значения других типов. В случае какой-либо ошибки в ячейке информация на листе продолжает оставаться доступной и только у этой ячейки будет статус Error. Есть и другие вещи, которые делают Excel очень гибким и уникальным продуктом для пользователя и не простым для разработчика.
Читать дальше →

Пишем под ТСД. Подключение сканера штрихкода, как компонент формы

Время на прочтение4 мин
Охват и читатели46K
Ни для кого не секрет, что промышленное ПО для терминалов сбора данных (ТСД) пишется для автоматизации бизнес процессов, в особенности — складских. Большая часть задач, которые необходимо решить с помощью ТСД, связана со штрихкодированием, благо сканер штрихкода в девайс встроен.
В этом статье пойдет речь о том, как начать писать программы для терминалов сбора данных, и как подключить и использовать сканер штрихкода.



Читать дальше →

Реалистичное гравитационное линзование на Unity

Время на прочтение4 мин
Охват и читатели28K
image
Эффект гравитационной линзы вызванный скоплением галактик RCS2 032727-132623

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

Читать дальше →

Consulo — IDE где Java и C# живут вместе

Время на прочтение3 мин
Охват и читатели53K
Здравствуйте. Прошло много времени после моих постов на хабре (тык, тык) на тему Consulo. Ниже расскажу, что изменилось за это время.

Для тех, кто пропустил мои посты:
Consulo — это форк IntelliJ IDEA Community Edition, который имеет поддержку .NET(C# на текущий момент), Java, Javascript(NodeJS), и многое другое. Проект собрал множество открытых плагинов в себе. При этом код остался открытым.



Читать дальше →

Некоторые тонкости GetHashCode

Время на прочтение3 мин
Охват и читатели15K
При чтении «Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries» натолкнулся на такую фразу:

«Ensure that GetHashCode returns exactly the same value regardless of any changes that are made to the object».

Хм… подумал я, о чем это они? Перед глазами всплыла стандартная реализация, которая генерируется ReSharper'ом и я осознал, что генерируемое значение не будет постоянным на протяжении жизни объекта при его изменениях.
Читать дальше →

В каких условиях и как работается на Польском объект закрытого типа

Время на прочтение3 мин
Охват и читатели10K
Джен добрый или просто «Чешч» хабровчани! (На польском!)
Коротко о моей работе в Польше:
image
Переехав в Польшу, подальше от войны в Украине, я думал продолжить свой отложенный в пыльное облако проект но не фортануло!
Собственно попал я в компанию по знакомству, знакомому нужен был программист
Читать дальше →

Реверс-инжиниринг и патч игры на Unity3d

Время на прочтение3 мин
Охват и читатели21K
Статья ориентирована на аудиторию, не имеющую какого-либо опыта. В ней не содержится описание каких-либо взломов и «плохих» патчей.

Предисловие


Однажды мне в руки попалась игра Unturned, построенная на движке Unity3d. Позже выяснилось, что она не лишена недостатков. Она находится в альфа версии, так что сервер даже не оповещает игроков о убийстве другого персонажа, что было не удобно в боях PvP. До этого случая у меня не было опыта работы с cil и реверс-инжинирингом c# приложений, тем более Unity.
Читать дальше →

Ближайшие события

Улучшаем производительность: полезные советы и приёмы в .NET

Время на прочтение8 мин
Охват и читатели32K
Эта статья входит в серию статей по улучшению производительности в .NET. Первую статью можно найти здесь.

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

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

  • Вы пишете новый код и решили делать это немного лучше и с экономией
  • Вы дошли до этапа, когда начались оптимизации и рефакторинг, поэтому просматриваете и меняете участки кода, которые выполняются очень часто
  • Вы пишете высокопроизводительную систему и экономите на спичках

Я ни в коем случае не призываю вас бежать и исправлять весь код в ваших проектах. Более того, я призываю вас не делать этого, потому что это простые хаки, и скорее всего они будут вноситься бездумно в большое количество кода, а это может повлечь за собой появление новых ошибок. Это не те хаки, которые скинут бабу с воза вашего приложения и заставят кобылу-сервак бежать в десять раз быстрее. В лучшем случае удастся выжать процентов десять. Но с миру по нитке — голому рубашка.
Читать дальше →

Создание пользовательских миграционных операций в Entity Framework 6

Время на прочтение12 мин
Охват и читатели9.9K
Миграции в Entity Framework (EF) представляют собой строго типизированный подход для выполнения распространенных операций, таких как создание, изменение и удаление таблиц, столбцов, индексов, и т.д. Однако реализация базовых операций достаточно ограничена и не поддерживает весь спектр параметров, которые поддерживает та или иная СУБД.

До EF 6, единственным способом обхода данного ограничения было использование операции Sql, которая позволяет выполнить произвольную команду SQL при выполнении миграции. В EF 6 также появилась возможность реализации пользовательских строго типизированных операций.
Читать дальше →

ISO-3166 в .NET Framework

Время на прочтение1 мин
Охват и читатели6.2K
В одном из проектов возникла потребность — по названию страны на английском языке получить её двухбуквенный код.
Как известно, двухбуквенные обозначения для стран мира указаны в стандарте ISO 3166-1.
Разочарованием для меня стало то, что в .NET Framework нет прямой поддержки этого стандарта.
Пришлось изобрести свой велосипед.
Читать дальше →

Usb web notifier в подсветку

Время на прочтение3 мин
Охват и читатели19K


К сожалению, довелось мне простудиться, застрять дома на три дня, и от безудержного веселья начать перебирать «долгий ящик». В оном ящике я обнаружил «usb уведомитель» от фирмы CBR. Девайс предназначен, для оповещения о входящих сообщений на email, посредством изменения цветовой гаммы.
Читать дальше →

Как я играл в банк

Время на прочтение6 мин
Охват и читатели55K
Привет, Хабр!
Лето, все в отпуске. У всех расходы. Где взять денег? У банка!
Только за этот июль крупнейший банк России выдал кредитов физическим лицам на 73 545 493 тыс. руб. Ипотечные займы Северо-Западного отделения составляет 53% от общего портфеля, потребительские кредиты — 32%, согласно пресс-релизу . Средний размер ипотечного займа за март 2014 составил порядка 1.5 млн рублей. Средний размер автокредита составляет
не менее 0.5 млн рублей. Спасибо lany за предоставленные ссылки.
Исходя из вышеприведенных цифр, можно предположить, что банк умудрился за месяц выдать кредит около двумстам тысячам человек.
Конечно, в этом банке используют скоринговые системы.
Я узнал про скоринговые системы пару лет назад и был потрясен. Сама идея, что бездушная машина может принимать решение о выдаче кредита на основе статистических данных, не выходила из головы. Я захотел поиграть в банк и проверить, выдаст ли компьютер кредиты моим друзьям, just for fun. Настоящие скоринговые системы я никогда не видел, но решил, что это и неважно, напишу сам.
Сказано — сделано.

Исходники на репе в гитхабе.

Осторожно, много изображений!
Читать дальше →

Как программировать на Visual C# 2012. 5-е изд

Время на прочтение1 мин
Охват и читатели17K
image

Всем привет. Книга, которую мы хотим вам представить, вышла не сегодня и даже не вчера, но до сих пор (даже после выхода VS2013) является актуальной, почему мы и хотим уделить ей внимание. В принципе, все понятно из названия, эта книга посвящена работе с языком C# в среде Visual Studio 2012. Данное издание — подробнейшее руководство по языку Visual C# начиная с самых азов, и подойдет она широкому кругу читателей, от опытных программистов, осваивающих новые для себя языки, до тех, кто только начал осваиваться в программировании (и для них в первую очередь). Фактор «вводной» книги, крайне подробной и скурпулезно описывающей азы предметной области может показаться практикующему программисту минусом, он просто пролистнет эти страницы. Но бывает ли в подобной книге подробная информация излишней? Язык повествования простой и доходчивый, но подойдет и для тех, что считает, что серия Head First недостаточно серьезна.
Читать дальше →

Обработка исключений в асинхронном коде при переходе на .NET 4.5

Время на прочтение3 мин
Охват и читатели20K
В посте я попытаюсь раскрыть подводные камни, которые возникают при обработке исключений в асинхронном коде в .NET 4 в контексте .NET 4.5

Если вам интересно, почему при некоторых условиях код из примера ниже завершит работу без необработанного исключения, добро пожаловать под кат.
Читать дальше →

Вклад авторов