Май 2007 - Posts
Шумная тема нынче эти патенты. То есть, раньше оно как-то было, но никого особенно не трогало, и вот Microsoft заявляет, что опенсорс нарушает какое-то бешеное количество (аж 235) их патентов, и при этом не говорит какие конкретно патенты были нарушены.
Read More...
Шумная тема нынче эти патенты. То есть, раньше оно как-то было, но никого особенно не трогало, и вот Microsoft заявляет, что опенсорс нарушает какое-то бешеное количество (аж 235) их патентов, и при этом не говорит какие конкретно патенты были нарушены.
По этому поводу хочу порекомендовать интересный подкаст от TWiT. Кому не очень интересно/удобно/понятно слушать, можно почитать транскрипт. Правда, транскрипт тоже на английском.
Сначала разговор ни о чём, но потом начинается интересная часть про то, чем отличается патент, копирайт и трейдмарк, историю патентов на ПО, проблемы с ними и современное состояние этой отрасли. Ну и, конечно, не обошли стороной ситуацию с Microsoft vs. Open Source.
Как-то это всё напомнило мне трагедию "о школьном директоре замолвите слово" и своеобразные действия правоохранительных органов, бросившихся искать везде нелицензионное ПО. Где-то проскакивала фраза "что же мне делать, если однажды ко мне придут и я не смогу доказать лицензионность написанной мною программы". Теперь же получается, что даже если я сам написал программу, сам напечатал для неё лицензию, то всё равно я не могу спать спокойно, потому что где-то в мире есть большая корпорация, которая каждый день патентует сотню-другую технологий, которые я по незнанию могу использовать в своём коде. И разобраться во всём многообразии патентов от крупных корпораций просто нереально.
Кто-то может возразить, что патенты есть в свободном доступе, более того, есть поиск по патентам и всё такое. Но! Если послушать/прочитать рассказ Стива Гибсона из приведённого выше подкаста, то можно услышать историю, как 20 лет назад он запатентовал свою софтверную разработку, описав её в терминах аппаратного обеспечения. (Не совсем понятно, как это было сделано, но общая идея ясна.) И таких патентов за годы, прошедшие с тех пор появилось немало. Таким образом может случиться так, что использовать пузырьковую сортировку в своей программе нельзя ни в коем случае, потому что она была однажды запатентована как "техника сортировки цыплят по размеру для более эффективного распределения кормов на птицефабрике". Согласитесь, что не каждый сможет начать думать о нежных жёлтых созданиях в процессе поиска патента на пузырьковую сортировку, так что поиск, будь он хоть трижды хорош, теряет смысл.
В общем, тема требует более тщательного рассмотрения. И особенно пристальное внимание ей стоит уделять в процессе выпуска какого бы то ни было программного продукта в массы, потому что всегда есть шанс, что этот продукт станет успешным и к нему начнутся претензии со стороны патентодержателей и правообладателей.
Пару дней назад я писал о том, как можно нетрадиционно использовать возможности анонимных делегатов в C# 2.0. То есть не то, чтобы нетрадиционно, но в стиле JavaScript.
Настало время посмотреть как подобное извращение влияет на скомпилированный код. Для этого напишем небольшой примерчик.
using System;
public class App{
private static Action<string> _actionAsDelegate = delegate(string text){
return;
};
private static void _actionAsStaticMethod(string text){
return;
}
private void _actionAsMethod(string text){
return;
}
public static void Main(string[] args){
_actionAsDelegate(string.Empty);
_actionAsStaticMethod(string.Empty);
(new App())._actionAsMethod(string.Empty);
}
}
На всякий случай объясню немножко, чего я пытаюсь сказать. Итак: надо выполнить какое-то действие над строкой. Первый вариант - это простой метод _actionAsMethod, а второй - _actionAsDelegate, который на самом деле всего лишь переменная, которой присвоен анонимный делегат. В JavaScript такое объявление вполне нормально и иногда даже более правильно, чем объявление функции стандартным путём. На всякий случай, я написал ещё _actionAsStaticMethod, просто для того, чтобы сравнить результаты.
Компилируем и смотрим, что скажет по этому поводу ILDASM.
.method public hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 45 (0x2d)
.maxstack 8
IL_0000: nop
IL_0001: ldsfld class [mscorlib]System.Action`1<string> App::_actionAsDelegate
IL_0006: ldsfld string [mscorlib]System.String::Empty
IL_000b: callvirt instance void class [mscorlib]System.Action`1<string>::Invoke(!0)
IL_0010: nop
IL_0011: ldsfld string [mscorlib]System.String::Empty
IL_0016: call void App::_actionAsStaticMethod(string)
IL_001b: nop
IL_001c: newobj instance void App::.ctor()
IL_0021: ldsfld string [mscorlib]System.String::Empty
IL_0026: call instance void App::_actionAsMethod(string)
IL_002b: nop
IL_002c: ret
} // end of method App::Main
Сейчас сразу не вспомню где конкретно, но я где-то определённо читал, что анонимные делегаты превращаются компилятором в методы. А тут что-то совсем сложное. Одно ясно однозначно: вызов _actionAsDelegate дороже вызова _actionAsMethod, хотя бы потому, что он виртуальный. Для полной достоверности, надо бы, наверное, провести замеры времени при 1_000_000 итераций, но я этим заниматься не стану. Для меня главное - уяснить, что JavaScript'овые штучки в C# "не пройдут", что в общем-то, и правильно. Каждому - своё.
If all you have is a hammer, everything looks like a nail. Bernard Baruch Постоянно натыкаюсь в блогах на фразы типа: "Функциональное программирование: изучи его и познаешь истинный смысл вещей". "Ок!" - подумал я, и стал уделять ему больше внимания.
Read More...
Не знаю почему, но мне казалось, что Google принципиально не использует продуктов от Microsoft . И база у них MySql , и работа вся на Линуксах , и в вакансиях только Java да С++ . Сегодня совершенно случайно обнаружил, что .Net (а точнее ASP.NET ) в Гугле
Read More...
Читал я сегодня фиды как обычно и наткнулся на вот это: Corkboard CSS Style Guide . Если кто-то знать не знает, что такое CSS , или просто не хочет читать ещё одну статью на английском, не беспокойтесь, приведённая ссылка не имеет ровным счётом никакого
Read More...
Вот и апрель закончился, а на желаемую частоту постов в блоге я так и не выхожу. И тут, о чудо!, на помощь снова приходят англоязычные блоггеры. Спасибо им за мысли, которые можно находить, переваривать, проецировать на отечественную действительность,
Read More...
Сразу предупреждаю всех: я почти что ничегошеньки не смыслю в том, что касается поисковой оптимизации. Ну, то есть, я конечно предполагаю как оно всё происходит, но в реальной жизни с этим вопросом никода не сталкивался. Итак... Последние пару месяцев
Read More...