Все потоки
Поиск
Написать публикацию
Обновить
93.12

C# *

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

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

Три возраста паттерна Singleton

Время на прочтение5 мин
Количество просмотров96K
Паттерн Singleton появился, пожалуй, как только появились статичные объекты. В Smalltalk-80 так был сделан ChangeSet, а чуть в самых разных библиотеках стали появляться сессии, статусы и тому подобные объекты, которых объединяло одно — они должны были быть одни-единственные на всю программу.

В 1994 году вышла известная книга «Паттерны проектирования», представив публике, среди 22-х прочих, и нашего героя, которого теперь назвали Singleton. Была там и его реализация на C++, вот такая:
Читать дальше →

Отправляем письма из ASP .NET MVC

Время на прочтение3 мин
Количество просмотров27K
Часто в приложениях возникает необходимость отправлять письма пользователям. Сегодня я покажу как с помощью ActionMailer .Net эта задача легко решается. Основной его плюс в представлении отправляемых писем в виде действий контроллера, само тело письма представлено отображением, а также то, что в режиме отладки он позволяет сохранять письма напрямую на жесткий диск, без использования почтового сервера.
Читать дальше →

Стереотипность мышления в программировании

Время на прочтение3 мин
Количество просмотров3.4K
Капитан очевидность в боевом костюме
Скорость развития IT столь высока, что многие технологии и идеи не успевают пройти проверку временем и становятся де-факто стандартами. Порой мы следуем этим стандартам по стадному принципу – как все, так и я. Это очень легко и комфортно. А иногда эти идеи становятся настолько незыблемы, что мы следуем им фанатично, не пытаясь задумываться правильно это или нет.



1. Код метода должен вмещаться на экран монитора.
Читать дальше →

xNet — C# библиотека для работы с Web

Время на прочтение7 мин
Количество просмотров146K
Постепенно, с изучением C# и .NET Framework, я начал писать различные Helper'ы, которые скрывали рутинный код за вызовом всего одного метода. После это переросло в разработку полноценной библиотеки, которую я хочу вам представить. Данная библиотека написана полностью 'с нуля'.

Так что же такое xNet?


xNet — это библиотека классов для .NET Framework, которая включает в себя:
  • Классы для работы с прокси-серверами: HTTP, Socks4(a), Socks5, Chain.
  • Классы для работы с HTTP 1.0/1.1 протоколом: keep-alive, gzip, deflate, chunked, SSL, прокси и другое.

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

Видео. Введение в MonoTouch/Mono под Android

Время на прочтение1 мин
Количество просмотров14K
Видео выступления AndreyBaskov с ADD-2012.



MonoTouch и MonoDroid это фреймворки, которые позволяют писать приложения для iPhone и Android на C#. После появления Windows Phone 7 на C# можно писать сразу под три платформы. При этом интерфейс остается нативным и не страдает скорость работы.

Из видео вы узнаете:
— про эти фреймворки в целом;
— что MonoTouch компилирует проекты в нативный код;
— а в Mono for Android CLR работает параллельно с Java VM.

Технология вполне жизнеспособная, мы за год создали на ней больше 6 проектов, два из них побывали в топе AppStore, суммарно более 200 тысяч установок. Если вы пишете на C# и живете в Санкт-Петербурге можете убедиться в этом лично :)

Интегрируем Amazon S3 в .Net приложение

Время на прочтение3 мин
Количество просмотров16K
Недавно передо мной встала задача использования в своем приложении облачного хранилища. Не сталкивавшись с подобным ранее, я думал что эта задача займет больше времени. Но, на мое удивление, уже разработаны достаточно удобные инструменты для взаимодействия. Пример с их использованием описан в данном топике.
Читать дальше →

Knockout MVC — Сила Knockout.js для ASP.NET MVC

Время на прочтение7 мин
Количество просмотров54K
knockoutmvcДля тех кто не в курсе, Knockout.js — это популярная JavaScript библиотека, позволяющая реализовать Model-View-View Model (MVVM) паттерн на клиенте. На Хабре уже много писали про него (раз, два, три, четыре, пять, видео). Освоить Knockout.js можно очень быстро — ведь есть система интерактивного обучения, куча живых примеров (можно потыкать и посмотреть исходный код) и прекрасная документация.

Очень часто Knockout.js используют в связке с ASP.NET MVC — ведь библиотека существенно упрощает написание клиентской логики. Однако, возникает много типичных проблем для клиент-серверной разработки: основную модель и часть логики её обработки приходится описывать как на клиенте (JavaScript), так и на сервере (C#/VB). Кроме того, есть рутинная часть, связанная с обращением клиента к серверным методам и передачи им модели для обработки. Но не стоит печалиться! Теперь у нас есть Knockout MVC — это .NET оболочка для Knockout.js, которая генерирует весь нужный JavaScript-код за нас. Нам остаётся только описать нашу модель на C# и в MVVM-стиле указать для каждого нужного html-элемента к какому свойству модели нужно привязаться (а можно указать и целые выражения — они будут транслированы в js). Таким образом, можно получить полноценное кроссбраузерное клиентское веб-приложение без единой строчки JavaScript!
Читать дальше →

Мой велосипед Entity FrameWork, Auto Migration, With Save Data

Время на прочтение3 мин
Количество просмотров3.5K
Люблю я велосипеды.

В процессе написания ПО с использование EF, часто меняется структура, что создает проблемы. До версии 4.3 — пересоздание БД с потерей данных и необходимостью наполнения тестовыми.
С версии 4.3. появилась Миграция.
Читать дальше →

Крадущийся тигр, затаившийся дракон

Время на прочтение8 мин
Количество просмотров36K
Java vs. C#… Что может быть лучше вечного спора? Нет, данная статья не посвящена очередному бенчмарку, и даже не является holy war, не стоит даже вопрос: «кто круче».

Для каждой задачи существует свой инструмент. Сравнивать C# и Ruby, например, не имеет смысла, т.к. их целевое предназначение совершенно разное, да и природа также. Однако именно C# и Java являются наиболее близкими по своей философии.

Очень часто коллеги, пишущие на Java, даже не подозревают о многих (!!!) вещах, которые предоставляет (или, наоборот не предоставляет) C#.

Если Вам интересно посмотреть на C# и Java без субъективизма, а также узнать внутреннее устройство той или иной возможности, тогда вперед.
Читать дальше →

Вторая встреча Microsoft .NET User Group в Гомеле

Время на прочтение1 мин
Количество просмотров2K
16 июня в 10.00 состоится вторая встреча Microsoft .NET User Group в Гомеле. Место встречи: ГГТУ им. П.О. Сухого, 2й корпус, аудитория 306, пр. Октября 48, Гомель, Беларусь.

Ожидаются доклады:
  • Доступ к данным в ASP.NET. Докладчик: Морозько Александр
  • Code First в Entity Framework. Докладчик: Лопунов Дмитрий
  • XAML в WPF и Silverlight. Докладчик: Ежов Сергей
  • Разработка надстроек для Microsoft Office. Докладчик: Терехов Дмитрий


В перерывах будет организован кофе-брейк.
Встреча состоится при поддержке гомельских IT-компаний — Rus Wizards и EPAM.

Для участия необходимо зарегистрироваться:

Построение графиков на WPF форме под .NET Framework 4

Время на прочтение3 мин
Количество просмотров73K
Под .NET существует множество библиотек для построения графиков. Выбор в сторону решения от Microsoft подкупил тем, что оно встроено в .NET Framework 4 и потому не требует подключения сторонних библиотек. Хотя есть и один недостаток — работать с ним можно только на форме Windows Forms, для WPF форм штатной работы с компонентом не предусмотрено. Из-за этого все мануалы, начинающиеся словами «перетащите компонент Chart на форму» шли лесом абсолютно не помогали решить поставленную проблему.
Читать дальше →

Программная генерация скриптов для MSSQL

Время на прочтение5 мин
Количество просмотров15K
В силу частых и неупорядоченных изменений базы данных, большим числом пользователей, часто возникает вопросы о истории изменений. Речь не идет о тотально логирование всех изменений, которые происходят с базой в течение дня. Интерес представляют собой снимки структуры БД каждый день после окончания рабочего дня. С помощью SQL Server Management Studio можно сгенерировать скрипты, но поштучно или все сразу. Полную свободу действий можно получить использовав набор библиотек от SQL Server Management Studio в вашем .NET приложение. Описание программы генерации скриптов: таблиц, представлений, процедур далее.
Читать дальше →

Детали реализации двойной буферизации в Windows Forms

Время на прочтение7 мин
Количество просмотров18K
О том, что такое двойная буферизация много написано здесь и здесь.

Здесь можно почитать, как реализуется ДБ на Java.

Я расскажу, как реализуется двойная буферизация на C#. Многое из того, что здесь написал можно прочитать в MSDN, но без деталей реализации.

Ручное управление двойной буферизацией (далее ДБ)


Для ручного управления двойной буферизацией, .NET Framework предоставляет следующие 3 класса:
  • BufferedGraphics – обеспечивает буфер для временного хранения графики и средства вывода её на полотно контрола.
  • BufferedGraphicsContext — обеспечивает создание нового объекта BufferedGraphics на основе объекта Graphics;
  • BufferedGraphicsManager – предоставляет дефолтный BufferedGraphicsContext.
Читать дальше →

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

Погружаемся в глубины C# dynamic

Время на прочтение5 мин
Количество просмотров77K
Одним из наиболее заметных дополнений в C# 4 является dynamic. Об этом рассказано много и не раз. Но всегда выпускается из виду DLR (Dynamic Language Runtime). В данной статье мы рассмотрим внутреннее устройство DLR, работу самого компилятора, а также дадим определение понятиям статически-, динамически- типизированный язык со слабой и сильной типизациями. И, конечно же, не останется без внимания техника PIC (Polymorphic Inline Cache), используемая, например, в Google V8 engine.
Читать дальше →

Оптимизация и Generics в CLR

Время на прочтение7 мин
Количество просмотров6.9K
В этой статье Джон Скит будет описывать как простейшие конструкции языка замедляют вашу программу и как их можно ускорить.

Как и в любой работе, сваязанной с производительностью приложений, результат может варьироваться в зависимости от условий (в частности, например, 64-разрядный JIT может работать несколько иначе), и в большинстве случаев это не должно вас волновать. Несмотря на это, относительно небольшое количество разработчиков пишут продакшен-код, состоящий из большого количества микрооптимизаций. Потому, пожалуйста, не принимайте этот пост как призыв к усложнению кода ради иррациональной оптимизации, которая якобы ускорит вашу программу. Используйте это только там, где это реально может понадобиться.

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

Вышел MonoDevelop 3.0

Время на прочтение2 мин
Количество просмотров16K
Релиз был бы ничем не примечателен, если бы состоял только из тонн багфиксов и улучшений производительности. Однако же помимо них присутствуют два заметных глазу улучшения:
1) Поддержка сборки приложений для Mac App Store
2) Кардинальные улучшения в редакторе текста

На последнем стоит остановиться подробнее.

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

Первая встреча Microsoft .NET User Group в Гомеле — первый блин не комом :)

Время на прочтение2 мин
Количество просмотров2.8K
21 апреля состоялась первая встреча Microsoft .NET User Group в Гомеле. Университет им. П.О. Сухого радушно принял в своих стенах группу единомышленников, жаждущих поделиться своими знаниями и самим узнать что-то новое.

Мероприятие было организовано гомельским филиалом компании Rus Wizards. Впрочем, и докладчики на первой конференции все были из этой компании. Мы не могли упустить возможность стать первыми организаторами встречи .NET User Group в Гомеле :)

Перейдём непосредственно к самим докладам. Стране надо знать своих героев, поэтому не могу не перечислить имена первопроходцев в Гомеле: Артём Ермаков, Александр Мостовцов, Александр Морозько, Дмитрий Лопунов и Александр Копачёв. Мария Семенкова стала техническим организатором этой встречи.

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

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

Время на прочтение8 мин
Количество просмотров18K
Привет, Хабр. Меня зовут Александр. И я хочу поделится своей историей работы над одним крупным и сложным проектом.

В этой статье не будет кода и схем, в ней будет только история создания «от и до» самого проекта. Думаю, многим будет интересна данная статья. Итак, поехали!

Начало


Все началось летом 2011. На тот момент я был 3 года чистокровным фрилансером. То есть моя работа — это фриланс. Работал и работаю до сих пор только с западными заказчиками. Основная специализация — разработка проектов связанных с распознаванием образов, текста и т.д.

Все началось с того, что я, как всегда, с утра проверял почту, чистил спам, занимался рутинной работой. Обычно я не смотрю, что у меня в спаме, но тут я увидел письмо, с вполне реального адреса. Я открыл письмо, в котором одна компания искала программиста для допиливания крупного западного проекта. Причем эта компания требовала программиста именно из моего города и обязательно с опытом работы в области распознавания. Я ради любопытства ответил на это письмо. Буквально через час мне пришел ответ. А через два мы уже созвонились с менеджером проекта. Поначалу мне показалось, что ничего сложного в доработке нет, обычный набор функционала. После непродолжительного разговора с менеджером я огласил свой прайс, то есть ставку в час. И на этом мы попрощались. На следующий день мне сказали, что согласны на мой ценник и дали тестовое задание. Я его успешно выполнил в течении часа, и мы двинулись дальше. А здесь начинается самое интересное. Во-первых, меня пригласили в офис для того, чтобы подписать договор о неразглашении (Non-Disclosure Agreement). Во-вторых, и это логично, исходники проекта мне обещали отдать только после подписания договора. Если честно, меня это смутило, не знаю даже почему. И интуиция меня не подвела. Я потребовал хотя бы часть исходного кода, чтобы оценить сложность работы и попросил рассказать подробнее о проекте. Как оказалось проект на тот момент велся уже три года и я был 4 (!) исполнителем. До меня работала американская компания, потом индусы, потом компания, которая наняла меня, пыталась реализовать проект силами одной девочки-программиста, а потом это все чудо предложили разгребать мне. Меня это не просто удивило, а очень насторожило. Потом я узнал множество удивительных вещей, например о том, что заказчик 2 года не видел программу, а видел только скриншоты, а индусы кормили обещаниями этого заказчика. У меня не укладывалось в голове, как такое можно реализовать. Менеджеру индусов надо дать медаль «За находчивость».

После того как я выслушал удивительную историю, мы договорились с менеджером о том, что он мне отдаст исходный код и я оценю масштаб трагедии. Чтобы было более понятно, я расскажу более подробно о проекте. Этот проект — это инструмент для инженеров, архитекторов, электриков и других людей, которые занимаются строительством домов, небоскребов, одним словом зданий. Он служит для подсчета различных элементов на строительных планах, расчета площадей, измерения длин и составления смет. Грубо говоря есть строительный план и на нем есть розетки. Нам надо распознать и посчитать сколько этих розеток. Для распознавания использовалась библиотека написанная другим программистом. Сам проект написан на C#. Моя задача была собрать все воедино и доработать дополнительный функционал, а также привести программу к более менее стабильному состоянию. Кажется все просто и элементарно. Я тоже так подумал. Но не тут-то было.

После того как я получил исходники, я попытался скомпилировать проект. Это мне не удалось. После краткого анализа, я исправил ошибки и все же запустил проект. Но, к сожалению, он не заработал так как нужно. После нескольких часов анализа кода я пришел к выводу, что вся проблема в библиотеке распознавания. На тот момент у меня стояла 64-битная «семерка», а у менеджера 32-битная. У него все работало, у меня нет. Я попросил, что бы мне скомпилировали библиотеку под 64-битную платформу. Но разработчик библиотеки с пеной у рта доказывал, что не в разрядности дело. Я не мог ему ничего доказать, так как он дал очень немного информации о своей библиотеке и вообще берег ее как зеницу ока. Время шло и мне надо было хотя бы полностью провести процесс поиска. Я плюнул на все и поставил себе 32-х битную версию ОС. И о чудо! Все заработало. Отвлекаясь, хочу сказать о библиотеке, в будущем дело все же оказалось в ее разрядности.

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

1. Компоненты и контролы.

Проект очень сильно связан с графикой, но для ее вывода и обработки использовался обычный PictureBox. Самый маленький размер плана — 5400x3600 пикселей. Знающие люди поймут, что для PictureBox -это достаточно проблематичная тема с выводом больших картинок и их обработкой. Не стоит забывать, что помимо самих планов выводится еще много информации (площади, текст, найденные символы и т.д.). При запуске проекта с 5 маленькими планами, программа непременно падала с ошибкой «Out of memory». Что было очень большой проблемой, так как основной задумкой было то, что инструмент должен был работать по принципу «запустил и забыл».

2. Логика архитектуры исходного кода программы.
Читать дальше →

Декомпилятор от JetBrains: релиз dotPeek 1.0

Время на прочтение2 мин
Количество просмотров63K
imageДобрый день, хабровчане! Бесплатный декомпилятор и менеджер сборок от JetBrains ушел в народ – несколько дней назад на нашем сайте стал доступен официальный релиз dotPeek 1.0.

dotPeek, о котором мы писали на Хабре около года назад, когда появились первые публичные сборки продукта, — это инструмент, сочетающий качественную декомпиляцию с развитой навигацией и поиском на манер ReSharper — нашего небезызвестного расширения для Visual Studio. Сегодня мы представляем вашему вниманию авторизованный перевод новости о выходе этого продукта.

Основные возможности dotPeek 1.0 таковы:

  • Декомпиляция сборок .NET Framework 1.0-4.5 в эквивалентный код на C#. Поддерживаются библиотеки (.dll), исполняемые файлы (.exe), а также файлы метаданных Windows 8 (.winmd). Кроме того, dotPeek умеет искать сборки в каталогах, которые вы ему указываете, и открывает разного рода архивы: как .zip, так и родственные форматы .vsix и .nupkg.
Читать дальше →

Android портирован на C#

Время на прочтение1 мин
Количество просмотров32K
В разгар битвы между Oracle и Google за право использовать Java/Dalvik в системе Android, компания Xamarin представила альтернативу — более производительную и энергоэффективную версию Android на С#. Тесты производительности говорят сами за себя.



В отличие от Sun и языка Java, компания Microsoft направила C# и .NET VM для стандартизации в ECMA, система защищена от патентных исков строгими требованиями ISO, а также обязательством Microsoft.
Читать дальше →

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