Кстати, отмечу свой личный опыт: еще ни разу попапы/баннеры мне не помогали найти/купить что-то полезное, скорее раздражали, но по ссылкам справа от письма в gmail я уже пару раз натыкался на именно то, что мне нужно или меня заинтересовало.
Я не СЕОшник, но меня немного это удивляет, неужели прыгающие-мигающие баннера, которые так раздражают эффективны?
Честно говоря, действительно не совсем ясна цель топика.
На каждое предложение свой покупатель. Я ни разу не пользовался mail.ru, но, думаю, тем кто пользуется нужна была такая фича (как я понял по комментам ее там раньше не было), и люди готовы были платить — вот она и появилась.
Другой вопрос, почему доллар, если сайт Российский? Логичней было в рублях цену.
Лично мне скорее не понятно, почему ресурс, считающий себя вроде типа крупным вводит систему монетизации скорее похожую на небольшие стартапчики. Обычно крупные ресурсы окупают себя трафиком, а не СМС или разовыми услугами по типу почистить комменты/вопросы.
Я очень удивлюсь если гугл или яху или майкрософт введут что-то подобное на своих ресурсах (плиз киньте ссылкой если такое есть, просто интересно — например удаление паблик документа из docs.google.com или из code.google.com за деньги), но совершенно не удивлюсь подобного решения от Мейл.ру или Одноклассников или ВКонтакте.
Если реально будут желающие реализовать, я готов перевести некоторую сумму на создание такого «фильма».
Имхо если собрать все предложения («Зверь из машины», «мировые обманы — проблема 2к и бум доткомов», «миллиарды за ничто или за что получили деньги самые богатые люди мира» и т.д.) может выйти даже серия «разоблачающих» фильмов + запустить перед релизом пару вирусных видео с якобы отрывками + попытками саботажа, снятых с мобилок (например, несколько бритоголовых парней врывающихся в «студию»).
Кстати, главное не забыть стандартный якорь, используемый в таких фильмах — это всемирный заговор и скрытое правительство (сюда добавить «разоблачающие» ссылки на реальные старые судебные процессы по сговору крупных корпораций — Intel, AMD).
+ добавить репортажи о том, как один русский парень написал ОС (а все тратят миллиарды — вот он, заговор!) и еще парочку таких сюжетов.
В общем, думаю действительно можно собрать некую сумму для реализации этой задумки.
Когда я писал, у меня тоже возник этот вопрос. На википедии было три варианта: «отражение или рефлексия (синоним интроспекция, англ. reflection)». Я выбрал «рефлексия», потому-что оно проще чем «интроспекция» но более ближе к английскому варианту «reflection».
Но, действительно, в дальнейшем я все-таки пересмотрю свою точку зрения. Спасибо.
теперь вместо var method = typeof (B).GetMethod("DoWork");
method.Invoke(b, "xxx");
Можно var b = new B();
var expr = MakeCall<B,string>(b, "DoWork");
expr("xxx");
разница (пустой класс б с 1 методом, фор с вызовом 20000000 раз через expr и через method.Invoke(b, «xxx»); ):
time = 00:00:00.8665175
time = 00:00:27.2921866
leo, чисто ради интереса написал вот такой метод: public static Action MakeCall<TClass, TArg>(TClass instance, string name)
{
var instanceExpr = Expression.Constant(instance);
var param = Expression.Parameter(typeof (TArg), "arg");
var call = Expression.Call(instanceExpr, name, Type.EmptyTypes, param);
var expr = Expression.Lambda<Action>(call,param).Compile();
return expr;
}
Т.е. если вместо свойства (property) — метод? тогда просто вместо Expression.Property — Expression.Call. А остальное то же самое — в конце концов выходит обычный Func<>, который можно вызывать, и по скорости намного выше MethodInfo.Invoke
Кстати, если говорить именно о 4.0, я там заметил RuntimeVariablesExpression — возможно его можно было бы использовать, но пока не нашел достаточно информации.
В реальной системе перехватом можно пользоваться для совсем не существующих методов. Например: есть веб-узел, предоставляющий свои функции через урл по типу domain.com/{funcname}/{parameters}
С помощью перехвата это можно сделать реализовав один перехватчик кидающий запрос на узел. В результате будет что-то вроде service.DoSomeFunc(a,b) будет кидать запрос на domain/DoSomeFunc/a=xxx&b=xxx
С ExpandoObject — действительно он лучше всего предназначен для представления сильно отличающихся друг от друга сущностей. Иначе стоит задуматься о создании общих классов с необходимыми функциями и делегировать им поведение.
Если сравнивать с рефлексией, то метод с выражениями меня лично очень поразил — ведь фактически особых изменений нет — вместо PropertyInfo/MethodInfo храним откомпилированное выражение. А прирос производительности просто потрясающий.
Огромное спасибо! Действительно, очень хотелось все-таки выложить статью. Думаю время публикации «05:44» чуть чуть меня оправдает. Да и орфография — одно из самый слабых моих качеств, но стараюсь импрувить :)
На самом деле это был первый вариант реализации — с использованием DynamicMethod. Даже был более или менее работающий код, но он был довольно громоздкий, и не очень читабелен. А про производительности по сравнению с Expressions он давал разницу сравнимую с random (фактически автоматический генератор иногда генерирует непонятные конструкции по типа безусловных прыжков на следующую инструкцию). По этому я удалил это решение.
Возможно все-таки надо было включить, но статья и так вышла слегка раздутая, хотелось чтоб различия в методах были все-таки более заметные. А то реально можно придумать еще парочку модификаций каждого метода :)
Действительно варианты похожие. Но вариант с Expression-ами:
а) дает все-таки некое подобие на строгую типизацию — мы задаем точный тип возврата.
б) не надо каждый раз писать руками делегат (он фактически генерируется).
Не хватает пункта
— У меня не IT, но техническое образование (мехмат, физик и т.д.). В нем был курс дискретной математики, но не было theoretical CS.
Я — математик, закончил физ.мат. специальность математика (КПИ, Киев, Украина). Дискретной математики было очень много, но «theoretical CS»… если не ошибаюсь, то один семестр были какие-то основы компьютерной науки, где максимум сортировку пузырьком писали на паскале. Никаких теорий алгоритмов и т.д.
Зато мат. логика, теория доказательств и т.д. — т.е. «чистая математика» (у нас отдельный был факультет — «прикладная математика», где уже были теории алгоритмов).
Ну как бы индексы в RDMS под частую на них и делаются :)
Не забывайте, что основные задачи MapReduce — обойти ограничение по памяти и максимально запаралелить.
А с деревьями проблема, что надо дерево иметь в распоряжении во время индексирования (добавления/поиска). И если очень большое дерево или надо чтоб обработка шла одновременно на распределенной системе, деревья не оправдывают возложенных на них задач.
Я не СЕОшник, но меня немного это удивляет, неужели прыгающие-мигающие баннера, которые так раздражают эффективны?
На каждое предложение свой покупатель. Я ни разу не пользовался mail.ru, но, думаю, тем кто пользуется нужна была такая фича (как я понял по комментам ее там раньше не было), и люди готовы были платить — вот она и появилась.
Другой вопрос, почему доллар, если сайт Российский? Логичней было в рублях цену.
Лично мне скорее не понятно, почему ресурс, считающий себя вроде типа крупным вводит систему монетизации скорее похожую на небольшие стартапчики. Обычно крупные ресурсы окупают себя трафиком, а не СМС или разовыми услугами по типу почистить комменты/вопросы.
Я очень удивлюсь если гугл или яху или майкрософт введут что-то подобное на своих ресурсах (плиз киньте ссылкой если такое есть, просто интересно — например удаление паблик документа из docs.google.com или из code.google.com за деньги), но совершенно не удивлюсь подобного решения от Мейл.ру или Одноклассников или ВКонтакте.
Если все-таки хочется чтоб работало и там, то в строку запуска хрома добавить "--allow-scripting-gallery"
Обычно используется для автоматического тестирования.
Имхо если собрать все предложения («Зверь из машины», «мировые обманы — проблема 2к и бум доткомов», «миллиарды за ничто или за что получили деньги самые богатые люди мира» и т.д.) может выйти даже серия «разоблачающих» фильмов + запустить перед релизом пару вирусных видео с якобы отрывками + попытками саботажа, снятых с мобилок (например, несколько бритоголовых парней врывающихся в «студию»).
Кстати, главное не забыть стандартный якорь, используемый в таких фильмах — это всемирный заговор и скрытое правительство (сюда добавить «разоблачающие» ссылки на реальные старые судебные процессы по сговору крупных корпораций — Intel, AMD).
+ добавить репортажи о том, как один русский парень написал ОС (а все тратят миллиарды — вот он, заговор!) и еще парочку таких сюжетов.
В общем, думаю действительно можно собрать некую сумму для реализации этой задумки.
Но, действительно, в дальнейшем я все-таки пересмотрю свою точку зрения. Спасибо.
теперь вместо
var method = typeof (B).GetMethod("DoWork");
method.Invoke(b, "xxx");
Можно
var b = new B();
var expr = MakeCall<B,string>(b, "DoWork");
expr("xxx");
разница (пустой класс б с 1 методом, фор с вызовом 20000000 раз через expr и через method.Invoke(b, «xxx»); ):
time = 00:00:00.8665175
time = 00:00:27.2921866
впечатляет… :)
public static Action MakeCall<TClass, TArg>(TClass instance, string name)
{
var instanceExpr = Expression.Constant(instance);
var param = Expression.Parameter(typeof (TArg), "arg");
var call = Expression.Call(instanceExpr, name, Type.EmptyTypes, param);
var expr = Expression.Lambda<Action>(call,param).Compile();
return expr;
}
использовать:
Кстати, если говорить именно о 4.0, я там заметил RuntimeVariablesExpression — возможно его можно было бы использовать, но пока не нашел достаточно информации.
С помощью перехвата это можно сделать реализовав один перехватчик кидающий запрос на узел. В результате будет что-то вроде service.DoSomeFunc(a,b) будет кидать запрос на domain/DoSomeFunc/a=xxx&b=xxx
С ExpandoObject — действительно он лучше всего предназначен для представления сильно отличающихся друг от друга сущностей. Иначе стоит задуматься о создании общих классов с необходимыми функциями и делегировать им поведение.
Если сравнивать с рефлексией, то метод с выражениями меня лично очень поразил — ведь фактически особых изменений нет — вместо PropertyInfo/MethodInfo храним откомпилированное выражение. А прирос производительности просто потрясающий.
Если вдруг у кого есть информация, какой именно permission требует, напишите. Логически он должен требовать что-то…
Конечно же проверю все и постараюсь исправлю.
Возможно все-таки надо было включить, но статья и так вышла слегка раздутая, хотелось чтоб различия в методах были все-таки более заметные. А то реально можно придумать еще парочку модификаций каждого метода :)
а) дает все-таки некое подобие на строгую типизацию — мы задаем точный тип возврата.
б) не надо каждый раз писать руками делегат (он фактически генерируется).
— встроенный drag-n-drop
— табы и Win-W
— установка кастомного шрифта (для отображения каны)
А то, на каком диске я нахожусь я определяю легко — включаю отображение свободного пространства :)
Остальное для меня — приятные незаметные вкусности. Но надо попробовать.
Но Undying действительно имхо в своем роде шедевральная игра, особенно в то время, когда она появилась.
— У меня не IT, но техническое образование (мехмат, физик и т.д.). В нем был курс дискретной математики, но не было theoretical CS.
Я — математик, закончил физ.мат. специальность математика (КПИ, Киев, Украина). Дискретной математики было очень много, но «theoretical CS»… если не ошибаюсь, то один семестр были какие-то основы компьютерной науки, где максимум сортировку пузырьком писали на паскале. Никаких теорий алгоритмов и т.д.
Зато мат. логика, теория доказательств и т.д. — т.е. «чистая математика» (у нас отдельный был факультет — «прикладная математика», где уже были теории алгоритмов).
Не забывайте, что основные задачи MapReduce — обойти ограничение по памяти и максимально запаралелить.
А с деревьями проблема, что надо дерево иметь в распоряжении во время индексирования (добавления/поиска). И если очень большое дерево или надо чтоб обработка шла одновременно на распределенной системе, деревья не оправдывают возложенных на них задач.