21 березня 2010 р.

Первая встреча. Итоги и впечатления.

Всем привет! Это случилось - первая встреча "Lviv .Net User Group" состоялась!

Немного впечатлений:
Вначале было немного страшно , что никто не придет - все оказались очень пунктуальными, и начали приходить аккурат в 19:00, как и договаривалась.
В итоге нас было человек 16 - 17. Начиная выступать - я полностью забыл свою вступительную речь, потому она вышла немного скомканной и не связной - буду с этим бороться. Но, потом, вроде бы разошелся и взял себя в руки - потому остальная часть встречи прошла достаточно гладко, за что и Вам - участники - Спасибо!
Некоторые вопросы оказались заковыристыми, потому на некоторые я затруднился ответить - тоже буду с этим бороться! Хотя, если были вопросы - значит меня кто то слушал - а это радует:)

В общем - всем огромное спасибо что пришли, надеюсь следующая встреча будет ещё лучше!

Теперь немного итогов:
-Как и многие сказали - не хватает реального примера или кода. В следующих встречах, я постараюсь, и будут просить докладчков - создавать не сухую презентацию со слайдами, а приводить реальные примеры того про что говорим - с демами, описанием решений и примеров. Главное, конечно же, - демо!

-Фриспич. Наверное, после каждого доклада, стоит выделить 10 минут на выражение своей мысли каждому желающему.

-Пицца - пати:) Как по мне , то стоит скидываться гривен по 20 - на афтепати - с пивом и пиццей, которое можно провести после выступления докладчиков. Можно и расслабиться, и поговорить.

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

-Стоит проводить докладs не только по технологиям, но и об смежных темах: Скрам, Аджайл, ТДД, автоматическое тестирование, и т.д.

Фото:
Фотографии со встречи вы можете посмотреть тут:
ТЫЦ!

А теперь немного о том, какой взнос вы можете дать нашей группе:

1. Мы ищем авторов для нашего блога! Вы хотите написать интересный топик - милости просим.
2. Мы ищем докладчиков! У Вас есть что рассказать - расскажите! Представьте себя или свою компания делая доклад!
3. Для компаний: Вы можете дать Нам помещение для встречи - мы с удовольствием воспользуемся им:)
4. У Вас есть идея - давайте обсудим ее!

Благодарности:
1. В первую очередь Вам - участники, за то что пришли, и слушали!
2. Компании SoftServeза предоставленную инфраструктуру, помещение и т.д.
3. Роману Краёвскому и Виталию Гулику за помощь в проведении встречи.

Помните, что группа будет развиваться, только если каждый будет делать взнос в развитие этой группы!

На сим, разрешите откланяться, увидимся на следующих встречах!

С Уважением,
-Дима

15 березня 2010 р.

20 правил программирования

Программист Джонатан Данилко поделился с читателями DCS Media своим опытом, сформулировав 20 наиболее ценных правил, которые он вывел за 20 лет работы.

http://webplanet.ru/knowhow/soft/admin/2010/03/15/20_lessons.html
http://www.dcs-media.com/Archive/20-20-top-20-programming-lessons-ive-learned-in-20-years-FH

11 березня 2010 р.

DLR in .Net

DLR(Dynamic Language Runtime) – одна из новых фич .Net 4.0. DLR используется для того чтоб можно было взаимодействовать с динамическими языками, такими как IronRuby & IronPython. Также с помощью DLR программисты могут создавать свои динамические языки, создавать динамические объекты, и ещё много всяких вкусностей про которые мы сегодня и поговорим.
Что входит в DLR для .Нет 4.0:



Expression Trees (деревья выражений):
Деревья выражений представляют языковый код в виде данных. Данные хранятся в древовидной структуре. Каждый узел в дереве выражений представляет выражение, например вызов метода или двоичную операцию, такую как x < y.( msdn )

// Add the following using directive to your code file:
// using System.Linq.Expressions;
// Create an expression tree.
Expression> exprTree = num => num < 5;
// Decompose the expression tree.
ParameterExpression param = (ParameterExpression)exprTree.Parameters[0];
BinaryExpression operation = (BinaryExpression)exprTree.Body;
ParameterExpression left = (ParameterExpression)operation.Left;
ConstantExpression right = (ConstantExpression)operation.Right;
Console.WriteLine("Decomposed expression: {0} => {1} {2} {3}",
param.Name, left.Name, operation.NodeType, right.Value);
/* This code produces the following output:
Decomposed expression: num => num LessThan 5
*/

Call Site Caching
Допустим у вас есть 2 данимических объекта a и b. Возможно, будет очень много мест в коде , где вы будете поризводить операции над этими объектами, допустим сложение. Операция над динамическими объектами – медленная операция, потом программисты Microsoft решили эту проблему кэшем. Call Site Cashing –кэширует харахтеристики ваших динамических объектов, и если операция вызывается повторно – не выполняет это операция опять, а просто возвращает данные из кэша.

Динамические объекты.
В .Нете 4.0 нам представлен новый тип переменной – динамическая переменная (dynamic ). Использование этой переменной заставляет компилятор решать какой тип переменной использовать в рантайме.

К примеру такой код , не выдаст нам ошибки на этапе компиляции, но выдаст 2 ошибки в рантайме:

public class TestClass
{ }
class Program
{
static void Main(string[] args)
{
dynamic dynObject = new TestClass();
string testString = dynObject.Hello();//error 1
dynamic dynObject2 = 7.0;
int i = dynObject2;//error 2
}
}

Но давайте же сдеаем несколько модификаций, чтоб эти ошибки пропали. Для создания динамических объектов, в .Нет 4.0 мы можем наследовать наши объекты от DynamicObject класса который содержит в себе большое количество виртуальных методов, с помощью которых мы можем граммотно рганизовать выполнение всякого рода динамических методов, свойств, и т.д.
К примеру, вот такой код, выполнится и запустится без проблем:

public class TestClass :DynamicObject
{
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
{
if (binder.Name == "Hello")
{
result = "This is Dynamic Object";
return true;
}
return base.TryInvokeMember(binder, args, out result);
}
}

class Program
{
static void Main(string[] args)
{
dynamic dynObject = new TestClass();
string testString = dynObject.Hello();
dynamic dynObject2 = 7.0;
int i = (int)dynObject2;
}
}


Но, ничего бы из этого не было возможным, если бы не ExpandoObject.
ExpandoObject – это новый и странный зверь в .Нете 4.0 который позволяет нам в рантайме добавлять новые свойства и методы. Следующим куском коды, мы создаем объект и в коде добавляем к нему два новых свойства и метод:

static void Main(string[] args)
{
dynamic MyExpando = new ExpandoObject();
MyExpando.Value1 = "new value 1";
MyExpando.Value2 = "new value 2";
MyExpando.DoSomething = new Action(() => Console.WriteLine("DoSomething called"));
Console.WriteLine(MyExpando.Value1);
MyExpando.DoSomething();
}


Что ж, подобьем итоги.
Где можно использовать динамические объекты:
  • Чтобы взаимодействовать объекты из динамических языков, таких как IronRuby и IronPython.
  • Для взаимодействия с COM объектами
  • Как замена рефлекции.
  • Для объектов, структра которых может меняться( HTML, XML, etc);

Плюсы:
  • Очень гибкие аппликации.
  • Краткость и понятность кода.

Минусы:
  • Уменьшение производительности.
  • Поетнциальная опасность возникновения ошибок в рантайме.



5 березня 2010 р.

Нашел интересную статейку:
10 заповедей для программиста:

1. Программирование - твоя главная страсть. И да не будет у тебя страсти главней.
2. Не сотвори себе кумира из конкретной технологии. Ибо программирование требует постоянного развития, а технологии-кумиры останавливают развитие.

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

4. Работай много и хорошо, но не забывай и про отдых. Ибо нет ничего страшнее, чем код усталого, засыпающего программиста.

5. Уважай учителей и учеников своих. Постоянно учись и учи окружающих, чтобы было тебе всё легче и легче делать всё более и более сложные вещи.

6. Не убий в себе ребенка. Не забывай эмоции от первого запуска первой написанной тобой программы и воспринимай каждую следующую, как ту - первую.

7. Не изменяй программированию. Ибо программист может стать кем угодно, но этот кто угодно обратно программистом уже не станет.

8. Не кради код ближнего своего.

9. Не программируй то, что может принести вред другим. Ибо встав раз на путь дьявола - на нем и останешься.

10. Не завидуй ближнему твоему, если он умеет лучше программировать. Ибо программирование - это божественный дар, но его можно развить. Так что не завидуй, а развивай.

4 березня 2010 р.

Параллельные вычисления в .Net 4.0

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

.Net 4.0 представляет нам широкий спектр инструментов для разработки паралельных аппликаций. Инструментарий называется просто - parallelization enhancements (PE).

Весь PE может быть разделен на 5 основных частей:
1. Task Parallel Library (TPL)
2. Parallel LINQ (PLINQ)
3. Инструменты для дебаггинга и профайлинга
4. Дата структуры координации
5. Parallel Pattern Library (PPL) (только С++).

Почему нам нужен parallelization enhancements?

Да, действительно, зачем нам все это нужно? Ведь можно просто создать кучу потоков, и радоваться мультипоточности.
Но:
1. Создание потока – очень ресурсоемкая операция. Создание большого количества потоков может причинить торможение Вашей аппликации.
2. Многие сейчас скажут: ну а как же пул потоков? Пул потоков решает большое количество проблем с торможением потоков, но опять же - но: пул потоков практически ничего не знает про работу которую исполняет тот или иной поток, потому запланировать работу кучи потоков – достаточно тяжелое занятие.


Разница между мультипоточностью и паралеллизмом.

Вот собственно и все. В мультипоточности может быть использовано 1 ядро, потому как операционная система использует 1 ядро, и очень быстро переключается между потоками. При паралельности потоки выполняются одновременно.
В первой стать , я для примера взял паралельные циклы:
Parallel.For()
Parallel.ForEach()
Для того, чтобы показать каков возможен прирост, будет использован следующий код:
Обычный For:
Stopwatch sw = new Stopwatch();
string str = string.Empty;
sw.Start();
//тут мы специально не используем стрингбилдер чтобы показать более - менее большие числа
for (int i = 0; i < 100000; i++)
{
str += i.ToString();
}
sw.Stop();
Console.WriteLine(sw.Elapsed.ToString());

Результат:00:00:37.9905721
Parallel For:
Stopwatch sw = new Stopwatch();
string str = string.Empty;
sw.Start();
Parallel.For(0, 100000, i =>
{
str += i.ToString();
});
sw.Stop();
Console.WriteLine(sw.Elapsed.ToString());

Результат: 00:00:06.6204853

Машина на которой вся эта радость тестилась: Core2Duo(2.66),3GB RAM, Windows7.
Результат впечатляет! На 4 ядерном скорость скорее всего будет ещё больше. И что самое приятное компилятор сам анализирует запрос и разделяет его на несколько паралельных потоков.
На этом пока все. В последующих статьях мы обязательно рассмотрим параллельные вычисления глубже.

P.S: Господа, огромный респект и уважуха тем кто поможет прикрутить подсветку синтаксиса!
P.S.S: Юра Опрышко, спасибо за помощь, и то что ты меня тыкнул в мою невнимательность:)

3 березня 2010 р.

Lviv .Net User Group #1 - или проще говоря - Hello, Group!

Первая встреча Lviv .Net User Group!

Свершилось! Первая встреча Lviv .Net User Group будет проведена 19 марта по адресу: г.Львов, Пастернака 5 ( офис компании SoftServe ) в 19:00.

Темы которые будут обсуждаться:
1. Зачем Lviv .Net User Group? Знакомство участников.
2. What's new in ASP.Net 4.0. Докладчик: Малеев Дмитрий.

Агенда:
  • History of ASP.Net
  • Changes to Core Services
  • Changes to Web Forms
  • Visual Studio 2010 Web Designer Improvements

3. Microsoft Azure Overview. Докладчик: Малеев Дмитрий.

Агенда:
  • Clouds?
  • Microsoft Azure Overview
  • Windows Azure
  • SQL Azure
  • Windows Azure App Fabric

Если Вы планируете придти - отправте пожалуйста свои имя/фамилию на diwingless{собака}gmail.com.

С уважением,
-Дима

Добро пожаловать!

Добро пожаловать!

Очень рад Вас поприветствовать в нашем Блоге. Блог будет полностью посвящен жизни Lviv .Net User Group. Тут Мы будем постить интересную информацию, анонсы и всякие дополнительные вкусности!

Приятного чтения!