Hungry Mind , Blog about everything in IT - C#, Java, C++, .NET, Windows, WinAPI, ...

Oracle Database 11g Release 1 (11.1.0.6.0) for Windows has released

Свершилось! Теперь можно забыть про Линупс на виртуальной машине! Oracle Database 11g Release 1 (11.1.0.6.0) for Microsoft Windows (32-bit)

C# freaks on generics

Спокойно компилируется...
partial class partial<[partial: where] where> where where : partial<where> {}
Рекурсивные шаблоны...
namespace N
{
    public abstract class A<B>
    {
        public abstract void Foo(B x);

        public abstract class C<D> : A<C<D>>
        {
            public abstract class T<E> : C<T<E>>
            {
                public new class C<F> : T<C<F>>
                {
                    public override void Foo(ТИП x) // Подставить тип сюда
                    {}
                }
            }
        }
    }
}
Я бы вместо дурацких вопросов давал кандидатам эту задачу на полчаса\час в качестве стресс-теста на логическое мышление.

Lingvo, чисто поржать

motherfucker
сущ.; = mother-fucker; = muthafucka; = mutherfukka
1) неценз. ублюдок (ещё более грубый вариант от fucker)
You think I'm joking, motherfucker?! — Ты думаешь, я шучу, ублюдок?!
Look at that sexy motherfucker shaking her ass. — Смотри, как эта смазливая сучка виляет задницей.
What gives, motherfucker? — Ну как дела, хрен моржовый?
2) что-то очень большое, сильное, опасное
to fly a 250-passenger motherfucker — управлять 250-местной бандурой
A this is how Trout describes that A-bomb - "a purple motherfucker as big as a boiler of middle-size heat plant". — А вот как Траут описывает ту атомную бомбу - "багровая дура размером с паровой котёл бойлерной средних размеров". (К.Воннегут, "Время назад")
What do you think is the most lethal drink? - A Purple Motherfucker. — Какой напиток самый убойный? -Лиловая Хреновина.
motherfucker
1) Leave me alone, motherfucker — Оставь меня, блин, в покое, придурок
Where are you, where, motherfucker? — Куда ты делся, твою мать?
Rise, motherfucker, you're gonna die — Вставай, сволочь, тебе пришел конец
Just a minute, motherfucker — Одну минуту, гондон
He's the dumbest motherfucker I've ever seen — Такого тупорылого ублюдка, в натуре, еще поискать надо
You'll regret every word you said, motherfucker — Ты, пидор, еще пожалеешь о том, что сказал
2) What gives, motherfucker? — Ну как дела, старик?

I hate all this code style formatting (braces layout)

Ненавижу придерживаться глупых правил.

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

Основная теорема форматирования гласит, что хорошее визуальное форматирование показывает логическую структуру программы. Демонстративность структуры кода должна преобладать над его красотой, а правила форматирования должны помогать хорошему коду выглядеть хорошо, а плохому - плохо.

Цели хорошего форматирования

  • Точно представлять логическую структуру кода
  • Единообразно показывать логическую структуру кода
  • Улучшать читабельность
  • Упрощать модификацию кода

Основное влияние на стиль форматирования имеет семантика языка программирования. Например, в языке Python с форматированием особо не повоюешь - язык его строго определяет сам. Блоки кода и подчинение блоков определяются исключительно отступами, т.е. форматированием:

if (x == 0):
SomeOperator
SomeOperator
SomeOperator

Здесь if (x == 0): является единственной частью управляющей структуры, а подчиненные операторы должны иметь положительный от ее начала отступ.

Управляющие структуры могут иметь вид:

  1. Явных блоков (Visual Basic, ADA, PL/SQL, ...)

    if (x == 0) [then]<--then может быть опущен
    SomeOperator
    SomeOperator
    SomeOperator
    end if;

  2. Эмуляций явных блоков (C++, Java, C#, ...)

    if (x == 0) {<-- начало блока является частью управляющей конструкции
    SomeOperator
    SomeOperator
    SomeOperator
    }<-- конец блока говорит об окончании управляющей конструкции и является эквивалентом end if;

  3. Управляющая конструкция, за которой следует блок с границами ( begin - end или { - })

    if (x == 0)
    {<-- начало блока не является частью управляющей конструкции
    SomeOperator
    SomeOperator
    SomeOperator
    }<-- конец блока

  4. Отформатированных блоков, когда пробельный символ является конструкцией языка (Python)

    if (x == 0):
    SomeOperator
    SomeOperator
    SomeOperator

Из всех вариантов хуже всего смотрится вариант 3 (а в HTML - намного хуже :), причем некоторые энтузиасты умудряются делать его еще уродливей:

if (x == 0)
{<-- начало блока не является частью управляющей конструкции и визуально ей не подчиняется
SomeOperator<-- Этот блок на самом деле не подчиняется {, хотя визуально выглядит иначе
SomeOperator
SomeOperator
}<-- конец блока на уровне управляющей конструкции

Или:

if (x == 0)
{<-- начало блока не является частью управляющей конструкции
SomeOperator
SomeOperator
SomeOperator<-- Этот блок на самом деле не подчиняется {, хотя визуально выглядит иначе
}<-- конец блока

Поубивал бы.

Продолжение следует...

Designing .NET Class Libraries

Только что посмотрел must see видео
MSR Technical Education Series: Designing .NET Class Libraries by Krzysztof Cwalina
Рассматриваются 4 концепции:
  1. Simple
  2. Integrated
  3. Consistent
  4. Evolvable
BTW, Krzysztof Cwalina является автором этой книги, и презентация, естественно, имеет непосредственное отношение к ее содержанию.

Antipattern "Public Morozov"

Из ЖЖ:

Сейчас на работе придумал новый антипаттерн "Паблик Морозов". Класс-потомок, созданный в соответствии с этим антипаттерном, выдает по запросу все данные класса-предка, независимо от степени их сокрытия.

Баян, конечно, но не перестаю сползать под стол.

Еще раз эту строку кто-то закоментирует - руки оборву

вот нашёл в коде: )))
public DBEngine(String p_connectionString)
{
   _connectionString = p_connectionString;
   _dbConnection = new SqlConnection(p_connectionString);
   _dbConnection.Open();
   //Рябченко : Еще раз эту строку кто-то закоментирует - руки оборву
   CheckDatabaseVersion();
}

Releasing the Source Code for the .NET Framework Libraries

Товарищ, работающий менеджером в Microsoft, сообщил, что Visual Studio 2008 зарелизится где-то в декабре 2007-го года (что, в принципе, отражает догадки о дате релиза). А, вместе с релизом, мы получим возможность посмотреть исходники .NET Base Class Libraries (System, System.IO, System.Collections, System.Configuration, System.Threading, System.Net, System.Security, System.Runtime, System.Text, ...), ASP.NET (System.Web), Windows Forms (System.Windows.Forms), ADO.NET (System.Data), XML (System.Xml), WPF (System.Windows) и даже с комментариями! Спустя месяц планируют добавить WCF, Workflow и LINQ.

Исходники можно будет скачать, как отдельный пакет, или же позволить Visual Studio 2008 скачивать их (вместе с файлами отладки) по мере надобности.

Должен заметить, что я, как и любой другой любопытный разработчик, потратил много времени как на декомпиляцию фреймворковских библиотек, так и на изучение Rotor Shared Source. Часто, без этого тяжело понять, как работают некоторые классы. Скажем, хорошие знания Remoting появились у меня только после просмотра исходников.

Единственное, чего бы не хотелось, - так это good old MFC development style, когда разработчик проводит 90% своего времени в исходных кодах MFC, тщетно пытаясь понять в чем проблема и как это работает.

Copyright 2007-2011 Chabster